diff options
author | Derrell Lipman <derrell@samba.org> | 2007-02-06 03:23:52 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:44:34 -0500 |
commit | ef256c958066c19bb10cbe9745bdf96b6514762d (patch) | |
tree | dbe379cb3021c5af2d1b8f74528e4fff968fc712 /webapps/qooxdoo-0.6.5-sdk/frontend | |
parent | a8d0f5df6266aeacdb20326094c0401618ab62e8 (diff) | |
download | samba-ef256c958066c19bb10cbe9745bdf96b6514762d.tar.gz samba-ef256c958066c19bb10cbe9745bdf96b6514762d.tar.bz2 samba-ef256c958066c19bb10cbe9745bdf96b6514762d.zip |
r21167: - Upgrade to latest released qooxdoo. This is step 1 of the upgrade process,
which involves adding the latest SDK. This new version has not 2, but 4
icon themes. In order to quiet Andrew B. who thinks that 9000+ files in a
gui api is too many (come on, disk space is free these days :-), I have
removed 3 of the 4 icon themes, leaving only the default, Nuvola. That
lowers the file count by 1/3. I'm sure Andrew still isn't happy, but I hope
he's a bit happier... Step 2 will make him happier yet.
(This used to be commit d161c1382c36238105b85d0499d5a1011f580f52)
Diffstat (limited to 'webapps/qooxdoo-0.6.5-sdk/frontend')
1684 files changed, 178421 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/Makefile new file mode 100644 index 0000000000..299aeaab20 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/Makefile @@ -0,0 +1,450 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################ +# PUBLIC VARIABLES +################################################################################ + +QOOXDOO_PATH = .. + + + + +################################################################################ +# INCLUDE CORE +################################################################################ + +include $(QOOXDOO_PATH)/frontend/framework/tool/make/framework.mk + + + + + +################################################################################ +# PRIVATE VARIABLES +################################################################################ + +RELEASE_BUILD_UNIX = release/temp/build/unix/qooxdoo-$(FRAMEWORK_VERSION)-build +RELEASE_BUILD_DOS = release/temp/build/dos/qooxdoo-$(FRAMEWORK_VERSION)-build + +RELEASE_SDK_UNIX = release/temp/sdk/unix/qooxdoo-$(FRAMEWORK_VERSION)-sdk +RELEASE_SDK_DOS = release/temp/sdk/dos/qooxdoo-$(FRAMEWORK_VERSION)-sdk + +APPLICATIONS = apiviewer feedreader sample showcase webmail +SDK_COPY = Makefile application/Makefile application/index.html + + + + + + + +################################################################################ +# COMMON TARGETS +################################################################################ + +source: + @$(MAKE) -s -C application source + +build: + @$(MAKE) -s -C application build + +api: + @$(MAKE) -s -C application api + +all: + @$(MAKE) -s -C application all + +locales: + @$(MAKE) -s -C application locales + +pretty: framework-pretty + @$(MAKE) -s -C application pretty + +fix: framework-fix + @$(MAKE) -s -C application fix + +publish: + @$(MAKE) -s -C application publish + +clean: + @$(MAKE) -s -C application clean + +distclean: + @$(MAKE) -s -C application distclean + @$(MAKE) -s release-distclean + @$(MAKE) -s framework-distclean + + + + + + +################################################################################ +# FRAMEWORK TARGETS +################################################################################ + +framework-distclean: + @echo + @echo "****************************************************************************" + @echo " CLEANING UP FRAMEWORK COMPLETELY" + @echo "****************************************************************************" + @echo " * Cleaning up..." + @$(CMD_REMOVE) $(FRAMEWORK_CACHE_PATH) + @$(CMD_REMOVE) $(FRAMEWORK_LOCALE_CLASS_PATH) + @$(CMD_REMOVE) $(FRAMEWORK_TRANSLATION_CLASS_PATH) + @$(CMD_REMOVE) application/skeleton.tar.gz + @$(CMD_REMOVE) application/skeleton.zip + @$(CMD_FIND) $(FRAMEWORK_PATH) $(FILES_TEMP) -exec $(CMD_REMOVE) {} \; + @$(CMD_REMOVE) $(FRAMEWORK_TOOL_PATH)/icon/temp + + +framework-pretty: + @echo + @echo "****************************************************************************" + @echo " PRETTIFYING FRAMEWORK CLASSES" + @echo "****************************************************************************" + @$(CMD_GENERATOR) \ + --pretty-print \ + --class-path $(FRAMEWORK_SOURCE_PATH)/$(FRAMEWORK_CLASS_FOLDERNAME) + +framework-fix: + @echo + @echo "****************************************************************************" + @echo " FIXING FRAMEWORK CLASSES" + @echo "****************************************************************************" + @$(CMD_GENERATOR) \ + --fix-source \ + --class-path $(FRAMEWORK_SOURCE_PATH)/$(FRAMEWORK_CLASS_FOLDERNAME) + + + + +################################################################################ +# MIGRATION TARGETS +################################################################################ + + +checkout-migration: + @echo + @echo "****************************************************************************" + @echo " MIGRATE CHECKOUT" + @echo "****************************************************************************" + @if [ 1 ]; then \ + migrate_options="--class-path framework/source/class --migration-input application/sample/source/html/"; \ + for APPLICATION in $(APPLICATIONS); do \ + if [ -d application/$$APPLICATION/source/class ]; then \ + migrate_options="$${migrate_options} --class-path application/$$APPLICATION/source/class"; \ + fi; \ + done; \ + $(CMD_GENERATOR) \ + --migrate-source --migration-target `echo $(FRAMEWORK_VERSION) | cut -d'-' -f1` \ + $${migrate_options}; \ + fi; + + + + + + + +################################################################################ +# SKELETON TARGETS +################################################################################ + +SKELETON_TEMP_UNIX = temp-skeleton-unix +SKELETON_TEMP_DOS = temp-skeleton-dos + +SKELETON_FILES = Makefile source/class source/resource source/index.html + + +info-skeleton-unix: + @echo + @echo "****************************************************************************" + @echo " GENERATING UNIX VERSION OF SKELETON" + @echo "****************************************************************************" + +info-skeleton-dos: + @echo + @echo "****************************************************************************" + @echo " GENERATING DOS VERSION OF SKELETON" + @echo "****************************************************************************" + +skeleton-unix: info-skeleton-unix exec-skeleton-unix exec-skeleton-unix-post exec-skeleton-unix-clean +skeleton-dos: info-skeleton-dos exec-skeleton-dos exec-skeleton-dos-post exec-skeleton-dos-clean + +exec-skeleton-unix: exec-skeleton-unix-collect exec-skeleton-unix-archive +exec-skeleton-dos: exec-skeleton-dos-collect exec-skeleton-dos-archive + +exec-skeleton-unix-collect: + @echo " * Collecting skeleton files..." + @for FILE in $(SKELETON_FILES); do \ + echo " - $$FILE"; \ + $(CMD_DIR) `dirname $(SKELETON_TEMP_UNIX)/skeleton/$$FILE`; \ + $(CMD_SYNC_OFFLINE) application/skeleton/$$FILE `dirname $(SKELETON_TEMP_UNIX)/skeleton/$$FILE`; \ + done + +exec-skeleton-unix-archive: + @echo " * Cleaning up target folders..." + @$(CMD_FIND) $(SKELETON_TEMP_UNIX) $(FILES_TEMP) -exec $(CMD_REMOVE) {} \; + + @echo " * Switching to Unix line endings..." + @$(CMD_FIND) $(SKELETON_TEMP_UNIX) $(FILES_TEXT) $(CMD_ANY2UNIX) + + @echo " * Fixing executables..." + @$(CMD_FIND) $(SKELETON_TEMP_UNIX) $(FILES_EXEC) -exec $(CMD_MKEXEC) {} \; + + @echo " * Building skeleton archive..." + @$(CMD_REMOVE) $(SKELETON_TEMP_UNIX)/skeleton.tar.gz + @cd $(SKELETON_TEMP_UNIX); $(CMD_TAR_CREATE) skeleton.tar.gz skeleton + @$(CMD_REMOVE) $(SKELETON_TEMP_UNIX)/skeleton + +exec-skeleton-dos-collect: + @echo " * Collecting skeleton files..." + @for FILE in $(SKELETON_FILES); do \ + echo " - $$FILE"; \ + $(CMD_DIR) `dirname $(SKELETON_TEMP_DOS)/skeleton/$$FILE`; \ + $(CMD_SYNC_OFFLINE) application/skeleton/$$FILE `dirname $(SKELETON_TEMP_DOS)/skeleton/$$FILE`; \ + done + +exec-skeleton-dos-archive: + @echo " * Cleaning up target folders..." + @$(CMD_FIND) $(SKELETON_TEMP_DOS) $(FILES_TEMP) -exec $(CMD_REMOVE) {} \; + + @echo " * Switching to DOS line endings..." + @$(CMD_FIND) $(SKELETON_TEMP_DOS) $(FILES_TEXT) $(CMD_ANY2DOS) + + @echo " * Fixing executables..." + @$(CMD_FIND) $(SKELETON_TEMP_DOS) $(FILES_EXEC) -exec $(CMD_MKEXEC) {} \; + + @echo " * Building skeleton archive..." + @$(CMD_REMOVE) $(SKELETON_TEMP_DOS)/skeleton.zip + @cd $(SKELETON_TEMP_DOS); $(CMD_ZIP_CREATE) skeleton.zip skeleton + @$(CMD_REMOVE) $(SKELETON_TEMP_DOS)/skeleton + +exec-skeleton-unix-post: + @$(CMD_SYNC_OFFLINE) $(SKELETON_TEMP_UNIX)/skeleton.tar.gz application/ + @echo + @echo " * Created application/skeleton.tar.gz" + @echo " Please extract to a location outside this qooxdoo folder." + +exec-skeleton-dos-post: + @$(CMD_SYNC_OFFLINE) $(SKELETON_TEMP_DOS)/skeleton.zip application/ + @echo + @echo " * Created application/skeleton.zip" + @echo " Please extract to a location outside this qooxdoo folder." + +exec-skeleton-unix-clean: + @$(CMD_REMOVE) $(SKELETON_TEMP_UNIX) + +exec-skeleton-dos-clean: + @$(CMD_REMOVE) $(SKELETON_TEMP_DOS) + + + + + + + + +################################################################################ +# RELEASE TARGETS +################################################################################ + +release-distclean: + @echo + @echo "****************************************************************************" + @echo " CLEANING UP RELEASE COMPLETELY" + @echo "****************************************************************************" + @echo " * Cleaning up..." + @$(CMD_REMOVE) release + + + + +release: release-sdk release-build +release-fast: release-build-fast release-sdk-fast + + + + +release-build: build release-build-fast +release-build-fast: release-build-info release-build-unix release-build-dos + +release-build-info: + @echo + @echo "****************************************************************************" + @echo " GENERATING BUILD VERSION OF RELEASE $(FRAMEWORK_VERSION)" + @echo "****************************************************************************" + +release-build-unix: + @echo + @echo " SYNCHRONISATION OF BUILD RELEASE (UNIX VERSION)" + @echo "----------------------------------------------------------------------------" + + @echo " * Copying info files..." + @$(CMD_DIR) $(RELEASE_BUILD_UNIX) + @for FILE in `find ../ -maxdepth 1 -type f -name "[A-Z]*"`; do \ + echo " - `basename $$FILE`"; \ + cp -f $$FILE $(RELEASE_BUILD_UNIX); \ + done + + @echo " * Synchronizing applications..." + @for APPLICATION in $(APPLICATIONS); do \ + echo " - $$APPLICATION"; \ + $(CMD_DIR) $(RELEASE_BUILD_UNIX)/frontend/$$APPLICATION; \ + if [ ! -r application/$$APPLICATION/build ]; then \ + echo " - Missing build folder! Run $(MAKE) build first!"; \ + exit 1; \ + fi; \ + $(CMD_SYNC_OFFLINE) application/$$APPLICATION/build/* $(RELEASE_BUILD_UNIX)/frontend/$$APPLICATION; \ + done + @echo " * Generating index.html..." + @cat application/index.html | \ + sed 's/class="source"/class="source hide"/g' | \ + sed 's/class="build"//g' > $(RELEASE_BUILD_UNIX)/frontend/index.html + + @echo " * Switching to Unix line endings..." + @$(CMD_FIND) $(RELEASE_BUILD_UNIX) $(FILES_TEXT) $(CMD_ANY2UNIX) + + @echo " * Generating tar archive..." + @cd release/temp/build/unix; $(CMD_REMOVE) qooxdoo-$(FRAMEWORK_VERSION)-build.tar.gz; $(CMD_NICE) tar cfzp ../../../qooxdoo-$(FRAMEWORK_VERSION)-build.tar.gz qooxdoo-$(FRAMEWORK_VERSION)-build + +release-build-dos: + @echo + @echo " SYNCHRONISATION OF BUILD RELEASE (DOS VERSION)" + @echo "----------------------------------------------------------------------------" + + @echo " * Copying info files..." + @$(CMD_DIR) $(RELEASE_BUILD_DOS) + @for FILE in `find ../ -maxdepth 1 -type f -name "[A-Z]*"`; do \ + echo " - `basename $$FILE`"; \ + cp -f $$FILE $(RELEASE_BUILD_DOS); \ + done + + @echo " * Synchronizing applications..." + @for APPLICATION in $(APPLICATIONS); do \ + echo " - $$APPLICATION"; \ + $(CMD_DIR) $(RELEASE_BUILD_DOS)/frontend/$$APPLICATION; \ + if [ ! -r application/$$APPLICATION/build ]; then \ + echo " - Missing build folder! Run $(MAKE) build first!"; \ + exit 1; \ + fi; \ + $(CMD_SYNC_OFFLINE) application/$$APPLICATION/build/* $(RELEASE_BUILD_DOS)/frontend/$$APPLICATION; \ + done + + @echo " * Generating index.html..." + @cat application/index.html | \ + sed 's/class="source"/class="source hide"/g' | \ + sed 's/class="build"//g' > $(RELEASE_BUILD_DOS)/frontend/index.html + + @echo " * Switching to DOS line endings..." + @$(CMD_FIND) $(RELEASE_BUILD_DOS) $(FILES_TEXT) $(CMD_ANY2DOS) + + @echo " * Generating zip archive..." + @cd release/temp/build/dos; $(CMD_REMOVE) qooxdoo-$(FRAMEWORK_VERSION)-build.zip; $(CMD_NICE) zip -rq ../../../qooxdoo-$(FRAMEWORK_VERSION)-build.zip qooxdoo-$(FRAMEWORK_VERSION)-build + + + + + + + + + +release-sdk: distclean release-sdk-fast +release-sdk-fast: release-sdk-info release-sdk-unix release-sdk-dos + +release-sdk-info: + @echo + @echo "****************************************************************************" + @echo " GENERATING SDK VERSION OF RELEASE $(FRAMEWORK_VERSION)" + @echo "****************************************************************************" + +release-sdk-unix: + @echo + @echo " SYNCHRONISATION OF SDK RELEASE (UNIX VERSION)" + @echo "----------------------------------------------------------------------------" + + @echo " * Copying info files..." + @$(CMD_DIR) $(RELEASE_SDK_UNIX) + @for FILE in `find ../ -maxdepth 1 -type f -name "[A-Z]*"`; do \ + echo " - `basename $$FILE`"; \ + cp -f $$FILE $(RELEASE_SDK_UNIX); \ + done + + @echo " * Synchronizing applications..." + @for APPLICATION in $(APPLICATIONS); do \ + echo " - $$APPLICATION"; \ + $(CMD_DIR) $(RELEASE_SDK_UNIX)/frontend/application/$$APPLICATION; \ + $(CMD_SYNC_OFFLINE) --exclude script --exclude build --exclude publish application/$$APPLICATION/* $(RELEASE_SDK_UNIX)/frontend/application/$$APPLICATION; \ + done + + @echo " * Synchronizing framework..." + @$(CMD_DIR) $(RELEASE_SDK_UNIX)/frontend/framework + @$(CMD_SYNC_OFFLINE) --exclude .cache --exclude tool/icon/themes --exclude tool/icon/temp framework/* $(RELEASE_SDK_UNIX)/frontend/framework + + @echo " * Copying remaining SDK files..." + @for ITEM in $(SDK_COPY); do \ + cp -f $$ITEM $(RELEASE_SDK_UNIX)/frontend/$$ITEM; \ + done + + @$(MAKE) -s exec-skeleton-unix + @$(CMD_SYNC_OFFLINE) $(SKELETON_TEMP_UNIX)/skeleton.tar.gz $(RELEASE_SDK_UNIX)/frontend/application/ + @$(MAKE) -s exec-skeleton-unix-clean + + @echo " * Generating tar archive..." + @cd release/temp/sdk/unix; $(CMD_REMOVE) qooxdoo-$(FRAMEWORK_VERSION)-sdk.tar.gz; $(CMD_TAR_CREATE) ../../../qooxdoo-$(FRAMEWORK_VERSION)-sdk.tar.gz qooxdoo-$(FRAMEWORK_VERSION)-sdk + +release-sdk-dos: + @echo + @echo " SYNCHRONISATION OF SDK RELEASE (DOS VERSION)" + @echo "----------------------------------------------------------------------------" + + @echo " * Copying info files..." + @$(CMD_DIR) $(RELEASE_SDK_DOS) + @for FILE in `find ../ -maxdepth 1 -type f -name "[A-Z]*"`; do \ + echo " - `basename $$FILE`"; \ + cp -f $$FILE $(RELEASE_SDK_DOS); \ + done + + @echo " * Synchronizing applications..." + @for APPLICATION in $(APPLICATIONS); do \ + echo " - $$APPLICATION"; \ + $(CMD_DIR) $(RELEASE_SDK_DOS)/frontend/application/$$APPLICATION; \ + $(CMD_SYNC_OFFLINE) --exclude script --exclude build --exclude publish application/$$APPLICATION/* $(RELEASE_SDK_DOS)/frontend/application/$$APPLICATION; \ + done + + @echo " * Synchronizing framework..." + @$(CMD_DIR) $(RELEASE_SDK_DOS)/frontend/framework + @$(CMD_SYNC_OFFLINE) --exclude .cache --exclude tool/icon/themes --exclude tool/icon/temp framework/* $(RELEASE_SDK_DOS)/frontend/framework + + @echo " * Copying remaining SDK files..." + @for ITEM in $(SDK_COPY); do \ + cp -f $$ITEM $(RELEASE_SDK_DOS)/frontend/$$ITEM; \ + done + + @$(MAKE) -s exec-skeleton-dos + @$(CMD_SYNC_OFFLINE) $(SKELETON_TEMP_DOS)/skeleton.zip $(RELEASE_SDK_DOS)/frontend/application/ + @$(MAKE) -s exec-skeleton-dos-clean + + @echo " * Generating zip archive..." + @cd release/temp/sdk/dos; $(CMD_REMOVE) qooxdoo-$(FRAMEWORK_VERSION)-sdk.zip; $(CMD_ZIP_CREATE) ../../../qooxdoo-$(FRAMEWORK_VERSION)-sdk.zip qooxdoo-$(FRAMEWORK_VERSION)-sdk diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/application/Makefile new file mode 100644 index 0000000000..ab6eeacb6c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/Makefile @@ -0,0 +1,53 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +APPLICATIONS = apiviewer feedreader sample showcase webmail + +source: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION source || exit 1; done + +build: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION build || exit 1; done + +api: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION api || exit 1; done + +all: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION all || exit 1; done + +publish: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION publish || exit 1; done + +fix: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION fix || exit 1; done + +pretty: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION pretty || exit 1; done + +clean: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION clean || exit 1; done + +distclean: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION distclean || exit 1; done + +locales: + @for APPLICATION in $(APPLICATIONS); do $(MAKE) -s -C $$APPLICATION locales || exit 1; done +
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/Makefile new file mode 100755 index 0000000000..65aa2373b7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/Makefile @@ -0,0 +1,120 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################ +# BASIC SETTINGS +################################################################################ + +# +# Location of your qooxdoo distribution +# Could be relative from this location or absolute +# +QOOXDOO_PATH = ../../.. + +# +# The same as above, but from the webserver point of view +# Starting point is the application HTML file of the source folder. +# In most cases just add a "/.." compared to above +# +QOOXDOO_URI = ../../../.. + +# +# Namespace of your application e.g. custom +# +APPLICATION_NAMESPACE = apiviewer + +# +# Titles used in your API viewer and during the build process +# +APPLICATION_MAKE_TITLE = APIVIEWER +APPLICATION_API_TITLE = ApiViewer + +# +# Additional files (space separated list) +# +APPLICATION_FILES = index.html + + + + + +################################################################################ +# ADVANCED SETTINGS +################################################################################ + +# +# Enable resource filtering in API viewer +# +APPLICATION_RESOURCE_FILTER = true + +# +# We don't need the full source code +# +APPLICATION_COMPLETE_SOURCE = false + +# +# Disable line breaks +# +APPLICATION_LINEBREAKS_BUILD = false +APPLICATION_LINEBREAKS_SOURCE = false + +# +# qooxdoo.org sync +# +APPLICATION_PUBLISH_PATH = root@qooxdoo.org:/var/www/qooxdoo/api/$(FRAMEWORK_VERSION) + + + + + + +################################################################################ +# INCLUDE CORE +################################################################################ + +ifneq ($(QOOXDOO_PATH),PLEASE_DEFINE_QOOXDOO_PATH) + include $(QOOXDOO_PATH)/frontend/framework/tool/make/targets.mk + include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk +endif + +error: + @echo " * Please configure QOOXDOO_PATH" + + + + + + +################################################################################ +# EXTENSIONS +################################################################################ + +source: + @$(CMD_GENERATOR) \ + --generate-api-documentation \ + --api-documentation-json-file $(APPLICATION_PATH)/source/script/apidata.js \ + --class-path $(FRAMEWORK_SOURCE_PATH)/class + +build: + @$(CMD_GENERATOR) \ + --generate-api-documentation \ + --api-documentation-json-file $(APPLICATION_PATH)/build/script/apidata.js \ + --class-path $(FRAMEWORK_SOURCE_PATH)/class diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/Application.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/Application.js new file mode 100644 index 0000000000..ac44e36e97 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/Application.js @@ -0,0 +1,75 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(apiviewer) +#resource(css:css) +#resource(image:image) +#embed(apiviewer.css/*) + +************************************************************************ */ + +/** + * Your custom application + */ +qx.OO.defineClass("apiviewer.Application", qx.component.AbstractApplication, +function () { + qx.component.AbstractApplication.call(this); +}); + +qx.Settings.setDefault("resourceUri", "./resource"); + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.initialize = function(e) +{ + // Define alias for custom resource path + qx.manager.object.AliasManager.getInstance().add("api", qx.Settings.getValueOfClass("apiviewer.Application", "resourceUri")); + + // Reduce log level + qx.log.Logger.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_WARN); + + // Include CSS file + qx.html.StyleSheet.includeFile(qx.manager.object.AliasManager.getInstance().resolvePath("api/css/apiviewer.css")); +}; + +qx.Proto.main = function(e) +{ + // Initialize the viewer + this.viewer = new apiviewer.Viewer; + this.viewer.addToDocument(); +}; + +qx.Proto.finalize = function(e) +{ + // Finally load the data + this.viewer.load("script/apidata.js"); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/ClassViewer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/ClassViewer.js new file mode 100755 index 0000000000..083b558fa3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/ClassViewer.js @@ -0,0 +1,1684 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(apiviewer) + +************************************************************************ */ + +/** + * Shows the class details. + */ +qx.OO.defineClass("apiviewer.ClassViewer", qx.ui.embed.HtmlEmbed, +function() { + qx.ui.embed.HtmlEmbed.call(this); + + this.setOverflow("auto"); + this.setPadding(20); + this.setEdge(0); + this.setHtmlProperty("id", "ClassViewer"); + this.setVisibility(false); + + apiviewer.ClassViewer.instance = this; +}); + + +qx.Proto._fixLinks = function(el) +{ + var a = el.getElementsByTagName("a"); + for (var i=0; i<a.length; i++) + { + if (typeof a[i].href == "string" && a[i].href.indexOf("http://") == 0) { + a[i].target = "_blank"; + } + } +} + +/** + * Initializes the content of the embedding DIV. Will be called by the + * HtmlEmbed element initialization routine. + */ +qx.Proto._syncHtml = function() +{ + var ClassViewer = apiviewer.ClassViewer; + + document._detailViewer = this; + + this._infoPanelHash = {}; + + var html = ""; + + // Add title + html += '<h1></h1>'; + + // Add description + html += ClassViewer.DIV_START + ClassViewer.DIV_END; + + html += '<div id="ControlFrame">'; + html += '<input type="checkbox" id="showInherited" onclick="document._detailViewer._onInheritedCheckBoxClick()"/><label for="showInherited">Show Inherited</label>'; + html += ' '; + html += '<input type="checkbox" id="showProtected" onclick="document._detailViewer._onProtectedCheckBoxClick()"/><label for="showProtected">Show Protected</label>'; + html += '</div>'; + + + + // BASICS + + // Add constructor info + html += this._createInfoPanel(ClassViewer.NODE_TYPE_CONSTRUCTOR, + "constructor", "constructor", this._createMethodInfo, + this._methodHasDetails, false, true); + + // Add event info + html += this._createInfoPanel(ClassViewer.NODE_TYPE_EVENT, + "events", "events", this._createEventInfo, + this._eventHasDetails, true, true); + + // Add properties info + html += this._createInfoPanel(ClassViewer.NODE_TYPE_PROPERTY, + "properties", "properties", this._createPropertyInfo, + qx.lang.Function.returnTrue, true, true); + + + + // PUBLIC + + // Add methods info + html += this._createInfoPanel(ClassViewer.NODE_TYPE_METHOD, + "methods", "methods", this._createMethodInfo, + this._methodHasDetails, true, true); + + // Add static methods info + html += this._createInfoPanel(ClassViewer.NODE_TYPE_METHOD_STATIC, + "methods-static", "static methods", this._createMethodInfo, + this._methodHasDetails, false, true); + + // Add constants info + html += this._createInfoPanel(ClassViewer.NODE_TYPE_CONSTANT, + "constants", "constants", this._createConstantInfo, + this._constantHasDetails, false, true); + + + + + // Set the html + // doc.body.innerHTML = html; + this.getElement().innerHTML = html; + this._fixLinks(this.getElement()); + + // Extract the main elements + var divArr = this.getElement().childNodes; + this._titleElem = divArr[0]; + this._classDescElem = divArr[1]; + this._controlFrame = divArr[2]; + + this._infoPanelHash[ClassViewer.NODE_TYPE_CONSTRUCTOR].infoElem = divArr[3]; + this._infoPanelHash[ClassViewer.NODE_TYPE_EVENT].infoElem = divArr[4]; + this._infoPanelHash[ClassViewer.NODE_TYPE_PROPERTY].infoElem = divArr[5]; + this._infoPanelHash[ClassViewer.NODE_TYPE_METHOD].infoElem = divArr[6]; + this._infoPanelHash[ClassViewer.NODE_TYPE_METHOD_STATIC].infoElem = divArr[7]; + this._infoPanelHash[ClassViewer.NODE_TYPE_CONSTANT].infoElem = divArr[8]; + + // Get the child elements + for (var nodeType in this._infoPanelHash) + { + var typeInfo = this._infoPanelHash[nodeType]; + typeInfo.infoTitleElem = typeInfo.infoElem.firstChild; + typeInfo.infoBodyElem = typeInfo.infoElem.lastChild; + } + + // Update the view + if (this._currentClassDocNode) + { + // NOTE: We have to set this._currentClassDocNode to null beore, because + // otherwise showClass thinks, there's nothing to do + var classDocNode = this._currentClassDocNode; + this._currentClassDocNode = null; + this.showClass(classDocNode); + } +} + + +/** + * Creates an info panel. An info panel shows the information about one item + * type (e.g. for public methods). + * + * @param nodeType {Integer} the node type to create the info panel for. + * @param listName {String} the name of the node list in the class doc node where + * the items shown by this info panel are stored. + * @param labelText {String} the label text describing the node type. + * @param infoFactory {function} the factory method creating the HTML for one + * item. + * @param hasDetailDecider {function} a function returning <code>true</code> + * when a item has details. + * @param addInheritedCheckBox {Boolean} whether to add a "show inherited ..." + * checkbox. + * @param isOpen {Boolean} whether the info panel is open by default. + * @return {String} the HTML for the info panel. + */ +qx.Proto._createInfoPanel = function(nodeType, listName, labelText, infoFactory, + hasDetailDecider, addInheritedCheckBox, isOpen) +{ + var uppercaseLabelText = labelText.charAt(0).toUpperCase() + labelText.substring(1); + + typeInfo = { listName:listName, labelText:labelText, infoFactory:infoFactory, + hasDetailDecider:hasDetailDecider, isOpen:isOpen, + hasInheritedCheckBox:addInheritedCheckBox }; + this._infoPanelHash[nodeType] = typeInfo; + + var html = '<div class="infoPanel"><h2>'; + + html += '<img class="openclose" src="' + + qx.manager.object.AliasManager.getInstance().resolvePath('api/image/' + (isOpen ? 'close.gif' : 'open.gif')) + '"' + + " onclick=\"document._detailViewer._onShowInfoPanelBodyClicked(" + nodeType + ")\"/> " + + '<span ' + + " onclick=\"document._detailViewer._onShowInfoPanelBodyClicked(" + nodeType + ")\">" + + uppercaseLabelText + + '</span>'; + + html += '</h2><div></div></div>'; + + return html; +} + + +/** + * Shows the information about a class. + * + * @param classNode {Map} the doc node of the class to show. + */ +qx.Proto.showClass = function(classNode) { + if (this._currentClassDocNode == classNode) { + // Nothing to do + return; + } + + this._currentClassDocNode = classNode; + + if (!this._titleElem) { + // _initContentDocument was not called yet + // -> Do nothing, the class will be shown in _initContentDocument. + return; + } + + var ClassViewer = apiviewer.ClassViewer; + + var titleHtml = ""; + + titleHtml += '<div class="packageName">' + classNode.attributes.packageName + '</div>'; + + titleHtml += '<span class="typeInfo">'; + + if (classNode.attributes.isAbstract) { + titleHtml += "Abstract "; + } else if (classNode.attributes.isStatic) { + titleHtml += "Static "; + } + + titleHtml += "Class "; + titleHtml += '</span>'; + titleHtml += classNode.attributes.name; + + this._titleElem.innerHTML = titleHtml; + + var classHtml = ""; + + // Add the class description + var descNode = apiviewer.TreeUtil.getChild(classNode, "desc"); + if (descNode) { + var desc = descNode.attributes.text; + + if (desc != "") + { + classHtml += '<div class="classDescription">' + this._createDescriptionHtml(desc, classNode) + '</div>'; + classHtml += "<br/>"; + } + } + + + // Create the class hierarchy + classHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Inheritance hierarchy:" + ClassViewer.DIV_END; + + var classHierarchy = []; + var currClass = classNode; + while (currClass != null) { + classHierarchy.push(currClass); + currClass = this._getClassDocNode(currClass.attributes.superClass); + } + this._currentClassHierarchy = classHierarchy; + + // Add the class hierarchy + classHtml += ClassViewer.createImageHtml("api/image/class18.gif") + "Object<br/>"; + var indent = 0; + for (var i = classHierarchy.length - 1; i >= 0; i--) { + classHtml += ClassViewer.createImageHtml("api/image/nextlevel.gif", null, "margin-left:" + indent + "px") + + ClassViewer.createImageHtml(apiviewer.TreeUtil.getIconUrl(classHierarchy[i])); + if (i != 0) { + classHtml += this._createItemLinkHtml(classHierarchy[i].attributes.fullName, null, false); + } else { + classHtml += classHierarchy[i].attributes.fullName; + } + classHtml += "<br/>"; + indent += 18; + } + + classHtml += '<br/>'; + + // Add child classes + if (classNode.attributes.childClasses) { + classHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Direct subclasses:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT; + + var classNameArr = classNode.attributes.childClasses.split(","); + for (var i = 0; i < classNameArr.length; i++) { + if (i != 0) { + classHtml += ", "; + } + classHtml += this._createItemLinkHtml(classNameArr[i], null, true, false); + } + + classHtml += ClassViewer.DIV_END; + classHtml += '<br/>'; + } + + // Add @see attributes + var ctorList = apiviewer.TreeUtil.getChild(classNode, "constructor"); + if (ctorList) { + classHtml += this._createSeeAlsoHtml(ctorList.children[0], classNode); + classHtml += '<br/>'; + } + + this._classDescElem.innerHTML = classHtml; + this._fixLinks(this._classDescElem); + + // Refresh the info viewers + this._updateInfoViewers(); + + // Scroll to top + this.getElement().scrollTop = 0; +} + +qx.Proto._updateInfoViewers = function() +{ + for (var nodeType in this._infoPanelHash) { + this._updateInfoPanel(parseInt(nodeType)); + } +} + +qx.Proto.showInfo = function(classNode) { + if (this._currentClassDocNode == classNode) { + // Nothing to do + return; + } + + this._currentClassDocNode = classNode; + + if (!this._titleElem) { + // _initContentDocument was not called yet + // -> Do nothing, the class will be shown in _initContentDocument. + return; + } + + var ClassViewer = apiviewer.ClassViewer; + + this._titleElem.innerHTML = "Info View"; + this._classDescElem.innerHTML = ""; + + // Scroll to top + this.getElement().scrollTop = 0; +} + +/** + * Highlights an item (property, method or constant) and scrolls it visible. + * + * @param itemName {String} the name of the item to highlight. + */ +qx.Proto.showItem = function(itemName) { + var itemNode = apiviewer.TreeUtil.getItemDocNode(this._currentClassDocNode, itemName); + if (! itemNode) { + alert("Item '" + itemName + "' not found"); + } + + var nodeType = this._getTypeForItemNode(itemNode); + var elem = this._getItemElement(nodeType, itemNode.attributes.name).parentNode.parentNode; + + // Handle mark + if (this._markedElement) { + this._markedElement.className = ""; + } + + elem.className = "marked"; + this._markedElement = elem; + + // Scroll the element visible + var top = qx.html.Location.getPageBoxTop(elem); + var height = elem.offsetHeight; + + var doc = this.getElement(); + var scrollTop = doc.scrollTop; + var clientHeight = doc.offsetHeight; + + if (scrollTop > top) { + doc.scrollTop = top; + } else if (scrollTop < top + height - clientHeight) { + doc.scrollTop = top + height - clientHeight; + } +} + +qx.Proto._showProtected = false; +qx.Proto._showInherited = false; + +/** + * Updates an info panel. + * + * @param nodeType {Integer} the node type of which to update the info panel. + */ +qx.Proto._updateInfoPanel = function(nodeType) +{ + var ClassViewer = apiviewer.ClassViewer; + + var typeInfo = this._infoPanelHash[nodeType]; + + // Get the nodes to show + var nodeArr = []; + var fromClassHash = null; + + if (this._currentClassDocNode) + { + if (this._showInherited && (nodeType == apiviewer.ClassViewer.NODE_TYPE_EVENT || nodeType == apiviewer.ClassViewer.NODE_TYPE_PROPERTY || nodeType == apiviewer.ClassViewer.NODE_TYPE_METHOD)) + { + fromClassArr = []; + fromClassHash = {}; + + var currClassNode = this._currentClassDocNode; + + while (currClassNode != null) + { + var currParentNode = apiviewer.TreeUtil.getChild(currClassNode, typeInfo.listName); + var currNodeArr = currParentNode ? currParentNode.children : null; + if (currNodeArr) + { + // Add the nodes from this class + for (var i = 0; i < currNodeArr.length; i++) + { + var name = currNodeArr[i].attributes.name; + + if (fromClassHash[name] == null) + { + fromClassHash[name] = currClassNode; + nodeArr.push(currNodeArr[i]); + } + } + } + + var superClassName = currClassNode.attributes.superClass; + currClassNode = superClassName ? this._getClassDocNode(superClassName) : null; + } + } + else + { + var parentNode = apiviewer.TreeUtil.getChild(this._currentClassDocNode, typeInfo.listName); + nodeArr = parentNode ? parentNode.children : null; + } + } + + if (nodeArr) + { + // Filter protected + if (nodeType == apiviewer.ClassViewer.NODE_TYPE_METHOD || nodeType == apiviewer.ClassViewer.NODE_TYPE_METHOD_STATIC) + { + if (nodeArr.length != 0 && !this._showProtected) + { + copyArr = nodeArr.concat(); + + for (var i=nodeArr.length-1; i>=0; i--) + { + var node = nodeArr[i]; + + if (nodeArr[i].attributes.name.charAt(0) == "_") { + qx.lang.Array.removeAt(copyArr, i); + } + } + + nodeArr = copyArr; + } + } + + // Sort the nodeArr by name + // Move protected methods to the end + nodeArr.sort(function(obj1, obj2) + { + var n1 = obj1.attributes.name; + var n2 = obj2.attributes.name; + var p1 = n1.charAt(0) == "_"; + var p2 = n2.charAt(0) == "_"; + var h1 = n1.charAt(0) == "__"; + var h2 = n2.charAt(0) == "__"; + + if (p1 == p2 && h1 == h2) + { + return n1.toLowerCase() < n2.toLowerCase() ? -1 : 1; + } + else + { + return h1 ? 1 : p1 ? 1 : -1; + } + }); + } + + // Show the nodes + if (nodeArr && nodeArr.length > 0) + { + var html = '<table cellspacing="0" cellpadding="0" class="info" width="100%">'; + + for (var i = 0; i < nodeArr.length; i++) + { + var node = nodeArr[i]; + + var fromClassNode = fromClassHash ? fromClassHash[node.attributes.name] : null; + if (fromClassNode == null) { + fromClassNode = this._currentClassDocNode; + } + + var info = typeInfo.infoFactory.call(this, node, nodeType, fromClassNode, false); + var inherited = fromClassNode && (fromClassNode != this._currentClassDocNode); + var iconUrl = apiviewer.TreeUtil.getIconUrl(node, inherited, "_updateInfoPanel"); + + // Create the title row + html += '<tr>'; + + html += '<td class="icon">' + ClassViewer.createImageHtml(iconUrl) + '</td>'; + html += '<td class="type">' + ((info.typeHtml.length != 0) ? (info.typeHtml + " ") : "") + '</td>'; + + html += '<td class="toggle">'; + if (typeInfo.hasDetailDecider.call(this, node, nodeType, fromClassNode)) + { + // This node has details -> Show the detail button + html += '<img src="' + qx.manager.object.AliasManager.getInstance().resolvePath("api/image/open.gif") + '"' + + " onclick=\"document._detailViewer._onShowItemDetailClicked(" + nodeType + ",'" + + node.attributes.name + "'" + + ((fromClassNode != this._currentClassDocNode) ? ",'" + fromClassNode.attributes.fullName + "'" : "") + + ")\"/>"; + } + else + { + html += " "; + } + html += '</td>'; + + html += '<td class="text">'; + + // Create headline + html += '<h3'; + + if (typeInfo.hasDetailDecider.call(this, node, nodeType, fromClassNode)) + { + html += " onclick=\"document._detailViewer._onShowItemDetailClicked(" + nodeType + ",'" + + node.attributes.name + "'" + + ((fromClassNode != this._currentClassDocNode) ? ",'" + fromClassNode.attributes.fullName + "'" : "") + + ")\">"; + } + else + { + html += '>'; + } + + html += info.titleHtml; + html += '</h3>'; + + // Create content area + html += '<div _itemName="' + nodeArr[i].attributes.name + '">'; + html += info.textHtml; + html += '</div>'; + + html += '</td>'; + html += '</tr>'; + } + + html += '</table>'; + + typeInfo.infoBodyElem.innerHTML = html; + this._fixLinks(typeInfo.infoBodyElem); + typeInfo.infoBodyElem.style.display = !typeInfo.isOpen ? "none" : ""; + typeInfo.infoElem.style.display = ""; + } + else + { + typeInfo.infoElem.style.display = "none"; + } +} + + +/** + * Event handler. Called when the user clicked a button for showing/hiding the + * details of an item. + * + * @param nodeType {Integer} the node type of the item to show/hide the details. + * @param name {String} the name of the item. + * @param fromClassName {String} the name of the class the item the item was + * defined in. + */ +qx.Proto._onShowItemDetailClicked = function(nodeType, name, fromClassName) { + try { + var typeInfo = this._infoPanelHash[nodeType]; + var textDiv = this._getItemElement(nodeType, name); + + if (!textDiv) { + throw Error("Element for name '" + name + "' not found!"); + } + + var showDetails = textDiv._showDetails ? !textDiv._showDetails : true; + textDiv._showDetails = showDetails; + + var fromClassNode = this._currentClassDocNode; + if (fromClassName) { + fromClassNode = this._getClassDocNode(fromClassName); + } + + var listNode = apiviewer.TreeUtil.getChild(fromClassNode, typeInfo.listName); + var node; + if (nodeType == apiviewer.ClassViewer.NODE_TYPE_CONSTRUCTOR) { + node = listNode.children[0]; + } else { + node = apiviewer.TreeUtil.getChildByAttribute(listNode, "name", name); + } + + // Update the close/open image + var opencloseImgElem = textDiv.parentNode.previousSibling.firstChild; + opencloseImgElem.src = qx.manager.object.AliasManager.getInstance().resolvePath(showDetails ? 'api/image/close.gif' : 'api/image/open.gif'); + + // Update content + var info = typeInfo.infoFactory.call(this, node, nodeType, fromClassNode, showDetails); + textDiv.innerHTML = info.textHtml; + this._fixLinks(textDiv); + } catch (exc) { + this.error("Toggling item details failed", exc); + } +} + + +/** + * Event handler. Called when the user clicked on the "show inherited ..." checkbox. + */ +qx.Proto._onInheritedCheckBoxClick = function() +{ + this._showInherited = document.getElementById("showInherited").checked; + this._updateInfoViewers(); +} + +/** + * Event handler. Called when the user clicked on the "show protected ..." checkbox. + */ +qx.Proto._onProtectedCheckBoxClick = function() +{ + this._showProtected = document.getElementById("showProtected").checked; + this._updateInfoViewers(); +} + + +/** + * Event handler. Called when the user clicked a button for showing/hiding the + * body of an info panel. + * + * @param nodeType {Integer} the node type of which the show/hide-body-button was + * clicked. + */ +qx.Proto._onShowInfoPanelBodyClicked = function(nodeType) { + try { + var typeInfo = this._infoPanelHash[nodeType]; + typeInfo.isOpen = !typeInfo.isOpen; + + var imgElem = typeInfo.infoTitleElem.getElementsByTagName("img")[0]; + imgElem.src = qx.manager.object.AliasManager.getInstance().resolvePath(typeInfo.isOpen ? 'api/image/close.gif' : 'api/image/open.gif'); + + this._updateInfoPanel(nodeType); + } catch (exc) { + this.error("Toggling info body failed", exc); + } +} + + +/** + * Gets the HTML element showing the details of an item. + * + * @param nodeType {Integer} the node type of the item. + * @param name {String} the item's name. + * @return {Element} the HTML element showing the details of the item. + */ +qx.Proto._getItemElement = function(nodeType, name) { + var typeInfo = this._infoPanelHash[nodeType]; + var elemArr = typeInfo.infoBodyElem.getElementsByTagName("TBODY")[0].childNodes; + + for (var i = 0; i < elemArr.length; i++) { + // ARRG, should be implemented in a more fault-tolerant way + // iterate over tr's, look inside the third "td" and there the second element + if (elemArr[i].childNodes[3].childNodes[1].getAttribute("_itemName") == name) { + return elemArr[i].childNodes[3].childNodes[1]; + } + } +} + + +/** + * Selects an item. + * + * @param itemName {String} the name of the item. + * @see ApiViewer#selectItem + */ +qx.Proto._selectItem = function(itemName) { + try { + apiviewer.Viewer.instance.selectItem(itemName); + qx.ui.core.Widget.flushGlobalQueues(); + } catch (exc) { + this.error("Selecting item '" + itemName + "' failed", exc); + } +} + + +/** + * Gets the doc node of a class. + * + * @param className {String} the name of the class. + * @return {Map} the doc node of the class. + */ +qx.Proto._getClassDocNode = function(className) { + if (className) { + return apiviewer.TreeUtil.getClassDocNode(apiviewer.Viewer.instance.getDocTree(), className); + } else { + return null; + } +} + + +/** + * Creates the HTML showing the information about a property. + * + * @param node {Map} the doc node of the property. + * @param nodeType {Integer} the node type of the property. + * @param fromClassNode {Map} the doc node of the class the property was defined. + * @param showDetails {Boolean} whether to show the details. + * @return {String} the HTML showing the information about the property. + */ +qx.Proto._createPropertyInfo = function(node, nodeType, fromClassNode, showDetails) { + var ClassViewer = apiviewer.ClassViewer; + + var info = {} + + var typeInfo = this._infoPanelHash[nodeType]; + + // Get the property node that holds the documentation + var docClassNode = fromClassNode; + var docNode = node; + if (node.attributes.docFrom) { + docClassNode = this._getClassDocNode(node.attributes.docFrom); + var listNode = apiviewer.TreeUtil.getChild(docClassNode, typeInfo.listName); + docNode = apiviewer.TreeUtil.getChildByAttribute(listNode, "name", node.attributes.name); + } + + // Add the title + info.typeHtml = this._createTypeHtml(node, fromClassNode, "var"); + info.titleHtml = node.attributes.name; + + // Add the description + info.textHtml = this._createDescHtml(docNode, fromClassNode, showDetails); + + if (showDetails) { + // Add allowed values + var allowedValue = null; + if (node.attributes.possibleValues) { + allowedValue = node.attributes.possibleValues; + } else if (node.attributes.classname) { + allowedValue = "instances of " + node.attributes.classname; + } else if (node.attributes.instance) { + allowedValue = "instances of " + node.attributes.instance + " or sub classes"; + } else if (node.attributes.unitDetection) { + allowedValue = "units: " + node.attributes.unitDetection; + } else if (node.attributes.type) { + allowedValue = "any " + node.attributes.type; + } + + if (allowedValue) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Allowed values:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT; + + if (node.attributes.allowNull != "false") { + info.textHtml += "null, "; + } + info.textHtml += allowedValue + ClassViewer.DIV_END; + } + + // Add default value + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Default value:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + (node.attributes.defaultValue ? node.attributes.defaultValue : "null") + + ClassViewer.DIV_END; + + // Add get alias + if (node.attributes.getAlias) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Get alias:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + node.attributes.getAlias + ClassViewer.DIV_END; + } + + // Add set alias + if (node.attributes.setAlias) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Set alias:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + node.attributes.setAlias + ClassViewer.DIV_END; + } + + // Add inherited from or overridden from + if (fromClassNode && fromClassNode != this._currentClassDocNode) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Inherited from:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + this._createItemLinkHtml(fromClassNode.attributes.fullName) + + ClassViewer.DIV_END; + } else if (node.attributes.overriddenFrom) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Overridden from:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + this._createItemLinkHtml(node.attributes.overriddenFrom) + + ClassViewer.DIV_END; + } + + // Add @see attributes + info.textHtml += this._createSeeAlsoHtml(docNode, docClassNode); + + // Add documentation errors + info.textHtml += this._createErrorHtml(docNode, docClassNode); + } + + return info; +} + + +/** + * Checks whether an event has details. + * + * @param node {Map} the doc node of the event. + * @param nodeType {Integer} the node type of the event. + * @param fromClassNode {Map} the doc node of the class the event was defined. + * @return {Boolean} whether the event has details. + */ +qx.Proto._eventHasDetails = function(node, nodeType, fromClassNode) { + return (fromClassNode != this._currentClassDocNode) // event is inherited + || this._hasSeeAlsoHtml(node) + || this._hasErrorHtml(node) + || this._descHasDetails(node); +}; + + +/** + * Creates the HTML showing the information about an event. + * + * @param node {Map} the doc node of the event. + * @param nodeType {Integer} the node type of the event. + * @param fromClassNode {Map} the doc node of the class the event was defined. + * @param showDetails {Boolean} whether to show the details. + * @return {String} the HTML showing the information about the event. + */ +qx.Proto._createEventInfo = function(node, nodeType, fromClassNode, showDetails) { + var ClassViewer = apiviewer.ClassViewer; + + var info = {} + + var typeInfo = this._infoPanelHash[nodeType]; + + // Add the title + info.typeHtml = this._createTypeHtml(node, fromClassNode, "var"); + info.titleHtml = node.attributes.name; + + // Add the description + info.textHtml = this._createDescHtml(node, fromClassNode, showDetails); + + if (showDetails) { + // Add inherited from or overridden from + if (fromClassNode && fromClassNode != this._currentClassDocNode) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Inherited from:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + this._createItemLinkHtml(fromClassNode.attributes.fullName) + + ClassViewer.DIV_END; + } + + // Add @see attributes + info.textHtml += this._createSeeAlsoHtml(node, fromClassNode); + + // Add documentation errors + info.textHtml += this._createErrorHtml(node, fromClassNode); + } + + return info; +}; + + +/** + * Checks whether a method has details. + * + * @param node {Map} the doc node of the method. + * @param nodeType {Integer} the node type of the method. + * @param fromClassNode {Map} the doc node of the class the method was defined. + * @return {Boolean} whether the method has details. + */ +qx.Proto._methodHasDetails = function(node, nodeType, fromClassNode) { + var TreeUtil = apiviewer.TreeUtil; + + var typeInfo = this._infoPanelHash[nodeType]; + + // Get the method node that holds the documentation + var docClassNode = fromClassNode; + var docNode = node; + if (node.attributes.docFrom) { + docClassNode = this._getClassDocNode(node.attributes.docFrom); + var listNode = TreeUtil.getChild(docClassNode, typeInfo.listName); + docNode = TreeUtil.getChildByAttribute(listNode, "name", node.attributes.name); + } + + // Check whether there are details + var hasParams = TreeUtil.getChild(docNode, "params") != null; + var hasReturn = TreeUtil.getChild(docNode, "return") != null; + var isOverridden = fromClassNode != this._currentClassDocNode; + + return (fromClassNode != this._currentClassDocNode) // method is inherited + || (node.attributes.overriddenFrom != null) // method is overridden + || (TreeUtil.getChild(docNode, "params") != null) // method has params + || (TreeUtil.getChild(docNode, "return") != null) // method has return value + || this._hasSeeAlsoHtml(docNode) + || this._hasErrorHtml(docNode) + || this._descHasDetails(docNode); +} + + +/** + * Creates the HTML showing the information about a method. + * + * @param node {Map} the doc node of the method. + * @param nodeType {Integer} the node type of the method. + * @param fromClassNode {Map} the doc node of the class the method was defined. + * @param showDetails {Boolean} whether to show the details. + * @return {String} the HTML showing the information about the method. + */ +qx.Proto._createMethodInfo = function(node, nodeType, fromClassNode, showDetails) { + var ClassViewer = apiviewer.ClassViewer; + var TreeUtil = apiviewer.TreeUtil; + + var info = {} + + var typeInfo = this._infoPanelHash[nodeType]; + + // Get the method node that holds the documentation + var docClassNode = fromClassNode; + var docNode = node; + if (node.attributes.docFrom) { + docClassNode = this._getClassDocNode(node.attributes.docFrom); + var listNode = TreeUtil.getChild(docClassNode, typeInfo.listName); + docNode = TreeUtil.getChildByAttribute(listNode, "name", node.attributes.name); + } + + if (node.attributes.isAbstract) { + info.typeHtml = "abstract "; + } else { + info.typeHtml = ""; + } + + // Get name, icon and return type + var returnNode = TreeUtil.getChild(docNode, "return"); + if (node.attributes.isCtor) { + info.titleHtml = fromClassNode.attributes.name; + } else { + info.titleHtml = node.attributes.name; + info.typeHtml += this._createTypeHtml(returnNode, fromClassNode, "void"); + } + + // Add the title (the method signature) + info.titleHtml += '<span class="methodSignature"> <span class="parenthesis">(</span>'; + var paramsNode = TreeUtil.getChild(docNode, "params"); + if (paramsNode) { + for (var i = 0; i < paramsNode.children.length; i++) { + var param = paramsNode.children[i]; + if (i != 0) { + info.titleHtml += '<span class="separator">,</span> '; + } + info.titleHtml += '<span class="parameterType">' + this._createTypeHtml(param, fromClassNode, "var") + "</span> " + + param.attributes.name; + if (param.attributes.defaultValue) { + info.titleHtml += "?"; + } + } + } + info.titleHtml += '<span class="parenthesis">)</span></span>'; + + // Add the description + if (node.attributes.isCtor) { + info.textHtml = "Creates a new instance of " + fromClassNode.attributes.name + "."; + } else { + info.textHtml = this._createDescHtml(docNode, docClassNode, showDetails); + } + + + if (showDetails) { + // Add Parameters + var paramsNode = TreeUtil.getChild(docNode, "params"); + if (paramsNode) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Parameters:" + ClassViewer.DIV_END; + for (var i = 0; i < paramsNode.children.length; i++) { + var param = paramsNode.children[i]; + var paramType = param.attributes.type ? param.attributes.type : "var"; + var dims = param.attributes.arrayDimensions; + if (dims) { + for (var i = 0; i < dims; i++) { + paramType += "[]"; + } + } + var defaultValue = param.attributes.defaultValue; + + info.textHtml += ClassViewer.DIV_START_DETAIL_TEXT; + if (defaultValue) { + info.textHtml += ClassViewer.SPAN_START_OPTIONAL; + } + info.textHtml += ClassViewer.SPAN_START_PARAM_NAME + param.attributes.name + ClassViewer.SPAN_END; + if (defaultValue) { + info.textHtml += " (default: " + defaultValue + ") " + ClassViewer.SPAN_END; + } + + var paramDescNode = TreeUtil.getChild(param, "desc"); + if (paramDescNode) { + info.textHtml += " " + this._createDescriptionHtml(paramDescNode.attributes.text, docClassNode); + } + info.textHtml += ClassViewer.DIV_END; + } + } + + // Add return value + if (returnNode) { + var returnDescNode = TreeUtil.getChild(returnNode, "desc"); + if (returnDescNode) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Returns:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + this._createDescriptionHtml(returnDescNode.attributes.text, docClassNode) + + ClassViewer.DIV_END; + } + } + + // Add inherited from or overridden from + if (fromClassNode && fromClassNode != this._currentClassDocNode) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Inherited from:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + this._createItemLinkHtml(fromClassNode.attributes.fullName) + + ClassViewer.DIV_END; + } else if (node.attributes.overriddenFrom) { + info.textHtml += ClassViewer.DIV_START_DETAIL_HEADLINE + "Overridden from:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + + this._createItemLinkHtml(node.attributes.overriddenFrom) + + ClassViewer.DIV_END; + } + + // Add @see attributes + info.textHtml += this._createSeeAlsoHtml(docNode, docClassNode); + + // Add documentation errors + info.textHtml += this._createErrorHtml(docNode, docClassNode); + } + + return info; +} + + +/** + * Checks whether a constant has details. + * + * @param node {Map} the doc node of the constant. + * @param nodeType {Integer} the node type of the constant. + * @param fromClassNode {Map} the doc node of the class the constant was defined. + * @return {Boolean} whether the constant has details. + */ +qx.Proto._constantHasDetails = function(node, nodeType, fromClassNode) { + return ( + this._hasSeeAlsoHtml(node) || + this._hasErrorHtml(node) || + this._descHasDetails(node) || + this._hasConstantValueHtml(node) + ); +} + + +/** + * Creates the HTML showing the information about a constant. + * + * @param node {Map} the doc node of the constant. + * @param nodeType {Integer} the node type of the constant. + * @param fromClassNode {Map} the doc node of the class the constant was defined. + * @param showDetails {Boolean} whether to show the details. + * @return {String} the HTML showing the information about the constant. + */ +qx.Proto._createConstantInfo = function(node, nodeType, fromClassNode, showDetails) { + var info = {} + + // Add the title + info.typeHtml = this._createTypeHtml(node, fromClassNode, "var"); + info.titleHtml = node.attributes.name; + + // Add the description + info.textHtml = this._createDescHtml(node, fromClassNode, showDetails); + + if (showDetails) { + info.textHtml += this._createConstantValueHtml(node, fromClassNode); + + // Add @see attributes + info.textHtml += this._createSeeAlsoHtml(node, fromClassNode); + + // Add documentation errors + info.textHtml += this._createErrorHtml(node, fromClassNode); + + } + + return info; +} + + +/** + * Returns whether the description of an item has details (has more than one + * sentence). + * + * @param node {Map} the doc node of the item. + * @return {Boolean} whether the description of an item has details. + */ +qx.Proto._descHasDetails = function(node) { + var descNode = apiviewer.TreeUtil.getChild(node, "desc"); + if (descNode) { + var desc = descNode.attributes.text; + return this._extractFirstSentence(desc) != desc; + } else { + return false; + } +} + + +/** + * Creates the HTML showing the description of an item. + * + * @param node {Map} the doc node of the item. + * @param fromClassNode {Map} the doc node of the class the item was defined. + * @param showDetails {Boolean} whether to show details. If <code>false</code> + * only the first sentence of the description will be shown. + * @return {String} the HTML showing the description. + */ +qx.Proto._createDescHtml = function(node, fromClassNode, showDetails) { + var descNode = apiviewer.TreeUtil.getChild(node, "desc"); + if (descNode) { + var desc = descNode.attributes.text; + if (!showDetails) { + desc = this._extractFirstSentence(desc); + } + return apiviewer.ClassViewer.DIV_START_DESC + + this._createDescriptionHtml(desc, fromClassNode) + + apiviewer.ClassViewer.DIV_END; + } else { + return ""; + } +} + + +/** + * Extracts the first sentence from a text. + * + * @param text {String} the text. + * @return {String} the first sentence from the text. + */ +qx.Proto._extractFirstSentence = function(text) +{ + var ret = text; + + // Extract first block + var pos = ret.indexOf("</p>"); + if (pos != -1) + { + ret = ret.substr(0, pos+4); + + var hit = apiviewer.ClassViewer.SENTENCE_END_REGEX.exec(ret); + if (hit != null) { + ret = text.substring(0, hit.index + hit[0].length - 1) + "</p>"; + } + } + + return ret; +} + + +/** + * Checks whether a constant value is provided + * + * @param node {Map} the doc node of the item. + * @return {Boolean} whether the constant provides a value + */ +qx.Proto._hasConstantValueHtml = function(node) { + return node.attributes.value ? true : false; +} + + +/** + * Creates the HTML showing the value of a constant + * + * @param node {Map} the doc node of the item. + * @param fromClassNode {Map} the doc node of the class the item was defined. + * @return {String} the HTML showing the value of the constant + */ +qx.Proto._createConstantValueHtml = function(node, fromClassNode) { + var ClassViewer = apiviewer.ClassViewer; + this.debug (node.attributes.value) + if (this._hasConstantValueHtml(node)) { + return ( + ClassViewer.DIV_START_DETAIL_HEADLINE + "Value: " + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + qx.html.String.escape(qx.io.Json.stringify(node.attributes.value)) + ClassViewer.DIV_END + ); + } else { + return ""; + } +} + + +/** + * Checks whether a item has @see attributes. + * + * @param node {Map} the doc node of the item. + * @return {Boolean} whether the item has @see attributes. + */ +qx.Proto._hasSeeAlsoHtml = function(node) { + return apiviewer.TreeUtil.getChild(node, "see") ? true : false; +} + + +/** + * Creates the HTML showing the @see attributes of an item. + * + * @param node {Map} the doc node of the item. + * @param fromClassNode {Map} the doc node of the class the item was defined. + * @return {String} the HTML showing the @see attributes. + */ +qx.Proto._createSeeAlsoHtml = function(node, fromClassNode) { + var ClassViewer = apiviewer.ClassViewer; + + var descNode = apiviewer.TreeUtil.getChild(node, "see"); + + if (node.children) + { + var seeAlsoHtml = ""; + for (var i = 0; i < node.children.length; i++) { + if (node.children[i].type == "see") { + // This is a @see attribute + if (seeAlsoHtml.length != 0) { + seeAlsoHtml += ", "; + } + seeAlsoHtml += this._createItemLinkHtml(node.children[i].attributes.name, fromClassNode); + } + } + if (seeAlsoHtml.length != 0) { + // We had @see attributes + return ClassViewer.DIV_START_DETAIL_HEADLINE + "See also:" + ClassViewer.DIV_END + + ClassViewer.DIV_START_DETAIL_TEXT + seeAlsoHtml + ClassViewer.DIV_END; + } + } + + // Nothing found + return ""; +} + + +/** + * Checks whether a item has documentation errors. + * + * @param node {Map} the doc node of the item. + * @return {Boolean} whether the item has documentation errors. + */ +qx.Proto._hasErrorHtml = function(node) { + var errorNode = apiviewer.TreeUtil.getChild(node, "errors"); + return (errorNode != null); +} + + +/** + * Creates the HTML showing the documentation errors of an item. + * + * @param node {Map} the doc node of the item. + * @param fromClassNode {Map} the doc node of the class the item was defined. + * @return {String} the HTML showing the documentation errors. + */ +qx.Proto._createErrorHtml = function(node, fromClassNode) { + var ClassViewer = apiviewer.ClassViewer; + + var errorNode = apiviewer.TreeUtil.getChild(node, "errors"); + if (errorNode) { + var html = ClassViewer.DIV_START_ERROR_HEADLINE + "Documentation errors:" + ClassViewer.DIV_END; + var errArr = errorNode.children; + for (var i = 0; i < errArr.length; i++) { + html += ClassViewer.DIV_START_DETAIL_TEXT + errArr[i].attributes.msg + " <br/>"; + html += "(" + if (fromClassNode && fromClassNode != this._currentClassDocNode) { + html += fromClassNode.attributes.fullName + "; "; + } + html += "Line: " + errArr[i].attributes.line + ", Column:" + errArr[i].attributes.column + ")" + ClassViewer.DIV_END; + } + return html; + } else { + return ""; + } +} + + +/** + * Creates the HTML showing the type of a doc node. + * + * @param typeNode {Map} the doc node to show the type for. + * @param packageBaseClass {Map} the doc node of the class <code>typeNode</code> + * belongs to. + * @param defaultType {String} the type name to use if <code>typeNode</code> is + * <code>null</code> or defines no type. + * @param useShortName {Boolean,true} whether to use short class names + * (without package). + * @return {String} the HTML showing the type. + */ +qx.Proto._createTypeHtml = function(typeNode, packageBaseClass, defaultType, useShortName) { + if (useShortName == null) { + useShortName = true; + } + + var types = []; + var typeHtml, typeDimensions, typeName, linkText, dims; + + if (typeNode) + { + // read in children + if (typeNode.children && apiviewer.TreeUtil.getChild(typeNode, "types")) + { + for (var i=0, a=apiviewer.TreeUtil.getChild(typeNode, "types").children, l=a.length; i<l; i++) + { + if (a[i].type == "entry") + { + types.push(a[i].attributes); + } + } + } + + // read from attributes (alternative) + if (types.length == 0 && typeNode.attributes) + { + typeName = typeNode.attributes.instance ? typeNode.attributes.instance : typeNode.attributes.type; + + if (typeName != undefined) + { + dims = typeNode.attributes.dimensions; + + if (typeof dims == "number" && dims > 0) { + types.push({ "type" : typeName, "dimensions" : dims }); + } else { + types.push({ "type" : typeName }); + } + } + } + } + + if (types.length == 0) + { + typeHtml = defaultType; + } + else + { + typeHtml = ""; + + if (types.length > 1) { + typeHtml += "(" + } + + for (var j=0; j<types.length; j++) + { + if (j>0) { + typeHtml += " | "; + } + + typeName = types[j].type; + typeDimensions = types[j].dimensions; + + if (apiviewer.ClassViewer.PRIMITIVES[typeName]) + { + typeHtml += typeName; + } + else + { + linkText = typeName; + if (useShortName) + { + var lastDot = typeName.lastIndexOf("."); + if (lastDot != -1) { + linkText += " " + typeName.substring(lastDot + 1); + } + } + typeHtml += this._createItemLinkHtml(linkText, packageBaseClass, false, true); + } + + if (typeDimensions) + { + for (var i = 0; i < parseInt(typeDimensions); i++) { + typeHtml += "[]"; + } + } + } + + if (types.length > 1) { + typeHtml += ")" + } + } + + return typeHtml; +} + + +/** + * Creates HTML that replaces all @link-attributes with links. + * + * @param description {String} the description. + * @param packageBaseClass {Map,null} the doc node of the class to use for + * auto-adding packages. + */ +qx.Proto._createDescriptionHtml = function(description, packageBaseClass) { + var linkRegex = /\{@link([^\}]*)\}/mg; + + var html = ""; + var hit; + var lastPos = 0; + while ((hit = linkRegex.exec(description)) != null) { + // Add the text before the link + html += description.substring(lastPos, hit.index) + + this._createItemLinkHtml(hit[1], packageBaseClass); + + lastPos = hit.index + hit[0].length; + } + + // Add the text after the last hit + html += description.substring(lastPos, description.length); + + return html; +} + + +/** + * Creates the HTML for a link to an item. + * + * @param linkText {String} the link text + * (e.g. "mypackage.MyClass#myMethod alt text") + * @param packageBaseClass {Map,null} the doc node of the class to use when + * auto-adding the package to a class name having no package specified. + * If null, no automatic package addition is done. + * @param useIcon {Boolean,true} whether to add an icon to the link. + * @param useShortName {Boolean,false} whether to use the short name. + */ +qx.Proto._createItemLinkHtml = function(linkText, packageBaseClass, useIcon, + useShortName) +{ + if (useIcon == null) { + useIcon = true; + } + + linkText = qx.lang.String.trim(linkText); + + if (linkText.charAt(0) == '"' || linkText.charAt(0) == '<') { + // This is a String or a link to a URL -> Just use it as it is + return linkText; + } else { + // This is a link to another class or method -> Create an item link + + // Separate item name from label + var hit = apiviewer.ClassViewer.ITEM_SPEC_REGEX.exec(linkText); + if (hit == null) { + // Malformed item name + return linkText; + } else { + var className = hit[2]; + var itemName = hit[3]; + var label = hit[6]; + + // Make the item name absolute + if (className == null || className.length == 0) { + // This is a relative link to a method -> Add the current class + className = packageBaseClass.attributes.fullName; + } else if (packageBaseClass && className.indexOf(".") == -1) { + // The class name has no package -> Use the same package as the current class + var name = packageBaseClass.attributes.name; + var fullName = packageBaseClass.attributes.fullName; + var packageName = fullName.substring(0, fullName.length - name.length); + className = packageName + className; + } + + // Get the node info + if (label == null || label.length == 0) { + // We have no label -> Use the item name as label + label = hit[1]; + } + + // Add the right icon + if (useIcon) { + var classNode = this._getClassDocNode(className); + if (classNode) { + var itemNode; + if (itemName) { + // The links points to a item of the class + var cleanItemName = itemName.substring(1); + var parenPos = cleanItemName.indexOf("("); + if (parenPos != -1) { + cleanItemName = qx.lang.String.trim(cleanItemName.substring(0, parenPos)); + } + itemNode = apiviewer.TreeUtil.getItemDocNode(classNode, cleanItemName); + } else { + // The links points to the class + itemNode = classNode; + } + if (itemNode) { + var iconUrl = apiviewer.TreeUtil.getIconUrl(itemNode); + var iconCode = apiviewer.ClassViewer.createImageHtml(iconUrl); + } + } + } + + // Create a real bookmarkable link + // NOTE: The onclick-handler must be added by HTML code. If it + // is added using the DOM element then the href is followed. + var fullItemName = className + (itemName ? itemName : ""); + return '<span style="white-space: nowrap;">' + + (typeof iconCode != "undefined" ? iconCode : "") + + '<a href="' + window.location.protocol + '//' + window.location.pathname + + '#' + fullItemName + '" onclick="' + + 'document._detailViewer._selectItem(\'' + fullItemName + '\'); return false;"' + + ' title="' + fullItemName + '">' + label + '</a></span>'; + } + } +} + + +/** + * Gets the node type for a doc node. + * + * @param itemNode {Map} the doc node of the item. + * @return {Integer} the item's node type. + */ +qx.Proto._getTypeForItemNode = function(itemNode) { + var ClassViewer = apiviewer.ClassViewer; + + if (itemNode.type == "constant") { + return ClassViewer.NODE_TYPE_CONSTANT; + } else if (itemNode.type == "property") { + return ClassViewer.NODE_TYPE_PROPERTY; + } else if (itemNode.type == "event") { + return ClassViewer.NODE_TYPE_EVENT; + } else if (itemNode.type == "method") { + var name = itemNode.attributes.name; + if (name == null) { + return ClassViewer.NODE_TYPE_CONSTRUCTOR; + } else { + if (itemNode.attributes.isStatic) { + return ClassViewer.NODE_TYPE_METHOD_STATIC; + } else { + return ClassViewer.NODE_TYPE_METHOD; + } + } + } +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return; + } + + this._titleElem = null; + this._classDescElem = null; + this._markedElement = null; + + for (var nodeType in this._infoPanelHash) { + this._infoPanelHash[nodeType].infoElem = null; + this._infoPanelHash[nodeType].infoTitleElem = null; + this._infoPanelHash[nodeType].infoBodyElem = null; + } + + document._detailViewer = null; + + return qx.ui.embed.HtmlEmbed.prototype.dispose.call(this); +} + + +/** {Map} The primitive types. These types will not be shown with links. */ +qx.Class.PRIMITIVES = { "var":true, "void":true, "undefined":true, "arguments":true, + "Boolean":true, "String":true, "Float":true, "Double":true, + "Number":true, "Integer":true, "Error":true, + "RegExp":true, "Array":true, "Map":true, "Date":true, "Element":true, + "Document":true, "Window":true, "Node":true, "Function":true, "Object":true, + "Event":true }; + +/** + * {regexp} The regexp for parsing a item name + * (e.g. "mypackage.MyClass#MY_CONSTANT alternative text"). + */ +qx.Class.ITEM_SPEC_REGEX = /^(([\w\.]+)?(#\w+(\([^\)]*\))?)?)(\s+(.*))?$/; + +/** {regexp} The regexp that finds the end of a sentence. */ +qx.Class.SENTENCE_END_REGEX = /[^\.].\.(\s|<)/; + +/** {int} The node type of a constructor. */ +qx.Class.NODE_TYPE_CONSTRUCTOR = 1; +/** {int} The node type of an event. */ +qx.Class.NODE_TYPE_EVENT = 2; +/** {int} The node type of a property. */ +qx.Class.NODE_TYPE_PROPERTY = 3; + +/** {int} The node type of a public method. */ +qx.Class.NODE_TYPE_METHOD = 4; +/** {int} The node type of a static public method. */ +qx.Class.NODE_TYPE_METHOD_STATIC = 5; +/** {int} The node type of a constant. */ +qx.Class.NODE_TYPE_CONSTANT = 6; + +/** {string} The start tag of a div. */ +qx.Class.DIV_START = '<div>'; +/** {string} The start tag of a div containing an item description. */ +qx.Class.DIV_START_DESC = '<div class="item-desc">'; +/** {string} The start tag of a div containing the headline of an item detail. */ +qx.Class.DIV_START_DETAIL_HEADLINE = '<div class="item-detail-headline">'; +/** {string} The start tag of a div containing the text of an item detail. */ +qx.Class.DIV_START_DETAIL_TEXT = '<div class="item-detail-text">'; +/** {string} The start tag of a div containing the headline of an item error. */ +qx.Class.DIV_START_ERROR_HEADLINE = '<div class="item-detail-error">'; +/** {string} The end tag of a div. */ +qx.Class.DIV_END = '</div>'; + +/** {string} The start tag of a span containing an optional detail. */ +qx.Class.SPAN_START_OPTIONAL = '<span class="item-detail-optional">'; +/** {string} The start tag of a span containing a parameter name. */ +qx.Class.SPAN_START_PARAM_NAME = '<span class="item-detail-param-name">'; +/** {string} The end tag of a span. */ +qx.Class.SPAN_END = '</span>'; + + +/** + * Creates the HTML showing an image. + * + * @param imgUrl {var} the URL of the image. May be a string or an array of + * strings (for overlay images). + * @param tooltip {String} the tooltip to show. + * @param styleAttributes {String} the style attributes to add to the image. + */ +qx.Class.createImageHtml = function(imgUrl, tooltip, styleAttributes) { + if (typeof imgUrl == "string") { + return '<img src="' + qx.manager.object.AliasManager.getInstance().resolvePath(imgUrl) + '" class="img"' + + (styleAttributes ? ' style="' + styleAttributes + '"' : "") + '/>'; + } else { + if (styleAttributes) { + styleAttributes += ";vertical-align:top"; + } else { + styleAttributes = "vertical-align:top"; + } + return apiviewer.ClassViewer.createOverlayImageHtml(18, 18, imgUrl, tooltip, styleAttributes); + } +} + + +/** + * Creates HTML that shows an overlay image (several images on top of each other). + * The resulting HTML will behave inline. + * + * @param width {Integer} the width of the images. + * @param height {Integer} the height of the images. + * @param imgUrlArr {String[]} the URLs of the images. The last image will be + * painted on top. + * @param toolTip {String,null} the tooltip of the icon. + * @param styleAttributes {String,null} custom CSS style attributes. + * @return {String} the HTML with the overlay image. + */ +qx.Class.createOverlayImageHtml + = function(width, height, imgUrlArr, toolTip, styleAttributes) +{ + var html = '<div style="position:relative;top:0;left:0;width:' + width + 'px;height:' + height + 'px' + + ((styleAttributes == null) ? '' : (';' + styleAttributes)) + '">'; + + for (var i = 0; i < imgUrlArr.length; i++) { + html += '<img'; + if (toolTip != null) { + html += ' title="' + toolTip + '"'; + } + html += ' style="position:absolute;top:0px;left:0px" src="' + qx.manager.object.AliasManager.getInstance().resolvePath(imgUrlArr[i]) + '"/>'; + } + + html += '</div>'; + + /* + // NOTE: See testOverlay.html + var html = '<table cellpadding="0" cellspacing="0" ' + + 'style="display:inline;position:relative;border:1px solid blue' + + ((styleAttributes == null) ? '' : (';' + styleAttributes)) + '"><tr>' + + '<td style="width:' + width + 'px;height:' + height + 'px">'; + for (var i = 0; i < imgUrlArr.length; i++) { + html += '<img'; + if (toolTip != null) { + html += ' title="' + toolTip + '"'; + } + html += ' style="position:absolute;top:0px;left:0px" src="' + imgUrlArr[i] + '"></img>'; + } + html += '</td></tr></table>'; + */ + + return html; +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/InfoViewer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/InfoViewer.js new file mode 100644 index 0000000000..01c13e43d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/InfoViewer.js @@ -0,0 +1,59 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(apiviewer) + +************************************************************************ */ + +/** + * Shows the class details. + */ +qx.OO.defineClass("apiviewer.InfoViewer", qx.ui.embed.HtmlEmbed, +function() { + qx.ui.embed.HtmlEmbed.call(this); + + this.setOverflow("auto"); + this.setPadding(20); + this.setEdge(0); + this.setHtmlProperty("id", "InfoViewer"); + this.setVisibility(false); + + apiviewer.InfoViewer.instance = this; +}); + +qx.Proto.showInfo = function(classNode) +{ + var vHtml = ""; + + // Title + vHtml += '<h1>'; + vHtml += '<div class="pkgtitle">package</div>'; + vHtml += classNode.attributes.fullName; + vHtml += '</h1>'; + + // TODO: Overview of classes in this package + + // Apply HTML + this.setHtml(vHtml); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/TreeUtil.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/TreeUtil.js new file mode 100755 index 0000000000..05f26a5597 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/TreeUtil.js @@ -0,0 +1,382 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(apiviewer) +#embed(apiviewer.image/*) + +************************************************************************ */ + +/** + * A util class for handling the documentation tree. + */ +qx.OO.defineClass("apiviewer.TreeUtil", qx.core.Object, +function () { + qx.core.Object.call(this); +}); + + +/** + * Gets the child of a doc node having a certain type. + * + * @param docNode {Map} the doc node to get the child of. + * @param childType {String} the type of the child to get. + * @return {Map} the wanted child or <code>null</code> if <code>docNode</code> + * is <code>null</code> or has no such child. + */ +qx.Class.getChild = function(docNode, childType) { + if (docNode != null && docNode.children != null) { + for (var i = 0; i < docNode.children.length; i++) { + if (docNode.children[i].type == childType) { + return docNode.children[i]; + } + } + } + + return null; +} + + +/** + * Gets the child of a doc node having a certain attribute value. + * + * @param docNode {Map} the doc node to get the child of. + * @param attributeName {String} the name of the attribute the wanted child must have. + * @param attributeValue {String} the value of the attribute the wanted child must have. + * @return {Map} the wanted child or <code>code</code> if there is no such child. + */ +qx.Class.getChildByAttribute = function(docNode, attributeName, attributeValue) { + if (docNode.children != null) { + for (var i = 0; i < docNode.children.length; i++) { + var node = docNode.children[i]; + if (node.attributes && node.attributes[attributeName] == attributeValue) { + return node; + } + } + } + + return null; +} + + +/** + * Searches the doc node of a item. Only use this method if you don't know the + * type of the item. + * + * @param classNode {Map} the class node the item belongs to. + * @param itemName {String} the name of the item to search. + * @return {Map} the doc node of the item or <code>null</code> if the class has + * no such item. + */ +qx.Class.getItemDocNode = function(classNode, itemName) { + var TreeUtil = apiviewer.TreeUtil; + + // Go through the item lists and check whether one contains the wanted item + for (var i = 0; i < TreeUtil.ITEM_LIST_ARR.length; i++) { + var listNode = TreeUtil.getChild(classNode, TreeUtil.ITEM_LIST_ARR[i]); + if (listNode) { + var itemNode = TreeUtil.getChildByAttribute(listNode, "name", itemName); + if (itemNode) { + return itemNode; + } + } + } + + // Nothing found + return null; +} + + +/** + * Gets the doc node of a class. + * + * @param docTree {Map} the documentation tree. + * @param className {String} the name of the class. + * @return {Map} the doc node of the class. + */ +qx.Class.getClassDocNode = function(docTree, className) { + var splits = className.split("."); + var currNode = docTree; + for (var i = 0; i < splits.length && currNode != null; i++) { + if (i < splits.length - 1) { + // The current name is a package name + var packages = this.getChild(currNode, "packages"); + currNode = packages ? this.getChildByAttribute(packages, "name", splits[i]) : null; + } else { + // The current name is a class name + var classes = this.getChild(currNode, "classes"); + currNode = classes ? this.getChildByAttribute(classes, "name", splits[i]) : null; + } + } + + return currNode; +} + + +/** + * Gets the icon URL of a doc node. + * + * @param node {Map} the node to get the icon for. + * @param inherited {Boolean,false} whether the node was inherited. + * @return {var} the URL of the icon. May be a string or an array of string + * (in case of an overlay icon). + */ +qx.Class.getIconUrl = function(node, inherited, context) { + var constName; + switch (node.type) { + case "package": + constName = "ICON_PACKAGE"; + break; + case "class": + constName = "ICON_CLASS"; + + if (node.attributes.isStatic) { + constName += "_STATIC"; + } else if (node.attributes.isAbstract) { + constName += "_ABSTRACT"; + } + + break; + case "property": + constName = "ICON_PROPERTY"; + break; + case "event": + constName = "ICON_EVENT"; + break; + case "method": + var isCtor = node.attributes.name == null; + var isPublic = isCtor || (node.attributes.name.charAt(0) != "_"); + + constName = "ICON_METHOD" + (isPublic ? "_PUB" : "_PROT"); + + if (isCtor) { + constName += "_CTOR"; + } else if (node.attributes.isStatic) { + constName += "_STATIC"; + } else if (node.attributes.isAbstract) { + constName += "_ABSTRACT"; + } + + break; + case "constant": + constName = "ICON_CONSTANT"; + break; + default: throw new Error("Unknown node type: " + node.type); + } + + if (inherited) { + constName += "_INHERITED"; + } else if (node.attributes.overriddenFrom) { + constName += "_OVERRIDDEN"; + } + + if (node.attributes.hasError) { + constName += "_ERROR"; + } else if (node.attributes.hasWarning) { + constName += "_WARN"; + } + + var iconUrl = apiviewer.TreeUtil[constName]; + if (iconUrl == null) { + throw new Error("Unknown img constant: " + constName); + } + + return iconUrl; +} + + +/** {string[]} The names of lists containing items. */ +qx.Class.ITEM_LIST_ARR = [ "constants", "properties", "methods-pub", "methods-pub", + "methods-static-prot", "methods-static-prot" ]; + + +/** {string} The URL of the overlay "abstract". */ +qx.Class.OVERLAY_ABSTRACT = "api/image/overlay_abstract18.gif"; +/** {string} The URL of the overlay "error". */ +qx.Class.OVERLAY_ERROR = "api/image/overlay_error18.gif"; +/** {string} The URL of the overlay "inherited". */ +qx.Class.OVERLAY_INHERITED = "api/image/overlay_inherited18.gif"; +/** {string} The URL of the overlay "overridden". */ +qx.Class.OVERLAY_OVERRIDDEN = "api/image/overlay_overridden18.gif"; +/** {string} The URL of the overlay "static". */ +qx.Class.OVERLAY_STATIC = "api/image/overlay_static18.gif"; +/** {string} The URL of the overlay "warning". */ +qx.Class.OVERLAY_WARN = "api/image/overlay_warning18.gif"; + + +/** {string} The icon URL of a package. */ +qx.Class.ICON_PACKAGE = "api/image/package18.gif"; +/** {string} The icon URL of a package with warning. */ +qx.Class.ICON_PACKAGE_WARN = "api/image/package_warning18.gif"; + + +/** {string} The icon URL of a class. */ +qx.Class.ICON_CLASS = "api/image/class18.gif"; +/** {string} The icon URL of a class with warning. */ +qx.Class.ICON_CLASS_WARN = "api/image/class_warning18.gif"; +/** {string} The icon URL of a class with error. */ +qx.Class.ICON_CLASS_ERROR = "api/image/class_warning18.gif"; + +/** {string} The icon URL of a static class. */ +qx.Class.ICON_CLASS_STATIC = "api/image/class_static18.gif"; +/** {string} The icon URL of a static class with warning. */ +qx.Class.ICON_CLASS_STATIC_WARN = "api/image/class_static_warning18.gif"; +/** {string} The icon URL of a static class with error. */ +qx.Class.ICON_CLASS_STATIC_ERROR = "api/image/class_static_warning18.gif"; + +/** {string} The icon URL of an abstract class. */ +qx.Class.ICON_CLASS_ABSTRACT = "api/image/class_abstract18.gif"; +/** {string} The icon URL of an abstract class with warning. */ +qx.Class.ICON_CLASS_ABSTRACT_WARN = "api/image/class_abstract_warning18.gif"; +/** {string} The icon URL of an abstract class with error. */ +qx.Class.ICON_CLASS_ABSTRACT_ERROR = "api/image/class_abstract_warning18.gif"; + + +/** {string} The icon URL of a property. */ +qx.Class.ICON_PROPERTY = "api/image/property18.gif"; +/** {string[]} The icon URL of a property with warning. */ +qx.Class.ICON_PROPERTY_WARN = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of a property with error. */ +qx.Class.ICON_PROPERTY_ERROR = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an inherited property. */ +qx.Class.ICON_PROPERTY_INHERITED = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_INHERITED ]; +/** {string[]} The icon URL of an inherited property with warning. */ +qx.Class.ICON_PROPERTY_INHERITED_WARN = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an inherited property with error. */ +qx.Class.ICON_PROPERTY_INHERITED_ERROR = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an overridden property. */ +qx.Class.ICON_PROPERTY_OVERRIDDEN = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_OVERRIDDEN ]; +/** {string[]} The icon URL of an overridden property with warning. */ +qx.Class.ICON_PROPERTY_OVERRIDDEN_WARN = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an overridden property with error. */ +qx.Class.ICON_PROPERTY_OVERRIDDEN_ERROR = [ qx.Class.ICON_PROPERTY, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_ERROR ]; + + +/** {string} The icon URL of an event. */ +qx.Class.ICON_EVENT = "api/image/event18.gif"; + +/** {string[]} The icon URL of an inherited event. */ +qx.Class.ICON_EVENT_INHERITED = [ qx.Class.ICON_EVENT, qx.Class.OVERLAY_INHERITED ]; + + +/** {string} The icon URL of a public method. */ +qx.Class.ICON_METHOD_PUB = "api/image/method_public18.gif"; +/** {string[]} The icon URL of a public method with warning. */ +qx.Class.ICON_METHOD_PUB_WARN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ERROR ]; +/** {string[]} The icon URL of a public method with error. */ +qx.Class.ICON_METHOD_PUB_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an inherited public method. */ +qx.Class.ICON_METHOD_PUB_INHERITED = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_INHERITED ]; +/** {string[]} The icon URL of an inherited public method with warning. */ +qx.Class.ICON_METHOD_PUB_INHERITED_WARN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an inherited public method with error. */ +qx.Class.ICON_METHOD_PUB_INHERITED_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an overridden public method. */ +qx.Class.ICON_METHOD_PUB_OVERRIDDEN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_OVERRIDDEN ]; +/** {string[]} The icon URL of an overridden public method with warning. */ +qx.Class.ICON_METHOD_PUB_OVERRIDDEN_WARN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an overridden public method with error. */ +qx.Class.ICON_METHOD_PUB_OVERRIDDEN_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of a public static method. */ +qx.Class.ICON_METHOD_PUB_STATIC = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_STATIC ]; +/** {string[]} The icon URL of a public static method with error. */ +qx.Class.ICON_METHOD_PUB_STATIC_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_STATIC, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of a public abstract method. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT ]; +/** {string[]} The icon URL of a public abstract method with warning. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_WARN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of a public abstract method with error. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an overridden public abstract method. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_OVERRIDDEN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_OVERRIDDEN ]; +/** {string[]} The icon URL of an overridden public abstract method with warning. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_OVERRIDDEN_WARN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an overridden public abstract method with error. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_OVERRIDDEN_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an inherited public abstract method. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_INHERITED = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_INHERITED ]; +/** {string[]} The icon URL of an inherited public abstract method with warning. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_INHERITED_WARN = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an inherited public abstract method with error. */ +qx.Class.ICON_METHOD_PUB_ABSTRACT_INHERITED_ERROR = [ qx.Class.ICON_METHOD_PUB, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_ERROR ]; + + +/** {string} The icon URL of a constructor. */ +qx.Class.ICON_METHOD_PUB_CTOR = "api/image/constructor18.gif"; +/** {string[]} The icon URL of a constructor with error. */ +qx.Class.ICON_METHOD_PUB_CTOR_ERROR = [ qx.Class.ICON_METHOD_PUB_CTOR, qx.Class.OVERLAY_ERROR ]; + + +/** {string} The icon URL of a protected method. */ +qx.Class.ICON_METHOD_PROT = "api/image/method_protected18.gif"; +/** {string[]} The icon URL of a protected method with warning. */ +qx.Class.ICON_METHOD_PROT_WARN = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ERROR ]; +/** {string[]} The icon URL of a protected method with error. */ +qx.Class.ICON_METHOD_PROT_ERROR = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an inherited protected method. */ +qx.Class.ICON_METHOD_PROT_INHERITED = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_INHERITED ]; +/** {string[]} The icon URL of an inherited protected method with warning. */ +qx.Class.ICON_METHOD_PROT_INHERITED_WARN = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an inherited protected method with error. */ +qx.Class.ICON_METHOD_PROT_INHERITED_ERROR = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an overridden protected method. */ +qx.Class.ICON_METHOD_PROT_OVERRIDDEN = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_OVERRIDDEN ]; +/** {string[]} The icon URL of an overridden protected method with warning. */ +qx.Class.ICON_METHOD_PROT_OVERRIDDEN_WARN = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an overridden protected method with error. */ +qx.Class.ICON_METHOD_PROT_OVERRIDDEN_ERROR = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_OVERRIDDEN, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of a protected static method. */ +qx.Class.ICON_METHOD_PROT_STATIC = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_STATIC ]; +/** {string[]} The icon URL of a protected static method with error. */ +qx.Class.ICON_METHOD_PROT_STATIC_ERROR = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_STATIC, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an abstract protected method. */ +qx.Class.ICON_METHOD_PROT_ABSTRACT = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ABSTRACT ]; +/** {string[]} The icon URL of an abstract protected method with warning. */ +qx.Class.ICON_METHOD_PROT_ABSTRACT_WARN = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an abstract protected method with error. */ +qx.Class.ICON_METHOD_PROT_ABSTRACT_ERROR = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_ERROR ]; + +/** {string[]} The icon URL of an inherited abstract protected method. */ +qx.Class.ICON_METHOD_PROT_ABSTRACT_INHERITED = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_INHERITED ]; +/** {string[]} The icon URL of an inherited abstract protected method with warning. */ +qx.Class.ICON_METHOD_PROT_ABSTRACT_INHERITED_WARN = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_WARN ]; +/** {string[]} The icon URL of an inherited abstract protected method with error. */ +qx.Class.ICON_METHOD_PROT_ABSTRACT_INHERITED_ERROR = [ qx.Class.ICON_METHOD_PROT, qx.Class.OVERLAY_ABSTRACT, qx.Class.OVERLAY_INHERITED, qx.Class.OVERLAY_ERROR ]; + + +/** {string} The icon URL of a constant. */ +qx.Class.ICON_CONSTANT = "api/image/constant18.gif"; +/** {string[]} The icon URL of a constant with error. */ +qx.Class.ICON_CONSTANT_ERROR = [ qx.Class.ICON_CONSTANT, qx.Class.OVERLAY_ERROR ]; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/Viewer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/Viewer.js new file mode 100755 index 0000000000..b2f81d4859 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/class/apiviewer/Viewer.js @@ -0,0 +1,433 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(apiviewer) +#resource(css:css) +#resource(image:image) + +************************************************************************ */ + +/** + * The API viewer. Shows the API documentation. + */ +qx.OO.defineClass("apiviewer.Viewer", qx.ui.layout.DockLayout, +function () { + qx.ui.layout.DockLayout.call(this); + + this.setEdge(0); + + this._titlePrefix = this.getSetting("title") + " API Documentation"; + document.title = this._titlePrefix; + + // create header + var header = new qx.ui.embed.HtmlEmbed( + "<h1>" + + "<span>" + this.getSetting("title") + "</span>"+ + " API Documentation"+ + "</h1>" + + "<div id='qxversion'>qooxdoo " + qx.core.Version.toString() + "</div>" + ); + header.setHtmlProperty("id", "header"); + header.setStyleProperty("background", "#134275 url(" + qx.manager.object.AliasManager.getInstance().resolvePath("api/image/colorstrip.gif") + ") top left repeat-x"); + header.setHeight(70); + this.addTop(header); + + this._tree = new qx.ui.tree.Tree("API Documentation"); + this._tree.set({ + backgroundColor: "white", + overflow: "scroll", + width: "100%", + height: "100%", + border: qx.renderer.border.BorderPresets.getInstance().inset, + paddingLeft: 5, + paddingTop: 3 + }); + this._tree.getManager().addEventListener("changeSelection", this._onTreeSelectionChange, this); + + this._detailFrame = new qx.ui.layout.CanvasLayout; + this._detailFrame.set({ + width: "100%", + height: "100%", + backgroundColor: "white", + border: qx.renderer.border.BorderPresets.getInstance().inset + }); + this._detailFrame.setHtmlProperty("id", "DetailFrame"); + + // create vertival splitter + var mainSplitPane = new qx.ui.splitpane.HorizontalSplitPane(250, "1*"); + mainSplitPane.setLiveResize(true); + mainSplitPane.addLeft(this._tree); + mainSplitPane.addRight(this._detailFrame); + this.add(mainSplitPane); + + this._detailLoader = new qx.ui.embed.HtmlEmbed('<h1><div class="please">please wait</div>Loading data...</h1>'); + this._detailLoader.setHtmlProperty("id", "DetailLoader"); + this._detailLoader.setMarginLeft(20); + this._detailLoader.setMarginTop(20); + this._detailFrame.add(this._detailLoader); + + this._classViewer = new apiviewer.ClassViewer; + this._detailFrame.add(this._classViewer); + + this._infoViewer = new apiviewer.InfoViewer; + this._detailFrame.add(this._infoViewer); + + this._currentTreeType = apiviewer.Viewer.PACKAGE_TREE; + + // Workaround: Since navigating in qx.ui.tree.Tree doesn't work, we've to + // maintain a hash that keeps the tree nodes for class names + this._classTreeNodeHash = {}; + this._classTreeNodeHash[apiviewer.Viewer.PACKAGE_TREE] = {}; + this._classTreeNodeHash[apiviewer.Viewer.INHERITENCE_TREE] = {}; + + apiviewer.Viewer.instance = this; + + qx.client.History.getInstance().init(); + qx.client.History.getInstance().addEventListener("request", this._onHistoryRequest, this); +}); + + +/** The documentation tree to show. */ +qx.OO.addProperty({ name:"docTree", type:"object" }); + + +qx.Settings.setDefault("title", "qooxdoo"); +qx.Settings.setDefault("initialTreeDepth", 1); + + +// property checker +qx.Proto._modifyDocTree = function(propValue, propOldValue, propData) { + this._updateTree(propValue); + return true; +} + + +/** + * Loads the API doc tree from a URL. The URL must point to a JSON encoded + * doc tree. + * + * @param url {String} the URL. + */ +qx.Proto.load = function(url) +{ + var req = new qx.io.remote.Request(url); + + req.setTimeout(180000); + + req.addEventListener("completed", function(evt) + { + var content = evt.getData().getContent(); + this.setDocTree(eval("(" + content + ")")); + + qx.ui.core.Widget.flushGlobalQueues(); + + // Handle bookmarks + if (window.location.hash) { + var self = this; + window.setTimeout(function() { + self.selectItem(window.location.hash.substring(1)); + }, 0); + } + + this._detailLoader.setHtml('<h1><div class="please">' + this.getSetting("title") + + '</div>API Documentation</h1>'); + + }, this); + + req.addEventListener("failed", function(evt) + { + this.error("Couldn't load file: " + url); + }, this); + + req.send(); +} + + +/** + * Updates the tree on the left. + * + * @param docTree {Map} the documentation tree to use for updating. + */ +qx.Proto._updateTree = function(docTree) { + var inheritenceNode = new qx.ui.tree.TreeFolder("Inheritence hierarchy"); + var packagesNode = new qx.ui.tree.TreeFolder("Packages"); + + this._tree.removeAll(); + this._tree.add(inheritenceNode, packagesNode); + + // Fille the packages tree (and fill the _topLevelClassNodeArr) + this._topLevelClassNodeArr = []; + this._fillPackageNode(packagesNode, docTree, 0); + + // Sort the _topLevelClassNodeArr + this._topLevelClassNodeArr.sort(function (node1, node2) { + return (node1.attributes.fullName < node2.attributes.fullName) ? -1 : 1; + }); + + // Fill the inheritence tree + for (var i = 0; i < this._topLevelClassNodeArr.length; i++) { + this._createInheritanceNode(inheritenceNode, this._topLevelClassNodeArr[i], docTree); + } + + packagesNode.open(); + + if (this._wantedClassName) { + this.showClassByName(this._wantedClassName); + this._wantedClassName = null; + } +} + + +/** + * Fills a package tree node with tree nodes for the sub packages and classes. + * + * @param treeNode {qx.ui.tree.TreeFolder} the package tree node. + * @param docNode {Map} the documentation node of the package. + */ +qx.Proto._fillPackageNode = function(treeNode, docNode, depth) { + var ApiViewer = apiviewer.Viewer; + var TreeUtil = apiviewer.TreeUtil; + + var packagesDocNode = TreeUtil.getChild(docNode, "packages"); + if (packagesDocNode && packagesDocNode.children) { + for (var i = 0; i < packagesDocNode.children.length; i++) { + var packageDocNode = packagesDocNode.children[i]; + var iconUrl = TreeUtil.getIconUrl(packageDocNode); + var packageTreeNode = new qx.ui.tree.TreeFolder(packageDocNode.attributes.name, iconUrl); + packageTreeNode.docNode = packageDocNode; + treeNode.add(packageTreeNode); + + this._fillPackageNode(packageTreeNode, packageDocNode, depth+1); + + // Open the package node if it has child packages + if (depth < this.getSetting("initialTreeDepth") && TreeUtil.getChild(packageDocNode, "packages")) { + packageTreeNode.open(); + } + + // Register the tree node + this._classTreeNodeHash[ApiViewer.PACKAGE_TREE][packageDocNode.attributes.fullName] = packageTreeNode; + } + } + + var classesDocNode = TreeUtil.getChild(docNode, "classes"); + if (classesDocNode && classesDocNode.children) { + for (var i = 0; i < classesDocNode.children.length; i++) { + var classDocNode = classesDocNode.children[i]; + var iconUrl = TreeUtil.getIconUrl(classDocNode); + var classTreeNode = new qx.ui.tree.TreeFolder(classDocNode.attributes.name, iconUrl); + classTreeNode.docNode = classDocNode; + classTreeNode.treeType = ApiViewer.PACKAGE_TREE; + treeNode.add(classTreeNode); + + // Register the tree node + this._classTreeNodeHash[ApiViewer.PACKAGE_TREE][classDocNode.attributes.fullName] = classTreeNode; + + // Check whether this is a top-level-class + if (classDocNode.attributes.superClass == null) { + this._topLevelClassNodeArr.push(classDocNode); + } + } + } +} + + +/** + * Creates the tree node for a class containing class nodes for all its child + * classes. + * + * @param classDocNode {Map} the documentation node of the class. + * @param docTree {Map} the documentation tree. + */ +qx.Proto._createInheritanceNode = function(parentTreeNode, classDocNode, docTree) { + var ApiViewer = apiviewer.Viewer; + var TreeUtil = apiviewer.TreeUtil; + + // Create the tree node + var iconUrl = TreeUtil.getIconUrl(classDocNode); + var classTreeNode = new qx.ui.tree.TreeFolder(classDocNode.attributes.fullName, iconUrl); + classTreeNode.docNode = classDocNode; + classTreeNode.treeType = ApiViewer.INHERITENCE_TREE; + parentTreeNode.add(classTreeNode); + + // Register the tree node + this._classTreeNodeHash[ApiViewer.INHERITENCE_TREE][classDocNode.attributes.fullName] = classTreeNode; + + // Add all child classes + var childClassNameCsv = classDocNode.attributes.childClasses; + if (childClassNameCsv) { + var childClassNameArr = childClassNameCsv.split(","); + for (var i = 0; i < childClassNameArr.length; i++) { + var childClassDocNode = TreeUtil.getClassDocNode(docTree, childClassNameArr[i]); + this._createInheritanceNode(classTreeNode, childClassDocNode, docTree); + } + } +} + + +/** + * Event handler. Called when the tree selection has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTreeSelectionChange = function(evt) +{ + var treeNode = evt.getData()[0]; + + if (treeNode && treeNode.docNode) + { + var newTitle = this._titlePrefix + " - class " + treeNode.docNode.attributes.fullName; + + qx.client.History.getInstance().addToHistory(treeNode.docNode.attributes.fullName, newTitle); + + this._currentTreeType = treeNode.treeType; + + this._selectTreeNode(treeNode); + + window.location.hash = "#" + treeNode.docNode.attributes.fullName; + } +} + + +qx.Proto._onHistoryRequest = function(evt) +{ + this.showClassByName(evt.getData()); +} + +qx.Proto._selectTreeNode = function(vTreeNode) +{ + if (!(vTreeNode && vTreeNode.docNode)) { + this.error("Invalid tree node: " + vTreeNode); + } + + var vDoc = vTreeNode.docNode; + + this._detailLoader.setVisibility(false); + + if (vDoc.type == "class") + { + this._infoViewer.setVisibility(false); + this._classViewer.showClass(vDoc); + this._classViewer.setVisibility(true); + } + else + { + this._classViewer.setVisibility(false); + this._infoViewer.showInfo(vDoc); + this._infoViewer.setVisibility(true); + } +} + + +/** + * Selects an item (class, property, method or constant). + * + * @param fullItemName {String} the full name of the item to select. + * (e.g. "qx.mypackage.MyClass" or "qx.mypackage.MyClass#myProperty") + */ +qx.Proto.selectItem = function(fullItemName) { + var className = fullItemName; + var itemName = null; + var hashPos = fullItemName.indexOf("#"); + if (hashPos != -1) { + className = fullItemName.substring(0, hashPos); + itemName = fullItemName.substring(hashPos + 1); + + var parenPos = itemName.indexOf("("); + if (parenPos != -1) { + itemName = qx.lang.String.trim(itemName.substring(0, parenPos)); + } + } + + this.showClassByName(className); + if (itemName) { + this._classViewer.showItem(itemName); + } +} + + +/** + * Shows a certain class. + * + * @param className {String} the name of the class to show. + */ +qx.Proto.showClassByName = function(className) { + var treeNode = this._classTreeNodeHash[this._currentTreeType][className]; + + if (treeNode) { + treeNode.setSelected(true); + } else if (this.getDocTree() == null) { + // The doc tree has not been loaded yet + // -> Remeber the wanted class and show when loading is done + this._wantedClassName = className; + } else { + this.error("Unknown class: " + className); + } +} + + +qx.Class.PACKAGE_TREE = 1; +qx.Class.INHERITENCE_TREE = 2; + + + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._tree) + { + this._tree.dispose(); + this._tree = null; + } + + if (this._detailFrame) + { + this._detailFrame.dispose(); + this._detailFrame = null; + } + + if (this._detailLoader) + { + this._detailLoader.dispose(); + this._detailLoader = null; + } + + if (this._classViewer) + { + this._classViewer.dispose(); + this._classViewer = null; + } + + if (this._infoViewer) + { + this._infoViewer.dispose(); + this._infoViewer = null; + } + + this._classTreeNodeHash = null; + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/index.html new file mode 100755 index 0000000000..a40a79fb1b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/index.html @@ -0,0 +1,15 @@ +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>API Documentation</title> + <script type="text/javascript" src="script/apiviewer.js"></script> + </head> + <body> + <script type="text/javascript"> + if (!qx.IS_SOURCE) { + qx.log.Logger.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_ERROR); + } + qx.core.Init.getInstance().setApplication(apiviewer.Application); + </script> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/css/apiviewer.css b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/css/apiviewer.css new file mode 100755 index 0000000000..834608fafc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/css/apiviewer.css @@ -0,0 +1,320 @@ +#header { + margin: 0px; + padding: 0px; + background-color: #134275; + font-family: "Trebuchet MS", "Lucida Grande", Verdana, sans-serif; +} + +#header h1 { + font-size: 18px; + font-weight: bold; + color: #DEFF83; + position: absolute; + top: 30px; + left: 20px; + margin: 0; + padding: 0; +} + +#qxversion { + font-size: 11px; + text-transform: lowercase; + color: #F3FFD1; + margin-top: -14px; + letter-spacing: 1px; + word-spacing: 4px; + position: absolute; + bottom: 20px; + right: 20px; + margin: 0; + padding: 0; +} + +#DetailFrame, +#DetailFrame td, +#DetailFrame th{ + font-family: Verdana, "Lucida Grande", "Bitstream Vera Sans", Tahoma, "Lucida Sans Unicode", Arial, sans-serif; + font-size: 11px; + line-height: 150%; +} + +#DetailFrame h1, +#DetailFrame h2, +#DetailFrame h3, +#DetailFrame h4, +#DetailFrame h5, +#DetailFrame h6{ + font-family: "Trebuchet MS", "Lucida Grande", Verdana, sans-serif; + color: #134275; +} + +#DetailFrame *{ + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + +#DetailFrame #ControlFrame{ + position: absolute; + top: 20px; + right: 20px; + font-size: 10px; + background: #FBFFEF; + padding: 4px 6px; + border: 1px solid #ECECEC; +} + +#DetailFrame h1 { + font-size: 24px; + margin-bottom: 20px; +} + +#DetailFrame h2 { + font-size: 18px; + margin-bottom: 4px; +} + +#DetailFrame h3 { + font-size: 14px; +} + +#DetailFrame img { + border: 0 none; + vertical-align: middle; +} + +#DetailFrame a:link, +#DetailFrame a:visited{ + color: #134275; +} + +#DetailFrame a:hover, +#DetailFrame a:active{ + color: #134275; + text-decoration: underline; +} + +#DetailFrame td{ + vertical-align: top; + padding: 2px; +} + + + + + +#DetailLoader div.please{ + font-size: 14px; + font-weight: normal; + margin-bottom: 4px; +} + + + + + + +#InfoViewer div.pkgtitle{ + font-size: 14px; + font-weight: normal; + margin-bottom: 4px; +} + + + + + + + + +#ClassViewer div.classDescription{ + font-size: 12px; + + background: #F3FFD1; + border: 1px solid #F3FFD1; + + -moz-border-radius: 5px; + padding: 12px; + padding-top: 4px; + padding-bottom: 4px; + + width: 650px; + overflow: auto; +} + +#ClassViewer div.classDescription p{ + margin-top: 5px; + margin-bottom: 5px; +} + +#ClassViewer div.packageName{ + font-size: 14px; + font-weight: normal; + margin-bottom: 4px; +} + +#ClassViewer span.typeInfo{ + color: #83B300; + font-weight: normal; +} + + + + + + +#ClassViewer div.infoPanel { + margin-top: 30px; +} + +#ClassViewer div.infoPanel h2{ + cursor: default; +} + + + + + + + + +#ClassViewer table.info { + table-layout: fixed; +} + +#ClassViewer table.info tr { + background: #FBFFEF; +} + +#ClassViewer table.info tr.marked { + background: #DEFF83; +} + +#ClassViewer table.info tr td, +#ClassViewer div.empty-info-body { + border-top: 1px solid #ECECEC; +} + +#ClassViewer table.info tr td{ + overflow: hidden; +} + +#ClassViewer table.info tr td td{ + border-top: 0 none; + padding: 0; +} + +#ClassViewer table.info td.icon{ + text-align: center; + width: 20px; +} + +#ClassViewer table.info td.type{ + width: 100px; + font-size: 12px; + color: #83B300; + font-weight: bold; +} + +#ClassViewer table.info td.toggle{ + text-align: center; + width: 16px; + padding: 1px; +} + +#ClassViewer table.info td.toggle img{ + cursor: default; +} + +#ClassViewer table.info td.text{ + padding-right: 10px; +} + +#ClassViewer table.info td.text h3{ + cursor: default; +} + +#ClassViewer table.info td.text table{ + padding: 0; +} + +#ClassViewer table.info td.text table td { + padding: 1px 3px; +} + +#ClassViewer table.info td.text table th { + text-align: left; + color: #134275; + font-weight: normal; + padding: 1px 3px; +} + +#ClassViewer span.methodSignature{ + font-size: 12px; + color: #83B300; +} + +#ClassViewer table.info td.type a, +#ClassViewer span.methodSignature a{ + color: #83B300 !important; +} + +#ClassViewer span.methodSignature span.parameterType{ + font-style: italic; +} + +#ClassViewer span.methodSignature span.separator{ + color: #134275; + font-weight: bold; +} + +#ClassViewer span.methodSignature span.parenthesis{ + color: #134275; + font-weight: bold; +} + + + + + +#ClassViewer div.item-detail-headline { + font-weight: bold; + color: #1D65B3; +} + +#ClassViewer div.item-detail-text { + padding-left: 12px; +} + +#ClassViewer div.item-detail-text p{ + display: inline; +} + +#ClassViewer div.item-detail-error { + font-weight: bold; + color: #D61F1C; +} + +#ClassViewer span.item-detail-optional { + font-style: italic; +} + +#ClassViewer code, +#ClassViewer pre, +#ClassViewer span.item-detail-param-name { + font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", monospace; + background: #FFF; + padding: 1px; +} + +#ClassViewer pre{ + overflow: auto; + padding: 4px 8px; + margin-top: 8px; + margin-bottom: 8px; +} + +#ClassViewer span.caps{ + color: #134275; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class18.gif Binary files differnew file mode 100755 index 0000000000..df8c9291c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_abstract18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_abstract18.gif Binary files differnew file mode 100755 index 0000000000..788abd7094 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_abstract18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_abstract_warning18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_abstract_warning18.gif Binary files differnew file mode 100755 index 0000000000..135f68cffd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_abstract_warning18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_static18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_static18.gif Binary files differnew file mode 100755 index 0000000000..5eb75aea09 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_static18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_static_warning18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_static_warning18.gif Binary files differnew file mode 100755 index 0000000000..75a6c72035 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_static_warning18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_warning18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_warning18.gif Binary files differnew file mode 100755 index 0000000000..95e7a327f9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/class_warning18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/close.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/close.gif Binary files differnew file mode 100755 index 0000000000..3377fb65de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/close.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/colorstrip.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/colorstrip.gif Binary files differnew file mode 100644 index 0000000000..e19d1b4dfd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/colorstrip.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/constant18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/constant18.gif Binary files differnew file mode 100755 index 0000000000..c3a5d0cedf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/constant18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/constructor18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/constructor18.gif Binary files differnew file mode 100644 index 0000000000..b3645ac80a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/constructor18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/event18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/event18.gif Binary files differnew file mode 100644 index 0000000000..d3555ff96d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/event18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/method_protected18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/method_protected18.gif Binary files differnew file mode 100755 index 0000000000..be71bae519 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/method_protected18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/method_public18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/method_public18.gif Binary files differnew file mode 100755 index 0000000000..67b1785dba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/method_public18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/nextlevel.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/nextlevel.gif Binary files differnew file mode 100755 index 0000000000..48b81c80a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/nextlevel.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/open.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/open.gif Binary files differnew file mode 100755 index 0000000000..30f815aa30 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/open.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_abstract18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_abstract18.gif Binary files differnew file mode 100755 index 0000000000..16122bf4d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_abstract18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_constructor18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_constructor18.gif Binary files differnew file mode 100755 index 0000000000..d408fe8e57 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_constructor18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_error18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_error18.gif Binary files differnew file mode 100755 index 0000000000..ffde061d69 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_error18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_inherited18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_inherited18.gif Binary files differnew file mode 100755 index 0000000000..81e4906fe7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_inherited18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_overridden18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_overridden18.gif Binary files differnew file mode 100755 index 0000000000..bca3e80c48 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_overridden18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_static18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_static18.gif Binary files differnew file mode 100755 index 0000000000..4b1afa1a35 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_static18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_warning18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_warning18.gif Binary files differnew file mode 100755 index 0000000000..ce74a2a0f2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/overlay_warning18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/package18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/package18.gif Binary files differnew file mode 100755 index 0000000000..907110110d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/package18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/package_warning18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/package_warning18.gif Binary files differnew file mode 100755 index 0000000000..2cb875be2b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/package_warning18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/property18.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/property18.gif Binary files differnew file mode 100755 index 0000000000..ab4153d6d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/resource/image/property18.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/C.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/C.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/C.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/de.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/de.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/de.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/en.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/en.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/en.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/es.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/es.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/es.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/fr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/fr.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/apiviewer/source/translation/fr.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/Makefile new file mode 100644 index 0000000000..25785cebc5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/Makefile @@ -0,0 +1,104 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################ +# BASIC SETTINGS +################################################################################ + +# +# Location of your qooxdoo distribution +# Could be relative from this location or absolute +# +QOOXDOO_PATH = ../../.. + +# +# The same as above, but from the webserver point of view +# Starting point is the application HTML file of the source folder. +# In most cases just add a "/.." compared to above +# +QOOXDOO_URI = ../../../.. + +# +# Namespace of your application e.g. custom +# +APPLICATION_NAMESPACE = feedreader + +# +# Titles used in your API viewer and during the build process +# +APPLICATION_MAKE_TITLE = FEEDREADER +APPLICATION_API_TITLE = FeedReader + +# +# Additional files (space separated list) +# +APPLICATION_FILES = index.html + +# +# Locales to include +# +#APPLICATION_LOCALES = en de tr it es sv ru fr +APPLICATION_LOCALES = de es en + + + + + +################################################################################ +# ADVANCED SETTINGS +################################################################################ + +# +# Enable resource filtering in API viewer +# +APPLICATION_RESOURCE_FILTER = true + +# +# We don't need the full source code +# +APPLICATION_COMPLETE_SOURCE = false + +# +# Disable line breaks +# +APPLICATION_LINEBREAKS_BUILD = false +APPLICATION_LINEBREAKS_SOURCE = true + +# +# qooxdoo.org sync +# +APPLICATION_PUBLISH_PATH = root@qooxdoo.org:/var/www/qooxdoo/demo/$(FRAMEWORK_VERSION)/$(APPLICATION_NAMESPACE) + + + + + +################################################################################ +# INCLUDE CORE +################################################################################ + +ifneq ($(QOOXDOO_PATH),PLEASE_DEFINE_QOOXDOO_PATH) + include $(QOOXDOO_PATH)/frontend/framework/tool/make/targets.mk + include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk +endif + +error: + @echo " * Please configure QOOXDOO_PATH" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/class/feedreader/Application.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/class/feedreader/Application.js new file mode 100755 index 0000000000..aa76800f31 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/class/feedreader/Application.js @@ -0,0 +1,410 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#resource(feeds:feeds) +#resource(css:css) +#resource(proxy:proxy) +#resource(images:images) +#embed(feedreader.proxy/*) +#embed(feedreader.feeds/*) +#embed(feedreader.css/*) +#embed(feedreader.images/*) +#embed(qx.icontheme/16/actions/dialog-ok.png) +#embed(qx.icontheme/16/actions/dialog-cancel.png) +#embed(qx.icontheme/16/actions/help-about.png) +#embed(qx.icontheme/16/actions/view-refresh.png) + +************************************************************************ */ + +/** + * qooxdoo news reader Application class. + */ +qx.OO.defineClass("feedreader.Application", qx.component.AbstractApplication, +function () { + qx.component.AbstractApplication.call(this); + + qx.manager.object.ImageManager.getInstance().setIconTheme(qx.theme.icon.VistaInspirate.getInstance()); + //this.fetchFeedDesc(); + this.setFeeds([]); +}); + +qx.OO.addProperty({name: "feeds"}); +qx.OO.addProperty({name: "selectedFeed"}); + +qx.Settings.setDefault("resourceUri", "./resource"); + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().getRunsLocally()) +{ + qx.Class._feedDesc = [ + { + url: "feedreader/feeds/qooxdoo-news.xml", + name: "qooxdoo-blog" + }, + { + url: "feedreader/feeds/qooxdoo-blog.xml", + name: "qooxdoo-news" + }, + { + url: "feedreader/feeds/ajaxian.xml", + name: "ajaxian" + }, + { + url: "feedreader/feeds/safari.xml", + name: "Surfin' Safari" + } + ]; +} +else +{ + qx.Class._feedDesc = [ + { + url: "feedreader/proxy/proxy.php?proxy=" + encodeURIComponent("http://feeds.feedburner.com/qooxdoo/blog/content"), + name: "qooxdoo-blog" + }, + { + url: "feedreader/proxy/proxy.php?proxy=" + encodeURIComponent("http://feeds.feedburner.com/qooxdoo/news/content"), + name: "qooxdoo-news" + }, + { + url: "feedreader/proxy/proxy.php?proxy=" + encodeURIComponent("http://feeds.feedburner.com/ajaxian"), + name: "ajaxian" + }, + { + url: "feedreader/proxy/proxy.php?proxy=" + encodeURIComponent("http://webkit.org/blog/?feed=rss2"), + name: "Surfin' Safari" + } + ]; +} + +qx.Proto.initialize = function(e) +{ + // Define alias for custom resource path + qx.manager.object.AliasManager.getInstance().add("feedreader", qx.Settings.getValueOfClass("feedreader.Application", "resourceUri")); + + // Include CSS file + qx.html.StyleSheet.includeFile(qx.manager.object.AliasManager.getInstance().resolvePath("feedreader/css/reader.css")); +}; + +qx.Proto.main = function(e) +{ + // create main layout + var dockLayout = new qx.ui.layout.DockLayout(); + dockLayout.set({ + height: "100%", + width: "100%" + }); + + // create header + var header = new qx.ui.embed.HtmlEmbed("<h1><span>qooxdoo</span> reader</h1>"); + header.setCssClassName("header"); + header.setHeight(50); + dockLayout.addTop(header); + + // define commands + var reload_cmd = new qx.client.Command("Control+R"); + reload_cmd.addEventListener("execute", function(e) { + this.fetchFeeds(); + this.debug(this.tr("reloading ...").toString()); + }, this); + + var about_cmd = new qx.client.Command("F1"); + about_cmd.addEventListener("execute", function(e) { + alert(this.tr("qooxdoo feed reader.")); + }, this); + + // create toolbar + var toolBar = new qx.ui.toolbar.ToolBar(); + toolBar.add(new qx.ui.toolbar.Button(this.trn("Add feed", "Add feeds", 2), "icon/16/actions/dialog-ok.png")); + toolBar.add(new qx.ui.toolbar.Button(this.tr("Remove feed"), "icon/16/actions/dialog-cancel.png")); + toolBar.add(new qx.ui.toolbar.Separator()); + + var reload_btn = new qx.ui.toolbar.Button(this.tr("Reload"), "icon/16/actions/view-refresh.png"); + reload_btn.setCommand(reload_cmd); + reload_btn.setToolTip(new qx.ui.popup.ToolTip(this.tr("(%1) Reload the feeds.", reload_cmd.toString()))); + toolBar.add(reload_btn); + + toolBar.add(new qx.ui.basic.HorizontalSpacer()); + + // poulate languages menu and add it to the toolbar + var locales = { + en: this.tr("English"), + de: this.tr("German"), + en: this.tr("English"), + tr: this.tr("Turkish"), + it: this.tr("Italian"), + es: this.tr("Spanish"), + sv: this.tr("Swedish"), + ru: this.tr("Russian") + } + var availableLocales = qx.locale.Manager.getInstance().getAvailableLocales(); + var locale = qx.locale.Manager.getInstance().getLocale(); + var lang_menu = new qx.ui.menu.Menu(); + var radioManager = new qx.manager.selection.RadioManager("lang"); + for (var lang in locales) { + if (availableLocales.indexOf(lang) == -1) { + continue; + } + var menuButton = new qx.ui.menu.RadioButton(locales[lang], null, locale == lang); + menuButton.setUserData("locale", lang); + lang_menu.add(menuButton); + radioManager.add(menuButton); + } + radioManager.addEventListener("changeSelected", function(e) { + var lang = e.getData().getUserData("locale"); + this.debug("lang:" + lang); + qx.locale.Manager.getInstance().setLocale(lang); + }); + lang_menu.addToDocument(); + toolBar.add(new qx.ui.toolbar.MenuButton("", lang_menu, "feedreader/images/locale.png")); + + var about_btn = new qx.ui.toolbar.Button(this.tr("Help"), "icon/16/actions/help-about.png"); + about_btn.setCommand(about_cmd); + about_btn.setToolTip(new qx.ui.popup.ToolTip("(" + about_cmd.toString() + ")")); + toolBar.add(about_btn); + + dockLayout.addTop(toolBar); + + // add tree + var tree = new qx.ui.tree.Tree(this.tr("News feeds")); + tree.set({height:"100%", width:"100%"}); + tree.setOverflow("auto"); + tree.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + tree.setBackgroundColor("#EEEEEE"); + + var feedDesc = feedreader.Application._feedDesc; + for (var i=0; i<feedDesc.length; i++) { + var folder = new qx.ui.tree.TreeFolder(feedDesc[i].name); + tree.getManager().addEventListener("changeSelection", function(e) { + if (e.getData()[0] .getParentFolder()) { + this.displayFeed(e.getData()[0].getLabel()); + } + }, this); + tree.add(folder); + } + + // create table model + this._tableModel = new qx.ui.table.SimpleTableModel(); + this._tableModel.setColumnIds(["title", "author", "date"]); + this._tableModel.setColumnNamesById({ + title: this.tr("Subject"), + author: this.tr("Sender"), + date: this.tr("Date") + }); + + // add table + var table = new qx.ui.table.Table(this._tableModel); + table.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + table.set({height:"100%", width:"100%"}); + table.setStatusBarVisible(false); + table.getDataRowRenderer().setHighlightFocusRow(false); + table.getTableColumnModel().setColumnWidth(0, 350); + table.getTableColumnModel().setColumnWidth(1, 200); + table.getTableColumnModel().setColumnWidth(2, 200); + table.getSelectionModel().addEventListener("changeSelection", function(e) { + var selectedEntry = table.getSelectionModel().getAnchorSelectionIndex(); + var item = this.getFeeds()[this.getSelectedFeed()].items[selectedEntry]; + this.displayArticle(item); + }, this); + + // hide row focus + var theme = qx.manager.object.AppearanceManager.getInstance().getAppearanceTheme(); + theme.registerAppearance("table-focus-indicator", { + state : function(vTheme, vStates) { + return { + border: null + } + } + }); + this._table = table; + + // add blog entry + this._blogEntry = new feedreader.ArticleView(); + this._blogEntry.set({height:"100%", width:"100%"}); + this._blogEntry.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + + // create splitpane for the right hand content area + var contentSplitPane = new qx.ui.splitpane.VerticalSplitPane("1*", "2*"); + contentSplitPane.set({height:"100%", width:"100%"}); + contentSplitPane.setLiveResize(true); + contentSplitPane.addTop(table); + contentSplitPane.addBottom(this._blogEntry); + + // create vertival splitter + var mainSplitPane = new qx.ui.splitpane.HorizontalSplitPane(200, "1*"); + mainSplitPane.setLiveResize(true); + mainSplitPane.addLeft(tree); + mainSplitPane.addRight(contentSplitPane); + + dockLayout.add(mainSplitPane); + + dockLayout.addToDocument(); + + // load and display feed data + this.setSelectedFeed(feedDesc[0].name); + this.fetchFeeds(); +}; + + +qx.Proto.fetchFeedDesc = function() { + var req = new qx.io.remote.Request(qx.manager.object.AliasManager.getInstance().resolvePath("feedreader/feeds/febo-feeds.opml.xml"), "GET", qx.util.Mime.XML); + feedreader.Application._feedDesc = []; + req.addEventListener("completed", function(e) { + var xml = e.getData().getContent(); + var eItems = xml.getElementsByTagName("outline"); + for(var i=0; i<eItems.length; i++) { + var eDesc = eItems[i]; + feedreader.Application._feedDesc.push({ + name: eDesc.getAttribute("title"), + url: qx.manager.object.AliasManager.getInstance().resolvePath("feedreader/proxy/proxy.php") + "?proxy=" + encodeURIComponent(eDesc.getAttribute("xmlUrl")) + }); + } + }, this); + req.setAsynchronous(false); + req.send(); +}; + + +qx.Proto.fetchFeeds = function() { + qx.io.remote.RequestQueue.getInstance().setMaxConcurrentRequests(2); + var feedDesc = feedreader.Application._feedDesc; + var that = this; + var getCallback = function(feedName) { + return function(e) { + that.debug("loading " + feedName + " complete!"); + that.parseXmlFeed(feedName, e.getData().getContent()); + } + } + for (var i=0; i<feedDesc.length; i++) { + var req = new qx.io.remote.Request(qx.manager.object.AliasManager.getInstance().resolvePath(feedDesc[i].url), "GET", qx.util.Mime.XML); + req.addEventListener("completed", getCallback(feedDesc[i].name)); + req.send(); + } +}; + + +qx.Proto.parseXmlFeed = function(feedName, xml) { + var items = []; + if (xml.documentElement.tagName == "rss") { + items = this.parseRSSFeed(xml); + } else if (xml.documentElement.tagName == "feed") { + items = this.parseAtomFeed(xml); + } + this.getFeeds()[feedName] = { + selected: 0, + items: items + }; + if (feedName == this.getSelectedFeed()) { + this.displayFeed(feedName); + } +}; + + +qx.Proto.parseAtomFeed = function(xml) { + var eItems = xml.getElementsByTagName("entry"); + var empty = xml.createElement("empty"); + var items = []; + for (var i=0; i<eItems.length; i++) { + var eItem = eItems[i]; + var item = {} + item.title = qx.dom.Element.getTextContent(eItem.getElementsByTagName("title")[0]); + if (eItem.getElementsByTagName("author").length > 0) { + item.author = qx.dom.Element.getTextContent(eItem.getElementsByTagName("author")[0].getElementsByTagName("name")[0]); + } else { + item.author = "" + } + item.date = qx.dom.Element.getTextContent( + eItem.getElementsByTagName("created")[0] || + eItem.getElementsByTagName("published")[0] || + eItem.getElementsByTagName("updated")[0] || + empty + ); + item.content = qx.dom.Element.getTextContent(eItem.getElementsByTagName("content")[0] || empty); + item.link = eItem.getElementsByTagName("link")[0].getAttribute("href"); + items.push(item); + } + return items; +} + + +qx.Proto.parseRSSFeed = function(xml) { + var eItems = xml.getElementsByTagName("item"); + var empty = xml.createElement("empty"); + var items = []; + for (var i=0; i<eItems.length; i++) { + var eItem = eItems[i]; + var item = {} + item.title = qx.dom.Element.getTextContent(eItem.getElementsByTagName("title")[0]); + item.author = qx.dom.Element.getTextContent(qx.xml.Element.getElementsByTagNameNS(eItem, qx.xml.Namespace.DC, "creator")[0] || empty); + item.date = qx.dom.Element.getTextContent(eItem.getElementsByTagName("pubDate")[0]); + item.content = qx.dom.Element.getTextContent(qx.xml.Element.getElementsByTagNameNS(eItem, qx.xml.Namespace.RSS1, "encoded")[0] || empty); + item.link = qx.dom.Element.getTextContent(eItem.getElementsByTagName("link")[0]); + items.push(item); + } + return items; +}; + + +qx.Proto.displayFeed = function(feedName) { + if (this.getSelectedFeed() != feedName) { + this.getFeeds()[this.getSelectedFeed()].selected = this._table.getSelectionModel().getAnchorSelectionIndex(); + } + + this.setSelectedFeed(feedName); + + if (this.getFeeds()[feedName]) { + var items = this.getFeeds()[feedName].items; + var selection = this.getFeeds()[feedName].selected; + + this._tableModel.setDataAsMapArray(items); + this._table.getSelectionModel().setSelectionInterval(selection, selection); + this._table.setFocusedCell(0, selection, true); + this.displayArticle(items[selection]); + } +}; + + +qx.Proto.displayArticle = function(item) { + this._blogEntry.setArticle(item); +}; + + +qx.Proto.finalize = function(e) +{ +}; + +qx.Proto.close = function(e) +{ + // prompt user + // e.returnValue = "[qooxdoo application: Do you really want to close the application?]"; +}; + +qx.Proto.terminate = function(e) +{ + // alert("terminated"); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/class/feedreader/ArticleView.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/class/feedreader/ArticleView.js new file mode 100644 index 0000000000..0e7e6509c6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/class/feedreader/ArticleView.js @@ -0,0 +1,85 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +************************************************************************ */ + +qx.OO.defineClass("feedreader.ArticleView", qx.ui.basic.Terminator, +function(article) { + qx.ui.basic.Terminator.call(this); + this.setCssClassName("blogEntry"); + this.setArticle(article); +}); + +qx.OO.addProperty({ name: "article"}); + + +qx.Proto._modifyArticle = function(propValue, propOldValue, propData) { + if (this._isCreated) { + this._applyElementData(); + } + + return true; +}; + + +qx.Proto._applyElementData = function() { + var element = this.getElement(); + element.innerHTML = this.getHtml(); + + var links = element.getElementsByTagName("a"); + for (var i=0; i<links.length; i++) { + links[i].target = "_blank"; + }; +}; + + +qx.Proto.getHtml = function() { + var item = this.getArticle(); + if (!item) { + return ""; + } + + var html = new qx.util.StringBuilder(); + + html.add("<div id='_blogEntry'>"); + + html.add("<h1 class='blog'>"); + html.add(item.title); + html.add("</h1>"); + + html.add("<div class='date'>"); + html.add(item.date); + html.add("</div>"); + + html.add("<div class='description'>"); + html.add(item.content); + html.add("</div>"); + + html.add("<a target='_blank' href='"); + html.add(item.link); + html.add("'>"); + html.add(this.tr("read more ...")); + html.add("</a>"); + + html.add("</div>"); + + return html; +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/index.html new file mode 100755 index 0000000000..4f5bf3d13a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/index.html @@ -0,0 +1,15 @@ +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Feed Reader</title> + <script type="text/javascript" src="script/feedreader.js"></script> + </head> + <body> + <script type="text/javascript"> + if (!qx.IS_SOURCE) { + qx.log.Logger.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_ERROR); + } + qx.core.Init.getInstance().setApplication(feedreader.Application); + </script> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/css/reader.css b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/css/reader.css new file mode 100644 index 0000000000..e59f36b63e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/css/reader.css @@ -0,0 +1,54 @@ +.header { + margin: 0px; + padding: 0px; + background-color: #134275; +} + +.header h1 { + font-family: "Trebuchet MS", "Lucida Grande", Verdana, sans-serif; + font-size: 18px; + font-weight: bold; + color: #DEFF83; + padding: 12px 20px; + margin: 0px; +} + +.blogEntry { + font-family: Verdana, "Lucida Grande", "Bitstream Vera Sans", Tahoma, "Lucida Sans Unicode", Arial, sans-serif; + font-size: 11px; + line-height: 150%; + padding: 5px; + background: #FBFFEF; +} + +.blogEntry h1.blog { + font-family: "Trebuchet MS", "Lucida Grande", Verdana, sans-serif; + color: #134275; + line-height: 120%; +} + +.blogEntry { + overflow: auto; +} + +.blogEntry div.date { + font-weight: bold; + color: #1D65B3; + padding: 5px; +} + +.blogEntry a:link, +.blogEntry a:visited{ + color: #134275; +} + +.blogEntry a:hover, +.blogEntry a:active{ + color: #134275; + text-decoration: underline; +} + +.blogEntry .description { + margin-top: 10px; + margin-bottom: 10px; +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/ajaxian.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/ajaxian.xml new file mode 100644 index 0000000000..68a2581df6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/ajaxian.xml @@ -0,0 +1,789 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- generator="wordpress/1.5.2" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
+
+<channel>
+ <title>Ajaxian</title>
+ <link>http://ajaxian.com</link>
+ <description>Cleaning up the web with Ajax</description>
+ <pubDate>Tue, 28 Nov 2006 14:55:53 +0000</pubDate>
+ <generator>http://wordpress.org/?v=1.5.2</generator>
+ <language>en</language>
+
+ <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://ajaxian.com/index.xml" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
+ <title>Tasks added to Google Calendar by Milkers</title>
+ <link>http://ajaxian.com/archives/tasks-added-to-google-calendar-by-milkers</link>
+ <comments>http://ajaxian.com/archives/tasks-added-to-google-calendar-by-milkers#comments</comments>
+ <pubDate>Tue, 28 Nov 2006 14:55:53 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Showcase</category>
+ <category>Calendar</category>
+ <guid>http://ajaxian.com/archives/tasks-added-to-google-calendar-by-milkers</guid>
+ <description><![CDATA[ The Remember the Milk folks have added task management to Google Calendar (something many wish Google had added themselves). + We know that many of you are managing your tasks with Remember The Milk and your events with Google Calendar, and we thought it would be very cool if we could bring the two together. This new [...]]]></description>
+ <content:encoded><![CDATA[ <p>The Remember the Milk folks have added <a href="http://blog.rememberthemilk.com/2006/11/add-your-tasks-to-google-calendar.html">task management</a> to Google Calendar (something many wish Google had added themselves).</p> + <p>We know that many of you are managing your tasks with Remember The Milk and your events with Google Calendar, and we thought it would be very cool if we could bring the two together. This new feature adds a small task icon to the top of each day in Google Calendar — click on the icon to:</p> + <ul> + <li>Review your tasks for the day</li> + <li>Add new tasks and edit existing ones</li> + <li>Easily complete and postpone tasks</li> + <li>Review your overdue tasks</li> + <li>Optionally show tasks with no due date</li> + <li>See where your tasks are located on a map (Google Maps integration)</li> + </ul> + <p>This is really interesting. An outside group was able to add an important feature that we can not all use in a Google app itself.</p> + <p><a href="http://blog.rememberthemilk.com/2006/11/add-your-tasks-to-google-calendar.html"><img src="http://tech.cybernetnews.com/wp-content/uploads/2006/11/RememberMilkGC1.jpg" border="0" /></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=fbhz2iq1"><img src="http://feeds.feedburner.com/~f/ajaxian?i=fbhz2iq1" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=yMSQUquM"><img src="http://feeds.feedburner.com/~f/ajaxian?i=yMSQUquM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=eoFosWuU"><img src="http://feeds.feedburner.com/~f/ajaxian?i=eoFosWuU" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=pYIIcHPu"><img src="http://feeds.feedburner.com/~f/ajaxian?i=pYIIcHPu" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/tasks-added-to-google-calendar-by-milkers/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>YUI Resizable Component</title>
+ <link>http://ajaxian.com/archives/yui-resizable-component</link>
+ <comments>http://ajaxian.com/archives/yui-resizable-component#comments</comments>
+ <pubDate>Tue, 28 Nov 2006 13:38:06 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Examples</category>
+ <category>Yahoo!</category>
+ <guid>http://ajaxian.com/archives/yui-resizable-component</guid>
+ <description><![CDATA[ Jack Slocum keeps 'em coming with his detailed post on a reusable component for resizing elements. + Jack's YAHOO.ext.Resizable component does what it says on the tin, and he shows you: + + Basic Resizable div + Wrapped elements (e.g. text area inside) + Preserve Ration (e.g. image resizing) + Transparent Handles + Customizable Handles + Snapping to increments + Animated Transitions + + + + +var animated = new YAHOO.ext.Resizable('animated', { +    width: 200, +    height: [...]]]></description>
+ <content:encoded><![CDATA[ <p>Jack Slocum keeps 'em coming with his detailed post on <a href="http://www.jackslocum.com/blog/2006/11/24/resizable-reloaded/">a reusable component for resizing elements</a>.</p> + <p>Jack's YAHOO.ext.Resizable component does what it says on the tin, and he shows you:</p> + <ul> + <li>Basic Resizable div</li> + <li>Wrapped elements (e.g. text area inside)</li> + <li>Preserve Ration (e.g. image resizing)</li> + <li>Transparent Handles</li> + <li>Customizable Handles</li> + <li>Snapping to increments</li> + <li>Animated Transitions</li> + </ul> + <div class="syntax_hilite"> +<div id="javascript-2"> + <div class="javascript"> +<span style="color: #003366; font-weight: bold;">var</span> animated = <span style="color: #003366; font-weight: bold;">new</span> YAHOO.<span style="color: #006600;">ext</span>.<span style="color: #006600;">Resizable</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'animated'</span>, <span style="color:#006600; font-weight:bold;">{</span><br /> + width: <span style="color:#800000;">200</span>,<br /> + height: <span style="color:#800000;">100</span>,<br /> + minWidth:<span style="color:#800000;">100</span>,<br /> + minHeight:<span style="color:#800000;">50</span>,<br /> + animate:<span style="color: #003366; font-weight: bold;">true</span>,<br /> + easing: YAHOO.<span style="color: #006600;">util</span>.<span style="color: #006600;">Easing</span>.<span style="color: #006600;">backIn</span>,<br /> + duration:.<span style="color:#800000;">6</span><br /> +<span style="color:#006600; font-weight:bold;">}</span><span style="color:#006600; font-weight:bold;">)</span>;<br /> + </div> + </div> +</div> + <p><a href="http://www.jackslocum.com/blog/2006/11/24/resizable-reloaded/"><img src="http://ajaxian.com/wp-content/images/yuiresizable.png" alt="YUI Resizable" border="0" width="208" height="108"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=JsRk5j9d"><img src="http://feeds.feedburner.com/~f/ajaxian?i=JsRk5j9d" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=8EjVkg8A"><img src="http://feeds.feedburner.com/~f/ajaxian?i=8EjVkg8A" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=h5DmJGoc"><img src="http://feeds.feedburner.com/~f/ajaxian?i=h5DmJGoc" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=dGR1OTXo"><img src="http://feeds.feedburner.com/~f/ajaxian?i=dGR1OTXo" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/yui-resizable-component/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Mootools Primer</title>
+ <link>http://ajaxian.com/archives/mootools-primer</link>
+ <comments>http://ajaxian.com/archives/mootools-primer#comments</comments>
+ <pubDate>Mon, 27 Nov 2006 15:58:12 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Examples</category>
+ <guid>http://ajaxian.com/archives/mootools-primer</guid>
+ <description><![CDATA[ Aaron Newton has posted a Mootools Primer / Tutorial that includes "a how-to tutorial on the Mootools library. Most of the code examples will allow you execute them by clicking on the "execute this code" link above the example. Clicking this will echo out the code and the result in the Firebug debugging plugin for [...]]]></description>
+ <content:encoded><![CDATA[ <p>Aaron Newton has posted a <a href="http://clientside.cnet.com/examples/mootools-primer/">Mootools Primer / Tutorial</a> that includes "a how-to tutorial on the Mootools library. Most of the code examples will allow you execute them by clicking on the "execute this code" link above the example. Clicking this will echo out the code and the result in the Firebug debugging plugin for Firefox. You'll need that plugin installed to see any results of most of the code examples."</p> + <p>Currently the tabbed widget shows documentation for the core Moo.js, extensions of JavaScript objects and helpers, Addon libraries, and plugins.</p> + <p>It behaves a little weird for me with FF2 + Firebug 1.beta, but I can get to the meat of the matter.</p> + <p><a href="http://clientside.cnet.com/examples/mootools-primer/"><img src="http://ajaxian.com/wp-content/images/mootoolsprimer.png" alt="Mootools Primer" border="0" width="590" height="324"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=vfTLBHWH"><img src="http://feeds.feedburner.com/~f/ajaxian?i=vfTLBHWH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=RmZz7WHX"><img src="http://feeds.feedburner.com/~f/ajaxian?i=RmZz7WHX" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=nEOsta0N"><img src="http://feeds.feedburner.com/~f/ajaxian?i=nEOsta0N" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=zmZsFXoa"><img src="http://feeds.feedburner.com/~f/ajaxian?i=zmZsFXoa" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/mootools-primer/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Google Docs and Spreadsheets Team: Web native matters</title>
+ <link>http://ajaxian.com/archives/google-docs-and-spreadsheets-team-web-native-matters</link>
+ <comments>http://ajaxian.com/archives/google-docs-and-spreadsheets-team-web-native-matters#comments</comments>
+ <pubDate>Mon, 27 Nov 2006 15:25:50 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Editorial</category>
+ <guid>http://ajaxian.com/archives/google-docs-and-spreadsheets-team-web-native-matters</guid>
+ <description><![CDATA[ Richard MacManus linked to a Gizbuzz interview of Jen Mazzon and Sam Schillace of the Google Docs and Spreadsheets team (both ex-Writely). + Nothing ground-breaking, but it is interesting to hear about their thoughts on Ajax: + + Browser compatibility issues - like the early graphic Web + Next was a question about browser compatibility issues and how that affects D&S - [...]]]></description>
+ <content:encoded><![CDATA[ <p>Richard MacManus <a href="http://www.readwriteweb.com/archives/google_docs_and_spreadsheets_interview.php">linked to</a> a <a href="http://gizbuzz.co.uk/2006/podcast-episode-3-google-docs-and-spreadsheets/">Gizbuzz interview of Jen Mazzon and Sam Schillace</a> of the Google Docs and Spreadsheets team (both ex-Writely).</p> + <p>Nothing ground-breaking, but it is interesting to hear about their thoughts on Ajax:</p> + <blockquote> + <h3>Browser compatibility issues - like the early graphic Web</h3> + <p>Next was a question about browser compatibility issues and how that affects D&S - and indeed the future of rich web applications. Sam responded that "it is definitely an issue [...] these apps are all cutting edge - it kind of reminds me of the early days of the graphical web, when you couldn't count on the browsers to render tables correctly [...]".</p> + <p>But he thinks it's "just growing pains" and it'll take about a year to sort those issues out.</p> + <p>Also on the question of whether Ajax is better than Flash and Laszlo etc, Sam thinks that Ajax is currently more web native.</p> + <h3>It's about being Web native, not cloning desktop apps</h3> + <p>Later in the interview, Jen stresses that they're "not trying to clone desktop apps". They want to be familiar to people, "but we're trying to do something that's actually more native to the Internet, more usable on the Internet."</p> + <p>Sam says they've had a lot of feedback that people like the fact they're not trying to copy desktop apps. He said "copying the existing stuff just feels irrelevant to us - we're not trying to copy, we're trying to re-invent."</p> + <p>Both Jen and Sam re-affirmed that collaboration and sharing is their main focus with D&S, as well as being web native - rather than trying to compete on features with desktop apps. +</p></blockquote> + <p>If you were asked "why is Ajax a better fit for some apps than Flash?" what would you say? Do you agree? Does the open web matter? What if Adobe fully opened up their format? +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=NCLw33w0"><img src="http://feeds.feedburner.com/~f/ajaxian?i=NCLw33w0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=gjXowiT4"><img src="http://feeds.feedburner.com/~f/ajaxian?i=gjXowiT4" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=HeKJhsYv"><img src="http://feeds.feedburner.com/~f/ajaxian?i=HeKJhsYv" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=CWr8mgGL"><img src="http://feeds.feedburner.com/~f/ajaxian?i=CWr8mgGL" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/google-docs-and-spreadsheets-team-web-native-matters/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Review of ‘Pro Ajax and Java Frameworks’</title>
+ <link>http://ajaxian.com/archives/review-of-pro-ajax-and-java-frameworks</link>
+ <comments>http://ajaxian.com/archives/review-of-pro-ajax-and-java-frameworks#comments</comments>
+ <pubDate>Mon, 27 Nov 2006 14:14:42 +0000</pubDate>
+ <dc:creator>Dietrich Kappe</dc:creator>
+
+ <category>Front Page</category>
+ <category>Book Reviews</category>
+ <guid>http://ajaxian.com/archives/review-of-pro-ajax-and-java-frameworks</guid>
+ <description><![CDATA[ + This is a review of Pro Ajax and Java Frameworks by Nathaniel T. Schutta and Ryan Asleson. This book seeks to give the experienced developer of Java web applications the knowledge necessary to add Ajax to their webapps. This is another Ajax book that goes broad rather than deep. Instead of investigating one or two [...]]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://ajaxian.com/wp-content/images/bcm.gif"><img src="http://ajaxian.com/wp-content/images/bcm_tn.jpg" style="DISPLAY: inline; FLOAT: left; WIDTH: 125px; HEIGHT: 164px" title="bcm.gif" height="164" width="125" alt="bcm.gif" border="0" id="bcm.gif"/></a></p> + <p>This is a review of <em>Pro Ajax and Java Frameworks</em> by Nathaniel T. Schutta and Ryan Asleson. This book seeks to give the experienced developer of Java web applications the knowledge necessary to add Ajax to their webapps. This is another Ajax book that goes broad rather than deep. Instead of investigating one or two frameworks, it delves into more than a half dozen, both Javascript and Java.</p> + <p>Quick summary: Chapters 2, 3 and 5 are the strongest in the book with useful information on tools, Javascript libraries and enhancing Struts applications with Ajax. The other chapters are not as strong and spend too much time covering old ground.</p> + <p>The book is divided into two parts. Part 1 is an introduction to a variety of Javascript and Java Ajax libraries and frameworks. Part 2 shows how to integrate those libraries and frameworks into existing Java web frameworks such as Struts and JSF. One place that this book differs from other Ajax books is that it doesn't have a chapter introducing the reader to the browser technologies that comprise Ajax. It doesn't dwell on the basics of Javascript, DOM and CSS. It expects you to have already read the Apress books on those topics. Instead, chapter 1 covers what I would call best practices and patterns -- autocomplete, partial page update, draggable DOM.</p> + <p>Read more of the review <a href="http://blogs.pathf.com/agileajax/2006/11/review_of_pro_a.html">here</a>.</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=5FIDIG43"><img src="http://feeds.feedburner.com/~f/ajaxian?i=5FIDIG43" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=5aOiDdHp"><img src="http://feeds.feedburner.com/~f/ajaxian?i=5aOiDdHp" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=hunPILOJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=hunPILOJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=GTSOXqVS"><img src="http://feeds.feedburner.com/~f/ajaxian?i=GTSOXqVS" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/review-of-pro-ajax-and-java-frameworks/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Minus(MO)R a.k.a. Let me write JavaScript but help me!</title>
+ <link>http://ajaxian.com/archives/minusmor-aka-let-me-write-javascript-but-help-me</link>
+ <comments>http://ajaxian.com/archives/minusmor-aka-let-me-write-javascript-but-help-me#comments</comments>
+ <pubDate>Mon, 27 Nov 2006 14:03:41 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Library</category>
+ <category>Rails</category>
+ <guid>http://ajaxian.com/archives/minusmor-aka-let-me-write-javascript-but-help-me</guid>
+ <description><![CDATA[ Dan Webb has created two Rails plugins to make RJS even better. He has realised that although for some cases RJS is a great thing, you often do want to just use JavaScript, and it looks really ugly to do this: + + + +page &lt;&lt;'if (someClientSideVariable) {' +page['a'].replace_html :partial =&gt; 'thing' +page &lt;&lt;'} else {' +page['b'].replace_html :partial =&gt; 'thong' +page &lt;&lt;'}' + + + + He first [...]]]></description>
+ <content:encoded><![CDATA[ <p>Dan Webb has created two Rails plugins to make RJS even better. He has realised that although for some cases RJS is a great thing, you often do want to just use JavaScript, and it looks really ugly to do this:</p> + <div class="syntax_hilite"> +<div id="ruby-5"> + <div> +page &lt;&lt;'if (someClientSideVariable) {'<br /> +page['a'].replace_html :partial =&gt; 'thing'<br /> +page &lt;&lt;'} else {'<br /> +page['b'].replace_html :partial =&gt; 'thong'<br /> +page &lt;&lt;'}' +</div> + </div> +</div> + <p>He first came out with <a href="http://svn.danwebb.net/external/rails/plugins/minus_r/trunk/">MinusR</a> which takes of your rjs files and lets you code in JS, but still call out to the ruby style. For example:</p> + <div class="syntax_hilite"> +<div id="javascript-6"> + <div class="javascript"> +<span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">(</span>someClientSideVariable<span style="color:#006600; font-weight:bold;">)</span> <span style="color:#006600; font-weight:bold;">{</span><br /> + $<span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'a'</span><span style="color:#006600; font-weight:bold;">)</span>.<span style="color: #006600;">update</span><span style="color:#006600; font-weight:bold;">(</span>&lt;%=js render<span style="color:#006600; font-weight:bold;">(</span>:partial => <span style="color: #3366CC;">'thing'</span><span style="color:#006600; font-weight:bold;">)</span> %&gt;<span style="color:#006600; font-weight:bold;">)</span>;<br /> +<span style="color:#006600; font-weight:bold;">}</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color:#006600; font-weight:bold;">{</span><br /> + $<span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'b'</span><span style="color:#006600; font-weight:bold;">)</span>.<span style="color: #006600;">update</span><span style="color:#006600; font-weight:bold;">(</span>&lt;%=js render<span style="color:#006600; font-weight:bold;">(</span>:partial => <span style="color: #3366CC;">'thong'</span><span style="color:#006600; font-weight:bold;">)</span> %&gt;<span style="color:#006600; font-weight:bold;">)</span>;<br /> +<span style="color:#006600; font-weight:bold;">}</span><br /> + </div> + </div> +</div> + <blockquote><p> +MinusR gives you the js helper that calls to_json on any value passed to it so you can drop nicely escaped and formatted data into your script as before. Everyone’s a winner. Well, not quite, I could be going out on a limb here but I really think this is the better way. Go on, give it a go. A bit of javaScript won’t hurt you…. +</p></blockquote> + <p>Then a bunch of people wanted this to be doable, but in a separate file, so Dan created <a href="http://www.danwebb.net/2006/11/24/minusmor-released">MinusMOR</a>, which let's you do the same thing in .ejs files.</p> + <p>It is great to be able to choice your poison, even on a case by case basis, and decide whether JS or Ruby is the ruler. +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=KzOPpBLk"><img src="http://feeds.feedburner.com/~f/ajaxian?i=KzOPpBLk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=tyZWuMpT"><img src="http://feeds.feedburner.com/~f/ajaxian?i=tyZWuMpT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=cYtOaSvj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=cYtOaSvj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=e2UryVSj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=e2UryVSj" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/minusmor-aka-let-me-write-javascript-but-help-me/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Zamzar: Online file conversion</title>
+ <link>http://ajaxian.com/archives/zamzar-online-file-conversion</link>
+ <comments>http://ajaxian.com/archives/zamzar-online-file-conversion#comments</comments>
+ <pubDate>Mon, 27 Nov 2006 13:23:12 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Showcase</category>
+ <guid>http://ajaxian.com/archives/zamzar-online-file-conversion</guid>
+ <description><![CDATA[ Zamzar is a simple, single page ajax application that lets you upload a file and convert it to something else. E.g. + + Make your PDF documents editable by converting them to MS Word + Convert your ITunes (aac) files to mp3 + Upload up to 5 files at a time to convert simultaneously + Take advantage of over 150 different conversion types + + + +]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://www.zamzar.com/">Zamzar</a> is a simple, single page ajax application that lets you upload a file and convert it to something else. E.g.</p> + <ul> + <li>Make your PDF documents editable by converting them to MS Word</li> + <li>Convert your ITunes (aac) files to mp3</li> + <li>Upload up to 5 files at a time to convert simultaneously</li> + <li>Take advantage of over 150 different conversion types</li> + </ul> + <p><a href="http://www.zamzar.com/"><img src="http://ajaxian.com/wp-content/images/zamzar.png" alt="ZamZar" border="0" width="778" height="549"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=2bVY3cIM"><img src="http://feeds.feedburner.com/~f/ajaxian?i=2bVY3cIM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=YNCLGcXg"><img src="http://feeds.feedburner.com/~f/ajaxian?i=YNCLGcXg" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=qgnycv1k"><img src="http://feeds.feedburner.com/~f/ajaxian?i=qgnycv1k" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=wnoUHPGJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=wnoUHPGJ" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/zamzar-online-file-conversion/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>CSS Evolution</title>
+ <link>http://ajaxian.com/archives/css-evolution</link>
+ <comments>http://ajaxian.com/archives/css-evolution#comments</comments>
+ <pubDate>Sat, 25 Nov 2006 17:12:26 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Fun</category>
+ <category>CSS</category>
+ <guid>http://ajaxian.com/archives/css-evolution</guid>
+ <description><![CDATA[ + Evolution of the web in real-time. I hope you are having a good weekend (a Thanksgiving one for the US folk). + +]]></description>
+ <content:encoded><![CDATA[ <p><img src="http://mboffin.com/stuff/designline-openair.gif" width="512" height="384" border="0" /></p> + <p>Evolution of the web in real-time. I hope you are having a good weekend (a Thanksgiving one for the US folk). +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=0Oe2jHNg"><img src="http://feeds.feedburner.com/~f/ajaxian?i=0Oe2jHNg" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=dnGk0cRj"><img src="http://feeds.feedburner.com/~f/ajaxian?i=dnGk0cRj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=Tt4f4R3d"><img src="http://feeds.feedburner.com/~f/ajaxian?i=Tt4f4R3d" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=G46q0PCO"><img src="http://feeds.feedburner.com/~f/ajaxian?i=G46q0PCO" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/css-evolution/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Poly9’s Polyvalent Javascript URL Parser</title>
+ <link>http://ajaxian.com/archives/poly9s-polyvalent-javascript-url-parser</link>
+ <comments>http://ajaxian.com/archives/poly9s-polyvalent-javascript-url-parser#comments</comments>
+ <pubDate>Sat, 25 Nov 2006 15:00:34 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Library</category>
+ <guid>http://ajaxian.com/archives/poly9s-polyvalent-javascript-url-parser</guid>
+ <description><![CDATA[ Denis Laprise and the Poly9 Group needed a robust URL parser in JavaScript, so they created the Polyvalent Javascript URL Parser. + + + +var p = new Poly9.URLParser('http://user:password@poly9.com/pathname?arguments=1#fragment'); +p.getHost() == 'poly9.com'; +p.getProtocol() == 'http'; +p.getPathname() == '/pathname'; +p.getQuerystring() == 'arguments=1'; +p.getFragment() == 'fragment'; +p.getUsername() == 'user'; +p.getPassword() == 'password'; + p.setURL('another.url.com'); +p.getHost() == 'another.url.com'; +p.getProtocol() == ''; + p.setURL('dsdsad'); // throws an exception +  + + + This smells like a Java group writing JavaScript to [...]]]></description>
+ <content:encoded><![CDATA[ <p>Denis Laprise and the Poly9 Group needed a robust URL parser in JavaScript, so they <a href="https://code.poly9.com/trac/wiki/URLParser">created the Polyvalent Javascript URL Parser</a>.</p> + <div class="syntax_hilite"> +<div id="javascript-8"> + <div class="javascript"> +<span style="color: #003366; font-weight: bold;">var</span> p = <span style="color: #003366; font-weight: bold;">new</span> Poly9.<span style="color: #006600;">URLParser</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'http://user:password@poly9.com/pathname?arguments=1#fragment'</span><span style="color:#006600; font-weight:bold;">)</span>;<br /> +p.<span style="color: #006600;">getHost</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'poly9.com'</span>;<br /> +p.<span style="color: #006600;">getProtocol</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'http'</span>;<br /> +p.<span style="color: #006600;">getPathname</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'/pathname'</span>;<br /> +p.<span style="color: #006600;">getQuerystring</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'arguments=1'</span>;<br /> +p.<span style="color: #006600;">getFragment</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'fragment'</span>;<br /> +p.<span style="color: #006600;">getUsername</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'user'</span>;<br /> +p.<span style="color: #006600;">getPassword</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'password'</span>;</p> + <p>p.<span style="color: #006600;">setURL</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'another.url.com'</span><span style="color:#006600; font-weight:bold;">)</span>;<br /> +p.<span style="color: #006600;">getHost</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">'another.url.com'</span>;<br /> +p.<span style="color: #006600;">getProtocol</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> == <span style="color: #3366CC;">''</span>;</p> + <p>p.<span style="color: #006600;">setURL</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'dsdsad'</span><span style="color:#006600; font-weight:bold;">)</span>; <span style="color: #009900; font-style: italic;">// throws an exception</span><br /> + </div> + </div> +</div> + <p>This smells like a Java group writing JavaScript to me with the camelCase and thus p.getUsername() instead of p.username.</p> + <p>You can check out <a href="https://code.poly9.com/trac/browser/urlparser/urlparser.js?format=txt">the implementation</a> and the <a href="https://code.poly9.com/files/urlparser-0.1.zip">test suite (zip)</a>. +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=ZVMtMQRn"><img src="http://feeds.feedburner.com/~f/ajaxian?i=ZVMtMQRn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=TTsAAACX"><img src="http://feeds.feedburner.com/~f/ajaxian?i=TTsAAACX" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=LDXEbvr2"><img src="http://feeds.feedburner.com/~f/ajaxian?i=LDXEbvr2" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=Uk6myWFs"><img src="http://feeds.feedburner.com/~f/ajaxian?i=Uk6myWFs" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/poly9s-polyvalent-javascript-url-parser/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>DOMContentLoaded.Next</title>
+ <link>http://ajaxian.com/archives/domcontentloadednext</link>
+ <comments>http://ajaxian.com/archives/domcontentloadednext#comments</comments>
+ <pubDate>Sat, 25 Nov 2006 14:29:00 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Tip</category>
+ <guid>http://ajaxian.com/archives/domcontentloadednext</guid>
+ <description><![CDATA[ Andrea Giammarchi has taken the work of Dean Edwards, Mark Wubben, and Paul Sowden to create his DOMContentLoaded Final Solution. + The work comes with a test page for http and https, and is documented in this function: + + + +function onContent(callback){ // (C) webreflection.blogspot.com +    // [please note that this code doesn't work] +  // private scope variable +  var IEStringToWrite =  // [...]]]></description>
+ <content:encoded><![CDATA[ <p>Andrea Giammarchi has taken the work of <a href="http://dean.edwards.name/weblog/2005/09/busted/">Dean</a> <a href="http://dean.edwards.name/weblog/2006/06/again/">Edwards</a>, <a href="http://novemberborn.net/colophon">Mark Wubben</a>, and <a href="http://delete.me.uk/">Paul Sowden</a> to create <a href="http://www.3site.eu/jstests/onContent/final.html">his DOMContentLoaded Final Solution</a>.</p> + <p>The work comes with a test page for <a href="http://www.3site.eu/jstests/onContent/final.html">http</a> and <a href="https://server3.phpsoft.it:8111/antrea/">https</a>, and is documented in this function:</p> + <div class="syntax_hilite"> +<div id="javascript-10"> + <div class="javascript"> +<span style="color: #003366; font-weight: bold;">function</span> onContent<span style="color:#006600; font-weight:bold;">(</span>callback<span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span> <span style="color: #009900; font-style: italic;">// (C) webreflection.blogspot.com</span><br /> + <span style="color: #009900; font-style: italic;">// [please note that this code doesn't work]</span></p> + <p> <span style="color: #009900; font-style: italic;">// private scope variable</span></p> + <p> <span style="color: #003366; font-weight: bold;">var</span> IEStringToWrite = <span style="color: #009900; font-style: italic;">// this is IE dedicated string</span></p> + <p> <span style="color: #3366CC;">"<script defer src='//:' onreadystatechange='<br /> + (function(element){<br /> + <br /> + // if readystate is complete<br /> + if(element.readyState === "</span>complete<span style="color: #3366CC;">")</p> + <p> // call the global variable<br /> + window.__onContent__();<br /> + })(this);<br /> + '></script>"</span>;</p> + <p> <span style="color: #009900; font-style: italic;">// the above string is necessary to use onreadystatechange property</span><br /> + <span style="color: #009900; font-style: italic;">// with an undefined page. In this way IE tell us the readyState</span><br /> + <span style="color: #009900; font-style: italic;">// of the current document</span></p> + <p> <span style="color: #009900; font-style: italic;">// to call callback function IE need a global scope variable</span><br /> + <span style="color: #009900; font-style: italic;">// this variable could call one or more callback</span><br /> + <span style="color: #009900; font-style: italic;">// then if it's already created we need to call the old callback</span><br /> + <span style="color: #009900; font-style: italic;">// then this new callback</span><br /> + window.__onContent__ = <span style="color:#006600; font-weight:bold;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span>oldCallback<span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><br /> + <br /> + <span style="color: #009900; font-style: italic;">// returns a function that will delete __onContent__</span><br /> + <span style="color: #009900; font-style: italic;">// to remove multiple callbacks with different </span><br /> + <span style="color: #009900; font-style: italic;">// events and different ways for each browser</span></p> + <p> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span></p> + <p> <span style="color: #009900; font-style: italic;">// clear __onContent__ as generic function</span><br /> + window.__onContent__ = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><span style="color:#006600; font-weight:bold;">}</span>;<br /> + <br /> + <br /> + <span style="color: #009900; font-style: italic;">// checks if oldCallback isn't null or undefined</span><br /> + <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">(</span>oldCallback<span style="color:#006600; font-weight:bold;">)</span><br /> + oldCallback<span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span>; <span style="color: #009900; font-style: italic;">// call them to preserve the right order</span></p> + <p> callback<span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span>; <span style="color: #009900; font-style: italic;">// call this scope callback function </span><br /> + <span style="color: #009900; font-style: italic;">// (sent calling onContent)</span><br /> + <span style="color:#006600; font-weight:bold;">}</span><br /> + <br /> + <span style="color:#006600; font-weight:bold;">}</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">(</span>window.__onContent__<span style="color:#006600; font-weight:bold;">)</span>; <span style="color: #009900; font-style: italic;">// undefined if is the first time we use __onContent__</span></p> + <p> <span style="color: #009900; font-style: italic;">// __onContent__ is my function to use as callback</span></p> + <p> <span style="color: #009900; font-style: italic;">// I need to add this function as event</span></p> + <p> <span style="color: #009900; font-style: italic;">// Opera 9 and FireFox both support DOMContentLoaded as well as </span><br /> + <span style="color: #009900; font-style: italic;">// addEventListener document method</span><br /> + <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">(</span>document.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">)</span><br /> + document.<span style="color: #006600;">addEventListener</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">"DOMContentLoaded"</span>, __onContent__, <span style="color: #003366; font-weight: bold;">false</span><span style="color:#006600; font-weight:bold;">)</span>;</p> + <p> <span style="color: #009900; font-style: italic;">// if some browser supports addEventListener but doesn't support DOMContentLoaded </span><br /> + <span style="color: #009900; font-style: italic;">// event I don't need to care about that because this event will never be fired</span></p> + <p> <span style="color: #009900; font-style: italic;">// at the same time if Safari or KDE one day will support DOMContentLoaded </span><br /> + <span style="color: #009900; font-style: italic;">// I prefere use this dedicated in-core</span><br /> + <span style="color: #009900; font-style: italic;">// event instead of next trick that's quite horrible but works with Safari, </span><br /> + <span style="color: #009900; font-style: italic;">// KDE as Opera 8.5 and lower too</span></p> + <p> <span style="color: #009900; font-style: italic;">// that's why I don't use an else if but an if ... because the first time </span><br /> + <span style="color: #009900; font-style: italic;">// event will be fired __onContent__ </span><br /> + <span style="color: #009900; font-style: italic;">// became an empty function ... then calling them twice is not a problem</span></p> + <p> <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">(</span><br /> + <span style="color: #009900; font-style: italic;">// Safari and KDE</span><br /> + <span style="color: #0066FF;">/WebKit|Khtml/i</span>.<span style="color: #006600;">test</span><span style="color:#006600; font-weight:bold;">(</span>navigator.<span style="color: #006600;">userAgent</span><span style="color:#006600; font-weight:bold;">)</span> ||</p> + <p> <span style="color: #009900; font-style: italic;">// Opera less than 9</span><br /> + <span style="color:#006600; font-weight:bold;">(</span>window.<span style="color: #006600;">opera</span> && parseInt<span style="color:#006600; font-weight:bold;">(</span>window.<span style="color: #006600;">opera</span>.<span style="color: #006600;">version</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">)</span>&lt;<span style="color:#800000;">9</span><span style="color:#006600; font-weight:bold;">)</span><br /> + <span style="color:#006600; font-weight:bold;">)</span><br /> + <span style="color: #009900; font-style: italic;">// runtime anonymous function</span><br /> + <span style="color:#006600; font-weight:bold;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span></p> + <p> <span style="color: #009900; font-style: italic;">// checks if document.readyState is loaded or complete</span><br /> + <span style="color: #0066FF;">/loaded|complete/</span>.<span style="color: #006600;">test</span><span style="color:#006600; font-weight:bold;">(</span>document.<span style="color: #006600;">readyState</span><span style="color:#006600; font-weight:bold;">)</span> ?</p> + <p> <span style="color: #009900; font-style: italic;">// then call __onContent__ , stopping internal loop</span><br /> + window.__onContent__<span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span> :</p> + <p> <span style="color: #009900; font-style: italic;">// or loops itself with the faster timeout</span><br /> + setTimeout<span style="color:#006600; font-weight:bold;">(</span>arguments.<span style="color: #006600;">callee</span>, <span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">)</span>; <br /> + <span style="color:#006600; font-weight:bold;">}</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span>;</p> + <p> <span style="color: #009900; font-style: italic;">// at this point I've setted the DOMContentLoaded event for every browser</span><br /> + <span style="color: #009900; font-style: italic;">// but not for Inernet Explorer.</span><br /> + <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color:#006600; font-weight:bold;">(</span><span style="color: #0066FF;">/MSIE/i</span>.<span style="color: #006600;">test</span><span style="color:#006600; font-weight:bold;">(</span>navigator.<span style="color: #006600;">userAgent</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">)</span></p> + <p> <span style="color: #009900; font-style: italic;">// I can write dedicated string</span><br /> + document.<span style="color: #006600;">write</span><span style="color:#006600; font-weight:bold;">(</span>IEStringToWrite<span style="color:#006600; font-weight:bold;">)</span>;<br /> +<span style="color:#006600; font-weight:bold;">}</span>;<br /> + </div> + </div> +</div> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=luo1Gwyw"><img src="http://feeds.feedburner.com/~f/ajaxian?i=luo1Gwyw" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=aQvBKJJ3"><img src="http://feeds.feedburner.com/~f/ajaxian?i=aQvBKJJ3" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=TJtOXhwL"><img src="http://feeds.feedburner.com/~f/ajaxian?i=TJtOXhwL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=LNNtLH7H"><img src="http://feeds.feedburner.com/~f/ajaxian?i=LNNtLH7H" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/domcontentloadednext/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Using the Eclipse AJAX Toolkit Framework (ATF) Webinar</title>
+ <link>http://ajaxian.com/archives/using-the-eclipse-ajax-toolkit-framework-atf-webinar</link>
+ <comments>http://ajaxian.com/archives/using-the-eclipse-ajax-toolkit-framework-atf-webinar#comments</comments>
+ <pubDate>Sat, 25 Nov 2006 04:04:00 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Presentation</category>
+ <guid>http://ajaxian.com/archives/using-the-eclipse-ajax-toolkit-framework-atf-webinar</guid>
+ <description><![CDATA[ We don't normally post webinars, but thought "what the hell it's Friday". + On November 30, the Eclipse foundation will be hosting a 1 hour webinar titled Using the Eclipse Ajax Toolkit Framework (ATF). + Eclipse ATF provides exemplary tools for creating and debugging Ajax applications. These tools include enhanced JavaScript editing features such as edit-time syntax checking, [...]]]></description>
+ <content:encoded><![CDATA[ <p>We don't normally post webinars, but thought "what the hell it's Friday".</p> + <p>On November 30, the Eclipse foundation will be hosting a 1 hour webinar titled <a href="http://www.eclipse.org/community/webinars2006.php">Using the Eclipse Ajax Toolkit Framework (ATF)</a>.</p> + <p>Eclipse ATF provides exemplary tools for creating and debugging Ajax applications. These tools include enhanced JavaScript editing features such as edit-time syntax checking, an embedded DOM browser, CSS Tools, JavaScript debugger, a JavaScript console, and an embedded Mozilla web browser. This webinar will demonstrate how to use ATF to create, debug, and deploy an Ajax application on both Apache and J2EE servers.</p> + <p>Register by emailing <a href="mailto:webinar-atf@eclipse.org">webinar-atf@eclipse.org</a></p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=Qh1EpBSt"><img src="http://feeds.feedburner.com/~f/ajaxian?i=Qh1EpBSt" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=SHKUMbcJ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=SHKUMbcJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=xZxME2vY"><img src="http://feeds.feedburner.com/~f/ajaxian?i=xZxME2vY" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=ZLlrYLtO"><img src="http://feeds.feedburner.com/~f/ajaxian?i=ZLlrYLtO" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/using-the-eclipse-ajax-toolkit-framework-atf-webinar/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Another trick to allow Array subclasses</title>
+ <link>http://ajaxian.com/archives/another-trick-to-allow-array-subclasses</link>
+ <comments>http://ajaxian.com/archives/another-trick-to-allow-array-subclasses#comments</comments>
+ <pubDate>Fri, 24 Nov 2006 15:59:15 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Tip</category>
+ <guid>http://ajaxian.com/archives/another-trick-to-allow-array-subclasses</guid>
+ <description><![CDATA[ Dean Edwards talked about his hack that got us the ability to subclass the Array object in JavaScript. + Hedger Wang has a new hack that uses window.createPopup instead of an iframe to for IE to fix some issues. + If you take a view source to see what is in there, you get the gem: + + + +;(function(){ +        [...]]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://dean.edwards.name/weblog/2006/11/hooray/">Dean Edwards</a> talked about his hack that got us the ability to subclass the Array object in JavaScript.</p> + <p><a href="http://www.hedgerwow.com/360/dhtml/js-array2.html">Hedger Wang has a new hack</a> that uses <a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createpopup.asp">window.createPopup</a> instead of an iframe to for IE to fix some issues.</p> + <p>If you take a view source to see what is in there, you get the gem:</p> + <div class="syntax_hilite"> +<div id="javascript-12"> + <div class="javascript"> +;<span style="color:#006600; font-weight:bold;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><br /> + <br /> + <span style="color: #000066; font-weight: bold;">if</span><span style="color:#006600; font-weight:bold;">(</span>!window.<span style="color: #006600;">createPopup</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><span style="color: #000066; font-weight: bold;">return</span><span style="color:#006600; font-weight:bold;">}</span>;<br /> + <br /> + <span style="color: #003366; font-weight: bold;">var</span> fs = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><br /> + <br /> + <span style="color: #0066FF;">/==/</span><br /> + <span style="color: #003366; font-weight: bold;">var</span> Array2 = parent.<span style="color: #006600;">Array2</span> ;<br /> + <span style="color: #003366; font-weight: bold;">var</span> p1 = Array.<span style="color: #006600;">prototype</span> ;<br /> + <span style="color: #003366; font-weight: bold;">var</span> p2 = Array2.<span style="color: #006600;">prototype</span>;<br /> + <span style="color: #000066; font-weight: bold;">for</span><span style="color:#006600; font-weight:bold;">(</span>i <span style="color: #000066; font-weight: bold;">in</span> p2 <span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><br /> + p1<span style="color:#006600; font-weight:bold;">[</span>i<span style="color:#006600; font-weight:bold;">]</span> = p2<span style="color:#006600; font-weight:bold;">[</span>i<span style="color:#006600; font-weight:bold;">]</span>;<br /> + <span style="color:#006600; font-weight:bold;">}</span>;<br /> + parent.<span style="color: #006600;">Array2</span> = Array;<br /> + parent.<span style="color: #006600;">document</span>.<span style="color: #006600;">title</span> = <span style="color: #3366CC;">'Array2 is ready'</span>;<span style="color: #009900; font-style: italic;">/*debug msg*/</span><br /> + <span style="color: #0066FF;">/==/</span><br /> + <span style="color:#006600; font-weight:bold;">}</span>;<br /> + <br /> + document.<span style="color: #006600;">title</span> = <span style="color: #3366CC;">'Prepare Array2'</span>;<span style="color: #009900; font-style: italic;">/*debug msg*/</span></p> + <p> fs = <span style="color:#006600; font-weight:bold;">(</span>fs + <span style="color: #3366CC;">''</span><span style="color:#006600; font-weight:bold;">)</span>.<span style="color: #006600;">split</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">'/==/'</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">[</span><span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">]</span>;<br /> + window.<span style="color: #006600;">createPopup</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span>.<span style="color: #006600;">document</span>.<span style="color: #006600;">body</span>.<span style="color: #006600;">innerHTML</span> = <span style="color: #3366CC;">'<img src="null" onerror="'</span> + fs + <span style="color: #3366CC;">'" />'</span>;<br /> + <br /> +<span style="color:#006600; font-weight:bold;">}</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span>;</p> + <p><span style="color: #003366; font-weight: bold;">var</span> Array2 = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><span style="color:#006600; font-weight:bold;">}</span>;<br /> + Array2.<span style="color: #006600;">prototype</span> = <span style="color: #003366; font-weight: bold;">new</span> Array;<br /> + Array2.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">bar</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color:#006600; font-weight:bold;">(</span><span style="color:#006600; font-weight:bold;">)</span><span style="color:#006600; font-weight:bold;">{</span><br /> + <span style="color: #000066;">alert</span><span style="color:#006600; font-weight:bold;">(</span><span style="color: #3366CC;">"this.bar() --> This.Length="</span> + <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">length</span> <span style="color:#006600; font-weight:bold;">)</span>;<br /> + <span style="color:#006600; font-weight:bold;">}</span><br /> + </div> + </div> +</div> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=SCY03YAX"><img src="http://feeds.feedburner.com/~f/ajaxian?i=SCY03YAX" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=sBDwsM9P"><img src="http://feeds.feedburner.com/~f/ajaxian?i=sBDwsM9P" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=dlKtpJWr"><img src="http://feeds.feedburner.com/~f/ajaxian?i=dlKtpJWr" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=HXHKOiMI"><img src="http://feeds.feedburner.com/~f/ajaxian?i=HXHKOiMI" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/another-trick-to-allow-array-subclasses/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Dropboks: File Storage on One Page</title>
+ <link>http://ajaxian.com/archives/dropboks-file-storage-on-one-page</link>
+ <comments>http://ajaxian.com/archives/dropboks-file-storage-on-one-page#comments</comments>
+ <pubDate>Fri, 24 Nov 2006 15:51:41 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Prototype</category>
+ <category>Showcase</category>
+ <guid>http://ajaxian.com/archives/dropboks-file-storage-on-one-page</guid>
+ <description><![CDATA[ Dropboks is a single page application build on Prototype and friends, that allows you to simply upload files for safe keeping. + The application is ad free, and survives on user donations. They do a good job at letting you use it pre-signup, and giving good info via tooltips. + + +]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://www.dropboks.com/">Dropboks</a> is a single page application build on Prototype and friends, that allows you to simply upload files for safe keeping.</p> + <p>The application is ad free, and survives on user donations. They do a good job at letting you use it pre-signup, and giving good info via tooltips.</p> + <p><a href="http://www.dropboks.com/"><img src="http://ajaxian.com/wp-content/images/dropboks.png" alt="Dropboks" border="0" width="491" height="447"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=7bnp189c"><img src="http://feeds.feedburner.com/~f/ajaxian?i=7bnp189c" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=IvtaWoMQ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=IvtaWoMQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=b96Y4b2A"><img src="http://feeds.feedburner.com/~f/ajaxian?i=b96Y4b2A" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=ZVgVpc8A"><img src="http://feeds.feedburner.com/~f/ajaxian?i=ZVgVpc8A" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/dropboks-file-storage-on-one-page/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Spelling Cow: JS Spell Checker</title>
+ <link>http://ajaxian.com/archives/spelling-cow-js-spell-checker</link>
+ <comments>http://ajaxian.com/archives/spelling-cow-js-spell-checker#comments</comments>
+ <pubDate>Fri, 24 Nov 2006 15:46:11 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <guid>http://ajaxian.com/archives/spelling-cow-js-spell-checker</guid>
+ <description><![CDATA[ Spelling Cow allows you add a script tag, and spell check is enabled on your website. There are also some variables you can tweak too if advanced features are needed. + This means that you can add spell checking to your applications, but as the latest browsers have added inline spell check, is there use to it? + + +]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://www.spellingcow.com/">Spelling Cow</a> allows you add a script tag, and spell check is enabled on your website. There are also some variables you can tweak too if advanced features are needed.</p> + <p>This means that you can add spell checking to your applications, but as the latest browsers have added inline spell check, is there use to it?</p> + <p><a href="http://www.spellingcow.com/"><img src="http://ajaxian.com/wp-content/images/spellingcow.png" alt="Spelling Cow" border="0" width="438" height="213"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=dBmR5JBn"><img src="http://feeds.feedburner.com/~f/ajaxian?i=dBmR5JBn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=GL67PTiz"><img src="http://feeds.feedburner.com/~f/ajaxian?i=GL67PTiz" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=PM8SsmlP"><img src="http://feeds.feedburner.com/~f/ajaxian?i=PM8SsmlP" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=038oiFok"><img src="http://feeds.feedburner.com/~f/ajaxian?i=038oiFok" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/spelling-cow-js-spell-checker/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>CSS Tab Designer</title>
+ <link>http://ajaxian.com/archives/css-tab-designer</link>
+ <comments>http://ajaxian.com/archives/css-tab-designer#comments</comments>
+ <pubDate>Fri, 24 Nov 2006 15:40:05 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>CSS</category>
+ <guid>http://ajaxian.com/archives/css-tab-designer</guid>
+ <description><![CDATA[ Now we are getting niche. A tool that lets you design CSS tabs: + With the CSS Tab Designer, you can: + + Quickly design your list visually. + Choose from a variety of styles/colors (60+ different designs/colors supported). + Generate strict xhtml compliant code. + + + +]]></description>
+ <content:encoded><![CDATA[ <p>Now we are getting niche. A tool that lets you <a href="http://www.highdots.com/css-tab-designer/">design CSS tabs</a>:</p> + <p>With the CSS Tab Designer, you can: </p> + <ul> + <li>Quickly design your list visually.</li> + <li>Choose from a variety of styles/colors (60+ different designs/colors supported).</li> + <li>Generate strict xhtml compliant code.</li> + </ul> + <p><a href="http://www.highdots.com/css-tab-designer/"><img src="http://www.highdots.com/static/css-list/images/vertical-tabs.png" border="0" /></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=J8dJMlWf"><img src="http://feeds.feedburner.com/~f/ajaxian?i=J8dJMlWf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=3ahtUcPZ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=3ahtUcPZ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=rLuj7mAO"><img src="http://feeds.feedburner.com/~f/ajaxian?i=rLuj7mAO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=S5YYTws3"><img src="http://feeds.feedburner.com/~f/ajaxian?i=S5YYTws3" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/css-tab-designer/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Open-jACOB Draw2D</title>
+ <link>http://ajaxian.com/archives/open-jacob-draw2d</link>
+ <comments>http://ajaxian.com/archives/open-jacob-draw2d#comments</comments>
+ <pubDate>Thu, 23 Nov 2006 16:44:35 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Library</category>
+ <category>Showcase</category>
+ <guid>http://ajaxian.com/archives/open-jacob-draw2d</guid>
+ <description><![CDATA[ Open-jACOB Draw2D is a JavaScript library that allows you to create drawings and diagrams. + The User interface allows interactive drawing by using your standard browser. +No additional software; no third party plug ins. Just run it and use it. + Open-jACOB Draw2D is the graph component of the Open-jACOB online +Workflow editor. The purpose of this experiment is to see [...]]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://www.openjacob.org/draw2d.html">Open-jACOB Draw2D</a> is a JavaScript library that allows you to create drawings and diagrams.</p> + <p>The User interface allows interactive drawing by using your standard browser.<br /> +No additional software; no third party plug ins. Just run it and use it.</p> + <p>Open-jACOB Draw2D is the graph component of the Open-jACOB online<br /> +Workflow editor. The purpose of this experiment is to see if a Visio-type workflow<br /> +editor tool could be developed in a web browser - It is possible.</p> + <p>Check out an <a href="http://www.openjacob.org/draw2d/simple_interactive/index.html">interactive demo</a>.</p> + <p><a href="http://www.openjacob.org/draw2d.html"><img src="http://www.openjacob.org/images/draw2d/screen1.png" border="0" width="414" height="215" /></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=Yd5t6AMQ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=Yd5t6AMQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=2P9Evaik"><img src="http://feeds.feedburner.com/~f/ajaxian?i=2P9Evaik" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=GexsRwE8"><img src="http://feeds.feedburner.com/~f/ajaxian?i=GexsRwE8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=IySCRpjz"><img src="http://feeds.feedburner.com/~f/ajaxian?i=IySCRpjz" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/open-jacob-draw2d/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Google Pages Adds Nice Image Editing</title>
+ <link>http://ajaxian.com/archives/google-pages-adds-nice-image-editing</link>
+ <comments>http://ajaxian.com/archives/google-pages-adds-nice-image-editing#comments</comments>
+ <pubDate>Thu, 23 Nov 2006 16:15:04 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Showcase</category>
+ <category>Google</category>
+ <category>UI</category>
+ <guid>http://ajaxian.com/archives/google-pages-adds-nice-image-editing</guid>
+ <description><![CDATA[ When I heard about JotSpot heading to the Googleplex I was excited to know that Abe Fettig (Jot) would be teaming up with the brains at Google Pages, and I can't wait to see what happens in the world of WYSIWYG editing tools. + Google Pages just released a few features, and one of them is an [...]]]></description>
+ <content:encoded><![CDATA[ <p>When I heard about JotSpot heading to the Googleplex I was excited to know that Abe Fettig (Jot) would be teaming up with the brains at Google Pages, and I can't wait to see what happens in the world of WYSIWYG editing tools.</p> + <p><a href="http://pages.google.com/">Google Pages</a> just released a few features, and one of them is an improved process for working with images.</p> + <p>Firstly, the way you get photos up is simple and clean, but when when you have an image, you can click on it and you are shown a bunch of tools that allow you to manipulate the image inline, right there on the page.</p> + <p><a href="http://pages.google.com/"><img src="http://ajaxian.com/wp-content/images/googlepagesimageedit.png" alt="Google Pages Image Editing" border="0" width="428" height="418"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=ixQAR1Dv"><img src="http://feeds.feedburner.com/~f/ajaxian?i=ixQAR1Dv" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=i8aOiI8S"><img src="http://feeds.feedburner.com/~f/ajaxian?i=i8aOiI8S" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=P5vv2xOQ"><img src="http://feeds.feedburner.com/~f/ajaxian?i=P5vv2xOQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=L0n3Kku6"><img src="http://feeds.feedburner.com/~f/ajaxian?i=L0n3Kku6" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/google-pages-adds-nice-image-editing/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>qooxdoo 0.6.2 Released</title>
+ <link>http://ajaxian.com/archives/qooxdoo-062-released</link>
+ <comments>http://ajaxian.com/archives/qooxdoo-062-released#comments</comments>
+ <pubDate>Thu, 23 Nov 2006 15:39:07 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Library</category>
+ <guid>http://ajaxian.com/archives/qooxdoo-062-released</guid>
+ <description><![CDATA[ qooxdoo has a new release that adds support for Webkit. + +As mentioned above and already announced in our developer blog, qooxdoo now includes support for WebKit. We expect to fully support the next major version Safari 3.0 which will be based on the current development of WebKit. There is only limited support for Safari in its [...]]]></description>
+ <content:encoded><![CDATA[ <p><a href="http://news.qooxdoo.org/qooxdoo-062-released">qooxdoo has a new release that adds support for Webkit</a>.</p> + <blockquote><p> +As mentioned above and already announced in our developer blog, qooxdoo now includes support for WebKit. We expect to fully support the next major version Safari 3.0 which will be based on the current development of WebKit. There is only limited support for Safari in its current version 2.0.4, though. Reason is, that Safari 2.0 still has many bugs that can hardly be worked around. Luckily, many of those bugs are already fixed in the nightly builds of WebKit. Besides the various bugs, Safari 2.0's JavaScript engine and its execution speed is not competitive with respect to the latest versions of the other major browsers (Firefox 2.0, IE7, Opera 9). Good news is, that the current builds of WebKit are tremendeously faster than Safari 2.0, approximately by a factor of 7-8 for a typical qooxdoo demo. +</p></blockquote> + <p>Check out the <a href="http://qooxdoo.org/about/release_notes">release notes</a> for full details on changes in this release.</p> + <p>Some of them are:</p> + <ul> + <li>Made qooxdoo completely XHTML compatible. Replaced all uppercase tag names with their lowercase variant. </li> + <li>Improved NativeWindow to support the querying of the load state. Added events for “load” and “close”.</li> + <li>Modified XmlHttpRequest and related APIs to <a href="http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx">respect the latest suggestions from Microsoft.</a></li> + <li>Added IframeManager to manage visible iframes in order to protect the application events of the “surrounding” document from getting interrupted while switching document context (particularly drag & drop over embedded iframes)</li> + <li>Added Resizer widget to allow of customization regarding the dimensions of any widget by the user.</li> + </ul> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=tfn0qIAh"><img src="http://feeds.feedburner.com/~f/ajaxian?i=tfn0qIAh" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=QJRQS3cR"><img src="http://feeds.feedburner.com/~f/ajaxian?i=QJRQS3cR" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=HSSmg2P1"><img src="http://feeds.feedburner.com/~f/ajaxian?i=HSSmg2P1" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=uSZsJs68"><img src="http://feeds.feedburner.com/~f/ajaxian?i=uSZsJs68" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/qooxdoo-062-released/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Lollygag: Latest non-Atlas .NET Framework</title>
+ <link>http://ajaxian.com/archives/lollygag-latest-non-atlas-net-framework</link>
+ <comments>http://ajaxian.com/archives/lollygag-latest-non-atlas-net-framework#comments</comments>
+ <pubDate>Thu, 23 Nov 2006 14:00:50 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>JavaScript</category>
+ <category>Library</category>
+ <category>Toolkit</category>
+ <category>.NET</category>
+ <guid>http://ajaxian.com/archives/lollygag-latest-non-atlas-net-framework</guid>
+ <description><![CDATA[ The Lollygag framework is a new Ajax framework for .NET. + As Steve the author put it: + +We attended the first Ajax Experience conference in San Francisco and we got super excited about the potential for building Ajax applications. Since we have a Microsoft .NET background, we planned to start building Ajax applications using Microsoft’s Atlas framework. However, [...]]]></description>
+ <content:encoded><![CDATA[ <p>The <a href="http://lollygagframework.com/">Lollygag framework</a> is a new Ajax framework for .NET.</p> + <p>As Steve the author put it:</p> + <blockquote><p> +We attended the first Ajax Experience conference in San Francisco and we got super excited about the potential for building Ajax applications. Since we have a Microsoft .NET background, we planned to start building Ajax applications using Microsoft’s Atlas framework. However, we quickly encountered several serious issues with Atlas. Doing simple things in Atlas, such as database access and form validation, turned out to be really difficult. We were also disappointed to discover that Microsoft has no plans to support its client-side Atlas framework in the immediate future.</p> + <p>We built the Lollygag framework in order to build true Ajax applications in the .NET environment. We wanted to build single page Web applications that never perform postbacks. All updates are performed through Ajax calls to the web server. +</p></blockquote> + <p><b>Features</b></p> + <ul> + <li>Powerful Widget Framework: The Lollygag framework includes a rich set of client-side widgets that you can use to display database data, perform form validation, and create rich animations. You declare widgets in a page in exactly the same way as you declare HTML tags.</li> + <li>Autocomplete Support: When you declare Lollygag widgets in a page, you get full autocomplete support while you type. To get autocomplete support, you must use an XML aware development environment such as Microsoft Visual Studio .NET.</li> + <li>Declarative Database Access: Accessing database data with the Lollygag framework is easy. You can bind client-side widgets directly to data exposed by a database or you can bind widgets to data exposed by a business object.</li> + <li>Secure Form Validation: When taking advantage of the Lollygag framework, you specify how a form field is validated only once. The validation is automatically applied on both the server and the client. Unlike other frameworks that only provide validation on the client, the Lollygag framework prevents malicious users from bypassing client-side validation and submitting data directly to the server.</li> + <li>Rich Animation Framework: Lollygag includes an entire animation framework. You can take advantage of animations to create different effects such as fades and wipes.</li> + <li>Cross-Browser Support: The full Lollygag framework works on the latest versions of Internet Explorer, Firefox, Safari, and Opera.</li> + <li>Automatic JavaScript Compression: The Lollygag framework compresses all JavaScript sent to the browser automatically. Any custom JavaScript code that you write as a developer is also compressed automatically.</li> + <li>Powered by .NET: The server-side portion of Lollygag is built on the Microsoft .NET 2.0 Framework. You can build server-side business objects using standard .NET languages such as C# and VB.NET. Lollygag client-side widgets can consume data exposed through server-side objects.</li> + </ul> + <p><b>Hello World</b></p> + <div class="syntax_hilite"> +<div id="xml-14"> + <div class="xml"> +<span style="color: #009900;"><span style="font-weight: bold; color: black;"><</span>?xml <span style="color: #000066;">version</span>=<span style="color: #ff0000;">"1.0"</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">"utf-8"</span> ?<span style="font-weight: bold; color: black;">></span></span><br /> +<span style="color: #009900;"><span style="font-weight: bold; color: black;"><</span>?xml-stylesheet <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/xsl"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"/lollygagSite/lollygagframework/0_1/lollygag.xsl"</span>?<span style="font-weight: bold; color: black;">></span></span><br /> +<span style="color: #009900;"><span style="font-weight: bold; color: black;"><lolly</span> :application <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"Hello World"</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">"http://www.w3.org/1999/xhtml"</span> xmlns:<span style="color: #000066;">lolly</span>=<span style="color: #ff0000;">"http://lollygagframework.com/core"</span><span style="font-weight: bold; color: black;">></span></span><br /> + <span style="color: #009900;"><span style="font-weight: bold; color: black;"><lolly</span> :button <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"btnSumit"</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">"Click Here!"</span> <span style="color: #000066;">onClick</span>=<span style="color: #ff0000;">"alert('Hello!')"</span> <span style="font-weight: bold; color: black;">/></span></span><br /> +<span style="color: #009900;"><span style="font-weight: bold; color: black;"></lolly<span style="font-weight: bold; color: black;">></span></span></span><br /> + </div> + </div> +</div> + <p><b>Resources</b></p> + <p>How does it compare to Atlas? <a href="http://lollygagframework.com/Articles/LollygagVersusAtlas/Default.htm">Read their thoughts on the matter</a>.</p> + <p><a href="http://lollygagframework.com/Demos/default.htm">Demos</a></p> + <p><a href="http://lollygagframework.com/SampleApplications/Forums/forums.xml">Sample Application</a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=2QC8qukU"><img src="http://feeds.feedburner.com/~f/ajaxian?i=2QC8qukU" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=lsoztS0a"><img src="http://feeds.feedburner.com/~f/ajaxian?i=lsoztS0a" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=WuuxjGjM"><img src="http://feeds.feedburner.com/~f/ajaxian?i=WuuxjGjM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=M7Gaypk4"><img src="http://feeds.feedburner.com/~f/ajaxian?i=M7Gaypk4" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/lollygag-latest-non-atlas-net-framework/feed/</wfw:commentRSS>
+ </item>
+ <item>
+ <title>Google Book Search gets an Ajax upgrade</title>
+ <link>http://ajaxian.com/archives/google-book-search-gets-an-ajax-upgrade</link>
+ <comments>http://ajaxian.com/archives/google-book-search-gets-an-ajax-upgrade#comments</comments>
+ <pubDate>Thu, 23 Nov 2006 00:03:44 +0000</pubDate>
+ <dc:creator>Dion Almaer</dc:creator>
+
+ <category>Front Page</category>
+ <category>Showcase</category>
+ <category>Google</category>
+ <guid>http://ajaxian.com/archives/google-book-search-gets-an-ajax-upgrade</guid>
+ <description><![CDATA[ Nathan Naze and his team at Google have upgraded Google Books: + + +Zoom in on text and images. Here's a cool full-page sketch of a ship from an 1898 book on steam navigation. Looking for something less dated? Perhaps this colorful page of a room from a book on interior design. Want a better look? You can [...]]]></description>
+ <content:encoded><![CDATA[ <p>Nathan Naze and his team at Google have upgraded <a href="http://books.google.com/">Google Books</a>:</p> + <blockquote> + <ul> +<li><strong>Zoom in on text and images.</strong> Here's <a href="http://books.google.com/books?vid=HARVARD:32044020180790&id=7X-I9105PAkC&pg=PA109#PRA2-PA109,M1">a cool full-page sketch of a ship</a> from an 1898 book on <a href="http://books.google.com/books?vid=HARVARD:32044020180790&id=7X-I9105PAkC">steam navigation</a>. Looking for something less dated? Perhaps this <a href="http://books.google.com/books?vid=ISBN1564969584&id=F68COamQRH0C&pg=PA25&lpg=PA25&sig=8k-utjCZ5wwUmWMPlMLIaDjJ4Ig#PPA25,M1">colorful page of a room</a> from <a href="http://books.google.com/books?vid=ISBN1564969584&id=F68COamQRH0C">a book on interior design</a>. Want a better look? You can now zoom in and out — just click on the <img src="http://photos1.blogger.com/blogger/2855/3883/1600/plus.gif" style="padding: 0px; border: 0px" alt="zoom in" border="0" height="14" width="14"/> and <img alt="zoom out" src="http://photos1.blogger.com/blogger/2855/3883/1600/minus.gif" style="padding: 0px; border: 0px" border="0" height="14" width="14"/> buttons. Play with it until you find a size you like.</li> + +<li><strong>One book, one web page.</strong> No more reloads! In one-page mode (just click the <img alt="one page" src="http://photos1.blogger.com/blogger/2855/3883/1600/onepage.gif" style="padding: 0px; border: 0px" border="0" height="14" width="9"/> button), pages appear one below the other, like a scroll of paper. For <a href="http://books.google.com/googlebooks/screenshots.html#fullview">full-view</a> books, there's also a two-page mode (<img alt="two page button" src="http://photos1.blogger.com/blogger/2855/3883/1600/twopage2.gif" style="padding: 0px; border: 0px" border="0" height="14" width="19"/>) in which pages appear side by side, just like in a physical book (perfect for <a href="http://books.google.com/books?vid=ISBN9064503125&id=NkST-eA7uicC&pg=RA12-PA110&lpg=RA12-PA110&sig=oP4PLDRpPGpbo6jBg1qpzOoksjc#PPA51,M2">two-page images</a>). In both modes, you'll be able to use <img src="http://books.google.com/googlebooks/page_nav_previous.gif" style="padding: 0px; border: 0px" alt="previous page button" border="0" height="19" width="19"/> and <img src="http://books.google.com/googlebooks/page_nav_next.gif" style="padding: 0px; border: 0px" alt="next page button" border="0" height="19" width="19"/> to turn pages.</li> + +<li><strong>Scroll, scroll, scroll your book…</strong> using the scrollbar or your mouse wheel, or by dragging (in most browsers, you'll see a <img src="http://photos1.blogger.com/blogger/2855/3883/1600/hand2.gif" style="padding: 0px; border: 0px" border="0" height="16" width="17" alt="hand"/>). You can also use the keyboard (try the spacebar, page up, page down, and the arrow keys). Or you can click on a link in the table of contents or your search results to jump right to that page (like <a href="http://books.google.com/books?vid=OCLC01581436&id=EM6nHWWQ3TIC&pg=PP10">this photo</a> from the 1906 book <a href="http://books.google.com/books?vid=OCLC01581436&id=EM6nHWWQ3TIC"><em>Geronimo's Story of His Life</em></a>).</li> + +<li><strong>This page was made for reading.</strong> We've tried to tidy up the clutter to leave as much room as possible for what's important — the book. We've put all the information about the book in a scrollable side menu. Still not enough room? You can put the screen in fullscreen mode with <img src="http://books.google.com/googlebooks/images/fullscreen.gif" style="padding: 0px; border: 0px" alt="fullscreen button" border="0" height="15" width="17"/>, so you can use the whole window for browsing. Try it with a nice illustrated book of <a href="http://books.google.com/books?vid=NYPL:33433068198005&id=MPDMpD2w_2gC&pg=PA65#PPP18,M2">Celtic fairy tales</a> or, for some lighter reading, <a href="http://books.google.com/books?vid=ISBN3540212663&id=5FZBS0JH9lkC&pg=PP1&lpg=PP1&ots=uNqKSoMhkt&&sig=MjS0J55JV4LYrKN7z_RvUf-sEx4#PPA49,M1">electromagnetic wave theory</a>.</li> + </ul> + </blockquote> + <p>There are keystrokes here too, such as hitting space to scroll down (moving down smoothly). It is nice to see more and more unification to Google apps these days. When you use Reader it feels like Mail, etc.</p> + <p>One question is, where are the GWT apps? :)</p> + <p><a href="http://books.google.com/"><img src="http://ajaxian.com/wp-content/images/googlebooksearch.png" alt="Google Book Search" border="0" width="580" height="391"/></a> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/ajaxian?a=kpBF2m8t"><img src="http://feeds.feedburner.com/~f/ajaxian?i=kpBF2m8t" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=KWMuT6ZN"><img src="http://feeds.feedburner.com/~f/ajaxian?i=KWMuT6ZN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=5HzTTFHS"><img src="http://feeds.feedburner.com/~f/ajaxian?i=5HzTTFHS" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ajaxian?a=eLs8y2a1"><img src="http://feeds.feedburner.com/~f/ajaxian?i=eLs8y2a1" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRSS>http://ajaxian.com/archives/google-book-search-gets-an-ajax-upgrade/feed/</wfw:commentRSS>
+ </item>
+ </channel>
+</rss>
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/febo-feeds.opml.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/febo-feeds.opml.xml new file mode 100644 index 0000000000..633e184282 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/febo-feeds.opml.xml @@ -0,0 +1,29 @@ +<opml version="1.0"> + <head> + <title>Thunderbird OPML-Export</title> + <dateCreated>Fri, 08 Dec 2006 12:00:29 GMT</dateCreated> + </head> + <body> + <outline title="AJAX Matters Blog" text="AJAX Matters Blog" type="rss" version="RSS" xmlUrl="http://www.ajaxmatters.com/blog/feed/atom/" htmlUrl="http://www.ajaxmatters.com/blog"/> + <outline title="Ajaxian" text="Ajaxian" type="rss" version="RSS" xmlUrl="http://feeds.feedburner.com/ajaxian" htmlUrl="http://ajaxian.com"/> + <outline title="Coding In Paradise" text="Coding In Paradise" type="rss" version="RSS" xmlUrl="http://www.codinginparadise.org/weblog/atom.xml" htmlUrl="http://codinginparadise.org/weblog/"/> + <outline title="dojo.foo" text="dojo.foo" type="rss" version="RSS" xmlUrl="http://blog.dojotoolkit.org/feed" htmlUrl="http://blog.dojotoolkit.org"/> + <outline title="Firebug" text="Firebug" type="rss" version="RSS" xmlUrl="http://www.getfirebug.com/blog/?feed=rss2" htmlUrl="http://www.getfirebug.com/blog"/> + <outline title="from __future__ import *" text="from __future__ import *" type="rss" version="RSS" xmlUrl="http://bob.pythonmac.org/feed/atom/" htmlUrl="http://bob.pythonmac.org"/> + <outline title="Google Web Toolkit Blog" text="Google Web Toolkit Blog" type="rss" version="RSS" xmlUrl="http://googlewebtoolkit.blogspot.com/atom.xml" htmlUrl="http://googlewebtoolkit.blogspot.com"/> + <outline title="Jack Slocum's Blog" text="Jack Slocum's Blog" type="rss" version="RSS" xmlUrl="http://www.jackslocum.com/blog/feed/" htmlUrl="http://www.jackslocum.com/blog"/> + <outline title="JSR 168, WSRP, Portlets & Enterprise Portal" text="JSR 168, WSRP, Portlets & Enterprise Portal" type="rss" version="RSS" xmlUrl="http://portlets.blogspot.com/atom.xml" htmlUrl="http://portlets.blogspot.com"/> + <outline title="Monologue" text="Monologue" type="rss" version="RSS" xmlUrl="http://www.go-mono.com/monologue/index.rss" htmlUrl="http://www.go-mono.com/monologue/"/> + <outline title="OSNews" text="OSNews" type="rss" version="RSS" xmlUrl="http://osnews.com/files/recent.rdf" htmlUrl="http://www.osnews.com/"/> + <outline title="qooxdoo" text="qooxdoo" type="rss" version="RSS" xmlUrl="http://feeds.feedburner.com/qooxdoo/blog/content" htmlUrl="http://blog.qooxdoo.org"/> + <outline title="qooxdoo" text="qooxdoo" type="rss" version="RSS" xmlUrl="http://feeds.feedburner.com/qooxdoo/news/content" htmlUrl="http://news.qooxdoo.org"/> + <outline title="subbu.org" text="subbu.org" type="rss" version="RSS" xmlUrl="http://feeds.feedburner.com/SubbuDotOrg" htmlUrl="http://www.subbu.org/"/> + <outline title="Surfin' Safari" text="Surfin' Safari" type="rss" version="RSS" xmlUrl="http://webkit.org/blog/?feed=rss2" htmlUrl="http://webkit.org/blog"/> + <outline title="Thomas Much's Weblog" text="Thomas Much's Weblog" type="rss" version="RSS" xmlUrl="http://www.snailshell.de/blog/rss.xml" htmlUrl="http://www.snailshell.de/blog/index.html"/> + <outline title="UXmatters" text="UXmatters" type="rss" version="RSS" xmlUrl="http://www.uxmatters.com/atom.xml" htmlUrl="http://dev.uxmatters.com/"/> + <outline title="WebKit" text="WebKit" type="rss" version="RSS" xmlUrl="http://cia.navi.cx/stats/project/WebKit/.rss" htmlUrl="http://webkit.org"/> + <outline title="webmagics" text="webmagics" type="rss" version="RSS" xmlUrl="http://feeds.feedburner.com/webmagics" htmlUrl="http://journal.webmagics.net/"/> + <outline title="Yahoo! User Interface Blog" text="Yahoo! User Interface Blog" type="rss" version="RSS" xmlUrl="http://feeds.yuiblog.com/YahooUserInterfaceBlog" htmlUrl="http://yuiblog.com/blog"/> + <outline title="Zimbra - Blog" text="Zimbra - Blog" type="rss" version="RSS" xmlUrl="http://www.zimbra.com/blog/atom.xml" htmlUrl="http://www.zimbra.com/blog/"/> + </body> +</opml>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/qooxdoo-blog.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/qooxdoo-blog.xml new file mode 100644 index 0000000000..241d450954 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/qooxdoo-blog.xml @@ -0,0 +1,278 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- generator="wordpress/2.0.5" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
+
+<channel>
+ <title>qooxdoo Blog</title>
+ <link>http://blog.qooxdoo.org</link>
+ <description>The blog of the qooxdoo developers</description>
+ <pubDate>Sun, 26 Nov 2006 15:53:14 +0000</pubDate>
+ <generator>http://wordpress.org/?v=2.0.5</generator>
+ <language>en</language>
+ <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/qooxdoo/blog/content" type="application/rss+xml" /><feedburner:emailServiceId>384287</feedburner:emailServiceId><item>
+ <title>Safari support for qooxdoo coming</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/48836959/safari-support-for-qooxdoo-coming</link>
+ <comments>http://blog.qooxdoo.org/safari-support-for-qooxdoo-coming#comments</comments>
+ <pubDate>Mon, 13 Nov 2006 14:46:19 +0000</pubDate>
+ <dc:creator>Fabian Jakobs</dc:creator>
+
+ <category>Announcements</category>
+
+ <category>Safari</category>
+
+ <category>Technical</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/safari-support-for-qooxdoo-coming</guid>
+ <description><![CDATA[Safari support for qooxdoo is coming along nicely. qooxdoo support for the nightly build of WebKit is near to complete. Most demos and examples are working, including the API viewer . The screenshot shows the “At a Glance” example running in WebKit. Safari 2.0.4 shipped with the current OS X 10.4 is usable but still [...]]]></description>
+ <content:encoded><![CDATA[<p>Safari support for qooxdoo is coming along nicely. qooxdoo support for the nightly build of <a href="http://nightly.webkit.org" title="WebKit">WebKit</a> is near to complete. Most demos and examples are working, including the <a href="http://api.qooxdoo.org/">API viewer</a> . The screenshot shows the “<a href="http://demo.qooxdoo.org/html/at-a-glance/index.html">At a Glance</a>” example running in WebKit. Safari 2.0.4 shipped with the current OS X 10.4 is usable but still has some rendering issues.</p> +<div><a href="http://blog.qooxdoo.org/wp-content/uploads/2006/11/webkit-at_a_glance.jpg" title="WebKit - "At a Glance" example"><img src="http://blog.qooxdoo.org/wp-content/uploads/2006/11/webkit-at_a_glance.thumbnail.jpg" alt="WebKit - "At a Glance" example" /></a> <a href="http://blog.qooxdoo.org/wp-content/uploads/2006/11/webkit-api_viewer.jpg" title="WebKit - API viewer"><img src="http://blog.qooxdoo.org/wp-content/uploads/2006/11/webkit-api_viewer.thumbnail.jpg" alt="WebKit - API viewer" /></a></div> +<p>For the next qooxdoo release we plan to fully support WebKit, which hopefully builds the basis for the next major release of Safari shipped with the upcoming OS X 10.5. We decided to target WebKit because of its improved standard support and its dramatically faster JavaScript engine. Some qooxdoo examples are up to seven times faster using WebKit compared to Safari 2. Even if we would fully support Safari 2, it will never be a good platform for big JavaScript applications.</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=rgDIT7iC"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=rgDIT7iC" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=jZaVEgHu"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=jZaVEgHu" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=Kni66m1x"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=Kni66m1x" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=OdCjYPt3"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=OdCjYPt3" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=zlqmlozO"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=zlqmlozO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=3F9MjAuf"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=3F9MjAuf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=LPVxsJLI"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=LPVxsJLI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=wCgbZ6gf"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=wCgbZ6gf" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/safari-support-for-qooxdoo-coming/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/safari-support-for-qooxdoo-coming</feedburner:origLink></item>
+ <item>
+ <title>Tamarin Follow-ups</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/46350978/tamarin-follow-ups</link>
+ <comments>http://blog.qooxdoo.org/tamarin-follow-ups#comments</comments>
+ <pubDate>Tue, 07 Nov 2006 21:53:17 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Firefox</category>
+
+ <category>Performance</category>
+
+ <category>Adobe</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/tamarin-follow-ups</guid>
+ <description><![CDATA[ +I have just found some more interesting stuff regarding our Tamarin post today:  + +Inside Tamarin - Adobe’s Open Source Flash VM +JD on EP +Adobe press release +Mozilla press release +Digg frontpage + + + +]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>I have just found some more interesting stuff regarding our Tamarin post today: </p> +<ul> +<li><a href="http://www.satine.org/archives/2006/11/06/inside-tamarin-adobes-open-source-flash-vm/">Inside Tamarin - Adobe’s Open Source Flash VM</a></li> +<li><a href="http://weblogs.macromedia.com/jd/archives/2006/11/tamarin_project.cfm">JD on EP</a> </li> +<li><a href="http://www.mozilla.com/en-US/press/mozilla-2006-11-07.html">Adobe press release</a></li> +<li><a href="http://www.mozilla.com/en-US/press/mozilla-2006-11-07.html">Mozilla press release</a> </li> +<li><a href="http://digg.com/tech_news/Adobe_and_Mozilla_Foundation_to_Open_Source_Flash_Player_Scripting_Engine">Digg frontpage</a></li> +</ul> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=q9EAMSac"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=q9EAMSac" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=wzDEJbB5"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=wzDEJbB5" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=yiNGdYRa"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=yiNGdYRa" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=OhkFuOKM"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=OhkFuOKM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=B6t2zevO"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=B6t2zevO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=Q0RQVLHL"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=Q0RQVLHL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=FPcP7kjS"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=FPcP7kjS" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=ysJCQQQ4"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=ysJCQQQ4" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/tamarin-follow-ups/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/tamarin-follow-ups</feedburner:origLink></item>
+ <item>
+ <title>Project Tamarin to boost JavaScript</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/46219737/project-tamarin-to-boost-javascript</link>
+ <comments>http://blog.qooxdoo.org/project-tamarin-to-boost-javascript#comments</comments>
+ <pubDate>Tue, 07 Nov 2006 12:55:22 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Firefox</category>
+
+ <category>Performance</category>
+
+ <category>Adobe</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/project-tamarin-to-boost-javascript</guid>
+ <description><![CDATA[ +Good news, everyone!  +Recently we have been puzzled by some statements of Brendan Eich, the creator of the JavaScript programming language. +In Brendan's blog he wrote "For Mozilla 2, we will have a JIT-oriented JavaScript VM (details soon) that supports the forthcoming ECMAScript Edition 4 ("JS2") language" (October 13, 2006). [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>Good news, everyone! </p> +<p>Recently we have been puzzled by some statements of Brendan Eich, the creator of the JavaScript programming language.</p> +<p>In Brendan's blog he wrote "For Mozilla 2, we will have a JIT-oriented JavaScript VM (details soon) that supports the forthcoming ECMAScript Edition 4 ("JS2") language" (<a href="http://weblogs.mozillazine.org/roadmap/archives/2006/10/mozilla_2.html">October 13, 2006</a>). Well, could hardly wait for any details. Another statement that made us curious was at The Ajax Experience this fall. In his slides about JavaScript 2.0 he mentioned "Open source optimizing VMs coming soon. Look for an announcement in a few weeks" (<a href="http://ajaxian.com/downloads/presentations/eich-ajax-experience-boston/">October 25, 2006</a>). Interestingly, this mysterious announcement was in a section he called "JavaScript Fun Facts".</p> +<p>Well done Brendan, you are our Master of Suspense! Finally, as a revelation today came <a href="http://blog.qooxdoo.org/adobe-improves-javascript-performance">the announcement that is going to boost JavaScript</a>. Congratulations to Adobe for their decision of contributing the ActionScript Virtual Machine (AVM) as open source to the Mozilla project. And a warm open-source welcome to all the developers of the AVM! The code has <a href="http://weblogs.mozillazine.org/roadmap/archives/2006/11/project_tamarin.html">just been committed</a> into the Mozilla repository.</p> +<p>This is great news for qooxdoo being a client-side JavaScript framework. Performance has always been one of our major concerns, and we think we have pushed the limit for JavaScript based web applications, e.g. for qooxdoo's powerful browser-independent layout engine. Can't wait to tweak the last bit of performance out of any new Mozilla browser backed by the new JavaScript VM. This is going to change the future of browser-based applications. Cheers!</p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=USVMighM"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=USVMighM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=w54mM05O"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=w54mM05O" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=l0FOLc3Z"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=l0FOLc3Z" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=UjEK9OXh"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=UjEK9OXh" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=hSi2ujP0"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=hSi2ujP0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=huRmnKOf"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=huRmnKOf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=aLB65Efe"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=aLB65Efe" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=RfSxRPZF"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=RfSxRPZF" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/project-tamarin-to-boost-javascript/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/project-tamarin-to-boost-javascript</feedburner:origLink></item>
+ <item>
+ <title>Adobe improves JavaScript performance</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/46178140/adobe-improves-javascript-performance</link>
+ <comments>http://blog.qooxdoo.org/adobe-improves-javascript-performance#comments</comments>
+ <pubDate>Tue, 07 Nov 2006 12:01:29 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Firefox</category>
+
+ <category>Flash</category>
+
+ <category>Adobe</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/adobe-improves-javascript-performance</guid>
+ <description><![CDATA[ +In my opinion there was never a reason why JavaScript should be slower than other typical script languages e.g. Python, Perl, Ruby, … With the newest committment from Abobe to Mozilla we could reach a new level of performance in web applications.  +As news.com reports "Adobe will provide the [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>In my opinion there was never a reason why JavaScript should be slower than other typical script languages e.g. Python, Perl, Ruby, … With the newest committment from Abobe to Mozilla we could reach a new level of performance in web applications. </p> +<p>As news.com reports "Adobe will provide the same software, called the ActionScript Virtual Machine, which it uses to run script code in the <a href="http://news.com.com/Adobe+updates+Flash+Player%2C+Flex+tool/2100-1012_3-6088705.html?tag=nl" title="Adobe updates Flash Player, Flex tool -- Tuesday, Jun 27, 2006">Adobe Flash Player 9</a>. This virtual machine is expected to be built into future versions of the Firefox browser by the first half of 2008, said <a href="http://www.hecker.org/info/bio?tag=nl">Frank Hecker</a>, the executive director of the <a href="http://www.mozilla.org/foundation/?tag=nl">Mozilla Foundation</a>." </p> +<p>Via <a href="http://news.com.com/2100-7344_3-6133052.html">news.com</a></p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=bVlh8s4Z"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=bVlh8s4Z" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=T4rDBMyi"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=T4rDBMyi" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=IjP7zAmO"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=IjP7zAmO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=JuQT2l0H"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=JuQT2l0H" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=SDqAETvO"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=SDqAETvO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=HCWVQRJl"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=HCWVQRJl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=bHmzAB8O"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=bHmzAB8O" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=iApj6TU3"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=iApj6TU3" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/adobe-improves-javascript-performance/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/adobe-improves-javascript-performance</feedburner:origLink></item>
+ <item>
+ <title>Keep yourself up-to-date</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/37261107/keep-yourself-up-to-date</link>
+ <comments>http://blog.qooxdoo.org/keep-yourself-up-to-date#comments</comments>
+ <pubDate>Sat, 14 Oct 2006 21:41:08 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Development</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/keep-yourself-up-to-date</guid>
+ <description><![CDATA[ There is a new feed available on our homepage. You can now easily follow the development in our SVN repository. Hope you like this. Especially interesting for users who want to be up-to-date. Also a nice alternative to our qooxdoo-commit mailing list. + +]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body>There is a <a href="http://feeds.feedburner.com/qooxdoo/svn/commits">new feed</a> available on <a href="http://qooxdoo.org">our homepage</a>. You can now easily follow the development in our SVN repository. Hope you like this. Especially interesting for users who want to be up-to-date. Also a nice alternative to our <a href="http://lists.sourceforge.net/mailman/listinfo/qooxdoo-commit">qooxdoo-commit mailing list</a>. </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=ufmev5Dk"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=ufmev5Dk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=4EgKz1gp"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=4EgKz1gp" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=SKoJto7H"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=SKoJto7H" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=WTdFl3yy"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=WTdFl3yy" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=ZPm4BqBx"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=ZPm4BqBx" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=7dz9P0xU"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=7dz9P0xU" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=qABtQjRx"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=qABtQjRx" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=3FQ8FBbL"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=3FQ8FBbL" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/keep-yourself-up-to-date/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/keep-yourself-up-to-date</feedburner:origLink></item>
+ <item>
+ <title>Only five days to IE7</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/36678532/5-days-to-ie7</link>
+ <comments>http://blog.qooxdoo.org/5-days-to-ie7#comments</comments>
+ <pubDate>Fri, 13 Oct 2006 08:42:36 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Internet Explorer</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/5-days-to-ie7</guid>
+ <description><![CDATA[ Following a report of Microsoft Higher Education - Mid-Atlantic it seems that IE7 will be released on the 18th this month. In just 5 days. The most changes are only interesting for typical web developers (e.g. CSS fixes) while the latest improvements to the JavaScript engine [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body>Following <a href="http://blogs.msdn.com/hied_mid-atlantic/archive/2006/10/10/Internet-Explorer-7-is-coming-this-month-_2E002E002E00_-Are-you-ready_3F00_.aspx">a report</a> of <a href="http://blogs.msdn.com/hied_mid-atlantic/default.aspx">Microsoft Higher Education - Mid-Atlantic</a> it seems that <a href="http://blogs.msdn.com/hied_mid-atlantic/archive/2006/10/10/Internet-Explorer-7-is-coming-this-month-_2E002E002E00_-Are-you-ready_3F00_.aspx">IE7 will be released on the 18th this month</a>. In just 5 days. The most changes are only interesting for typical web developers (e.g. CSS fixes) while the <a href="http://blog.qooxdoo.org/dramatically-improved-ie7-javascript-performance">latest improvements to the JavaScript engine</a> are also an interesting point for us and other big JavaScript frameworks. I hope we will see a market share of 50 percent after the first six months. </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=6KCHC8Qt"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=6KCHC8Qt" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=znn30SWW"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=znn30SWW" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=iDMgk0h2"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=iDMgk0h2" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=tH88lPZg"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=tH88lPZg" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=0u2q8HcY"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=0u2q8HcY" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=C8h6ZyP0"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=C8h6ZyP0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=p7GgwlgK"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=p7GgwlgK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=8AEwoRbb"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=8AEwoRbb" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/5-days-to-ie7/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/5-days-to-ie7</feedburner:origLink></item>
+ <item>
+ <title>IE7 CSS changes</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/32468983/ie7-css-changes</link>
+ <comments>http://blog.qooxdoo.org/ie7-css-changes#comments</comments>
+ <pubDate>Wed, 04 Oct 2006 20:04:27 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Bookmark</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/ie7-css-changes</guid>
+ <description><![CDATA[ An interesting read for all web developers: Cascading Style Sheet Compatibility in Internet Explorer 7. + +]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> An interesting read for all web developers: <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/cols/dnexpie/ie7_css_compat.asp?frame=true">Cascading Style Sheet Compatibility in Internet Explorer 7.</a><br /> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=l0NmonZB"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=l0NmonZB" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=R0iSOfdT"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=R0iSOfdT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=oEqiKUKM"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=oEqiKUKM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=1VRsHJUp"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=1VRsHJUp" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=6TsnDDrP"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=6TsnDDrP" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=3JFLZ0Cf"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=3JFLZ0Cf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=QuSZgCNp"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=QuSZgCNp" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=Y8oWww1z"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=Y8oWww1z" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/ie7-css-changes/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/ie7-css-changes</feedburner:origLink></item>
+ <item>
+ <title>Support for compression of local variables added</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/32241766/support-for-compression-of-local-variables-added</link>
+ <comments>http://blog.qooxdoo.org/support-for-compression-of-local-variables-added#comments</comments>
+ <pubDate>Wed, 04 Oct 2006 11:06:46 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Development</category>
+
+ <category>Technical</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/support-for-compression-of-local-variables-added</guid>
+ <description><![CDATA[ +A few hours ago I've committed a change which adds a variable name optimizer into the qooxdoo trunk. This optimizer replaces the names of local variables with shorter ones. The result is a size reduction of the compiled JavaScript file by 10%. This new behavior is enabled per [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>A few hours ago I've committed a change which adds a variable name optimizer into the qooxdoo trunk. This optimizer replaces the names of local variables with shorter ones. The result is a size reduction of the compiled JavaScript file by 10%. This new behavior is enabled per default for all the included Makefiles. So after an SVN update you can build your (again) better optimized version of qooxdoo.</p> +<p>This can also been seen as a next step in bringing support for obfuscation another step forward. I have also updated the <a href="http://demo.qooxdoo.org">online demos</a> and the <a href="http://api.qooxdoo.org">API viewer</a> to use this new feature. I would like to invite you to give me feedback as soon as possible. Maybe you also find some bugs. If so, please report them immediately. Thank you.</p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=tppbJ4bc"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=tppbJ4bc" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=dbe1sxCT"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=dbe1sxCT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=kuoqNS00"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=kuoqNS00" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=HlJ6f0Ls"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=HlJ6f0Ls" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=xbjmDWoL"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=xbjmDWoL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=V2cWssXw"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=V2cWssXw" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=C10aMNYQ"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=C10aMNYQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=F2ic6JR6"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=F2ic6JR6" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/support-for-compression-of-local-variables-added/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/support-for-compression-of-local-variables-added</feedburner:origLink></item>
+ <item>
+ <title>AJAX framework survey</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/26565493/ajax-framework-poll</link>
+ <comments>http://blog.qooxdoo.org/ajax-framework-poll#comments</comments>
+ <pubDate>Sun, 24 Sep 2006 09:04:41 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Discussion</category>
+
+ <category>Survey</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/ajax-framework-poll</guid>
+ <description><![CDATA[ +The guys at ajaxian.com have reported about a current survey regarding the popularity of common AJAX frameworks. It is quite clear why prototype is the winner. It's well-known, small and easily embedable into existing pages. However I think it is interesting that Mochikit is less widely used, because [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>The guys at <a href="http://ajaxian.com">ajaxian.com</a> have reported about a current <a href="http://ajaxian.com/archives/ajaxiancom-2006-survey-results">survey regarding the popularity of common AJAX frameworks</a>. It is quite clear why prototype is the winner. It's well-known, small and easily embedable into existing pages. However I think it is interesting that Mochikit is less widely used, because the targets of these libraries are comparable in my opinion. And Mochikit does not depends on extensions of native objects (especially Object.prototype) which makes it the better choice.</p> +<p>I should mention that in my opinion the whole survey is quite problematic because of their comparison of different levels of so named "AJAX frameworks". For a next survey I would suggest to divide the list into these groups:</p> +<p>AJAX wrappers & DOM utilities:</p> +<ul> +<li>Prototype & Scriptaclous & Rico</li> +<li>Moo.fx</li> +<li>jQuery </li> +<li>Yahoo UI</li> +<li>Mochikit</li> +<li>XAJAX</li> +<li>DWR (includes backend code, too) </li> +</ul> +<p>Framework & Toolkits:</p> +<ul> +<li>Dojo</li> +<li>Atlas</li> +<li>GWT</li> +<li>qooxdoo (seems to be missing <img src='http://blog.qooxdoo.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) </li> +</ul> +<p>I've grouped together Scriptaclous and Rico because they both depend on Prototype which means they are more or less an extension of this library and not a real separate solution.</p> +<p>What do you think? </p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=zVG9wfIU"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=zVG9wfIU" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=FyUymhC2"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=FyUymhC2" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=SCV0WhJ4"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=SCV0WhJ4" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=BYHTg0aH"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=BYHTg0aH" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=sYMapwTd"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=sYMapwTd" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=r7Dt6YTk"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=r7Dt6YTk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=fWqhBoBV"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=fWqhBoBV" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=bOeZDScE"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=bOeZDScE" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/ajax-framework-poll/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/ajax-framework-poll</feedburner:origLink></item>
+ <item>
+ <title>Dramatically improved IE7 JavaScript performance</title>
+ <link>http://feeds.feedburner.com/~r/qooxdoo/blog/content/~3/21793941/dramatically-improved-ie7-javascript-performance</link>
+ <comments>http://blog.qooxdoo.org/dramatically-improved-ie7-javascript-performance#comments</comments>
+ <pubDate>Wed, 13 Sep 2006 11:35:53 +0000</pubDate>
+ <dc:creator>Sebastian Werner</dc:creator>
+
+ <category>Internet Explorer</category>
+
+ <category>Technical</category>
+
+ <category>Performance</category>
+
+ <guid isPermaLink="false">http://blog.qooxdoo.org/dramatically-improved-ie7-javascript-performance</guid>
+ <description><![CDATA[ +Really good news. My vocabulary may to be too limited to tell you how great the latest changes in IE7 RC1 are. Microsoft announced that they have "recently made some great fixes to our engine to improve the garbage collection routine and to reduce unbounded memory growth." and [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>Really good news. My vocabulary may to be too limited to tell you how great the latest changes in <a href="http://www.microsoft.com/windows/ie/default.mspx">IE7 RC1</a> are. <a href="http://blogs.msdn.com/ie/archive/2006/08/28/728654.aspx">Microsoft announced</a> that they have "recently made some great fixes to our engine to improve the garbage collection routine and to reduce unbounded memory growth." and that one "should see noticeable improvements on AJAX sites in the Release Candidate we shipped last week". Yes indeed, we do see tremendeous improvements. <img src='http://blog.qooxdoo.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p> +<p>In fact <a href="http://qooxdoo.org/demo">many demos</a> of <a href="http://qooxdoo.org">qooxdoo</a> run much faster now in IE7 compared to IE6. And they are even faster than in <a href="http://www.mozilla.com/firefox/">Firefox</a> 1.5 in many cases. This is a huge jump in performance. Microsoft did not tell about their exact modifications, of course. Anyway, they have fixed <em>the</em> major problem of large JavaScript-based web applications. This problem, despite having a catchy name, was mentioned many times before like <a href="http://demo.qooxdoo.org/html/performance/GlobalObject_2.html">here</a>, <a href="http://alex.dojotoolkit.org/?p=536">here</a> and <a href="http://groups.google.com/group/microsoft.public.inetsdk.programming.scripting.jscript/browse_thread/thread/d758f148f03cd2ed/cc6143cd1b0d1e38?lnk=st&q=jscript+slow+performance+ie+firefox&rnum=2#cc6143cd1b0d1e3">there</a>: If you have many objects created, which are simply accessible in the current scope, all methods and features of JavaScript slow down dramatically. Yeah, right, the entire execution speed drops significantly. No other browser besides IE shows such a strange behavior. It is quite interesting that IE6 really gets slower the larger the total number of (accessible) objects. Sure, it is logical that more instanciated objects need more memory, but it is not logical that at the same time this will dramatically reduce the performance of any code (that is not even accessing this data).</p> +<p>With the release candidate RC1 of their new browser version IE7, it seems that they have finally fixed this issue. You can test it yourself in <a href="http://demo.qooxdoo.org/html/performance/GlobalObject_2.html">this test case</a>, which has been available in <a href="http://qooxdoo.org">qooxdoo</a> for several months to analyze and measure the IE performance problems. Please look at status bar of your browser (maybe you need to enable the status bar in the IE7 security settings). It will display the execution time of each loop while a large number of objects exists. On my machine the IE6 needs ~1400ms, while IE7 needs ~30ms, which is roughly the time Firefox 1.5 needs. Definitely incredible! Bright future for modern web applications. <img src='http://blog.qooxdoo.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=27qjvIjz"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=27qjvIjz" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=0pcpSBXq"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=0pcpSBXq" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=Z4mzepLM"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=Z4mzepLM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=Cko7rv3A"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=Cko7rv3A" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=F2xJwTjG"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=F2xJwTjG" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=xrRqiV8e"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=xrRqiV8e" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=nLBUMGef"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=nLBUMGef" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/blog/content?a=hUPfCg1N"><img src="http://feeds.feedburner.com/~f/qooxdoo/blog/content?i=hUPfCg1N" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://blog.qooxdoo.org/dramatically-improved-ie7-javascript-performance/feed/</wfw:commentRss>
+ <feedburner:origLink>http://blog.qooxdoo.org/dramatically-improved-ie7-javascript-performance</feedburner:origLink></item>
+ </channel>
+</rss><!-- Dynamic Page Served (once) in 0.666 seconds --><!-- Cached page served by WP-Cache -->
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/qooxdoo-news.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/qooxdoo-news.xml new file mode 100644 index 0000000000..3b17a19c73 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/qooxdoo-news.xml @@ -0,0 +1,284 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- generator="wordpress/2.0.5" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
+
+<channel>
+ <title>qooxdoo News</title>
+ <link>http://news.qooxdoo.org</link>
+ <description>The qooxdoo news section</description>
+ <pubDate>Sun, 26 Nov 2006 15:52:09 +0000</pubDate>
+ <generator>http://wordpress.org/?v=2.0.5</generator>
+ <language>en</language>
+ <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/qooxdoo/news/content" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">390072</feedburner:emailServiceId><item>
+ <title>qooxdoo 0.6.2 released</title>
+ <link>http://news.qooxdoo.org/qooxdoo-062-released</link>
+ <comments>http://news.qooxdoo.org/qooxdoo-062-released#comments</comments>
+ <pubDate>Wed, 22 Nov 2006 14:13:38 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Announcements</category>
+
+ <category>Release</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/qooxdoo-062-released</guid>
+ <description><![CDATA[Good news, everyone! +Despite of the minor change in version number, this release is again a major step in strengthening qooxdoo's position of being one of the most comprehensive and innovative AJAX frameworks. It now even includes support for WebKit and future versions of Safari! +It came as quite a surprise how many fixes, changes and additions [...]]]></description>
+ <content:encoded><![CDATA[<p>Good news, everyone!</p> +<p>Despite of the minor change in version number, this release is again a major step in strengthening qooxdoo's position of being one of the most comprehensive and innovative AJAX frameworks. It now even includes support for WebKit and future versions of Safari!</p> +<p>It came as quite a surprise how many fixes, changes and additions we were actually able to include in this fine little package. During the eight weeks after release 0.6.1, many people have made contributions. Thanks to all qooxdoo users, contributors, patch monsters and supporters for helping to make the framework more mature and feature-complete!</p> +<p>Targeted as a maintenance release it includes many bugfixes and only minor changes in functionality or API. We recommend to upgrade any applications based on qooxdoo 0.6.1. Of course, there is migration support available, even if it is hardly needed this time.</p> +<p>As mentioned above and already announced in our <a href="http://blog.qooxdoo.org/safari-support-for-qooxdoo-coming">developer blog</a>, qooxdoo now includes support for WebKit. We expect to fully support the next major version Safari 3.0 which will be based on the current development of WebKit. There is only limited support for Safari in its current version 2.0.4, though. Reason is, that Safari 2.0 still has many bugs that can hardly be worked around. Luckily, many of those bugs are already fixed in the <a href="http://nightly.webkit.org/">nightly builds of WebKit</a>. Besides the various bugs, Safari 2.0's JavaScript engine and its execution speed is not competitive with respect to the latest versions of the other major browsers (Firefox 2.0, IE7, Opera 9). Good news is, that the current builds of WebKit are tremendeously faster than Safari 2.0, approximately by a factor of 7-8 for a typical qooxdoo demo.</p> +<p>We think it is worth to either use WebKit for now or wait for Safari 3.0 due in early 2007. There is probably not much sense in devoting more time and effort for Safari 2.0 specific problems. There are still some known issues concerning WebKit support (particularly for widgets that use scrollbars). It would be great if Mac users could give qooxdoo 0.6.2 a try and report any problem in bugzilla. Please use the most recent nightly build of WebKit and include its version information in any bug report.</p> +<p>For more detailed information about qooxdoo 0.6.2 please consult the corresponding <a href="http://qooxdoo.org/about/release_notes">release notes</a>.</p> +<p>Enjoy!</p> +<ul> +<li><a href="http://qooxdoo.org/download">Download qooxdoo</a></li> +<li><a href="http://freshmeat.net/rate/53996/">Rate qooxdoo</a> </li> +</ul> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=rUMX2pdG"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=rUMX2pdG" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=QSWyYmHE"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=QSWyYmHE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=46nCAceV"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=46nCAceV" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=C67hJdDt"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=C67hJdDt" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=Xl7ySFg7"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=Xl7ySFg7" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=CERoEiZ0"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=CERoEiZ0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=L5wV176y"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=L5wV176y" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=LcQsQi8c"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=LcQsQi8c" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/qooxdoo-062-released/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>IE7 released, finally</title>
+ <link>http://news.qooxdoo.org/ie7-released-finally</link>
+ <comments>http://news.qooxdoo.org/ie7-released-finally#comments</comments>
+ <pubDate>Thu, 19 Oct 2006 12:26:18 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Announcements</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/ie7-released-finally</guid>
+ <description><![CDATA[ +Good news to every developer of modern web applications. After more than 5 years (IE6 was released in August 2001) we all hope to see IE7 fix some of the most severe problems and bugs of IE6. All qooxdoo-based applications are expected to benefit from IE7, particularly due [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>Good news to every developer of modern web applications. After more than 5 years (IE6 was released in August 2001) we all hope to see <a href="http://www.microsoft.com/ie">IE7</a> fix some of the most severe problems and bugs of IE6. All qooxdoo-based applications are expected to benefit from IE7, particularly due to the <a href="http://blog.qooxdoo.org/dramatically-improved-ie7-javascript-performance">dramatic JavaScript performance improvements</a> that we reported earlier.</p> +<p>qooxdoo fully supports IE7. It would be great if qooxdoo users and developers could continue to test and double-check their applications for IE7 compatibility. Please <a href="http://bugzilla.qooxdoo.org/enter_bug.cgi?product=frontend&op_sys=Windows&rep_platform=IE%207">report any IE7 issues in bugzilla</a> as soon as possible.</p> +<p>Enjoy … and good luck! </p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=s9WxPv0V"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=s9WxPv0V" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=SjIKFZaP"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=SjIKFZaP" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=bCMFN18x"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=bCMFN18x" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=mLQg7sg8"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=mLQg7sg8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=vKYNENWZ"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=vKYNENWZ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=UVocqnql"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=UVocqnql" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=FurwESp0"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=FurwESp0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=Xz06SbFC"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=Xz06SbFC" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/ie7-released-finally/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>qooxdoo 0.6.1 released</title>
+ <link>http://news.qooxdoo.org/qooxdoo-061-released</link>
+ <comments>http://news.qooxdoo.org/qooxdoo-061-released#comments</comments>
+ <pubDate>Wed, 20 Sep 2006 18:49:16 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Announcements</category>
+
+ <category>Release</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/qooxdoo-061-released</guid>
+ <description><![CDATA[ +After only two weeks since the ground-breaking release of qooxdoo 0.6 quite a lot of progress has been made. We have received many contributions and bugfixes from the community. These patches as well as our own  modifications have been integrated into the code base in the ongoing [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>After only two weeks since the ground-breaking release of <a href="http://news.qooxdoo.org/qooxdoo-06-released">qooxdoo 0.6</a> quite a lot of progress has been made. We have received many contributions and bugfixes from the community. These patches as well as our own modifications have been integrated into the code base in the ongoing effort to raise qooxdoo's stability.</p> +<p>As has been previously announced, we try to release often, now that some of the most challenging reconstructions like namespaces have been mastered. While API changes for this minor release are negligible, <a href="http://qooxdoo.org/documentation/user_manual/migration_support">migration scripts</a> are available to upgrade existing applications, of course. </p> +<p>Preliminary browser support for Safari has been introduced. It would be great if Safari users could help in identifying, analyzing and fixing the various layout problems. It is still not recommended to use qooxdoo applications in Safari-based production environments.</p> +<p>Besides bugfixes and stability improvements there are some interesting additions as well. Tabs may optionally include close buttons, the tree widget TreeFullControl now supports multiple root nodes. Iframes containing external documents now have built-in blocking support to not interrupt user actions like drag & drop.</p> +<p>Application development is even faster than before: the easy-to-use make shell commands that generate optimized and <a href="http://qooxdoo.org/documentation/user_manual/custom_builds">tailor-made custom applications</a> run much faster. Users get a jump-start for their application development by using the <a href="http://qooxdoo.org/documentation/user_manual/skeleton">skeletons</a> included in the qooxdoo SDK.</p> +<p>We would like to thank all people involved in qooxdoo development for their help and contribution. Every user's <a href="http://qooxdoo.org/community/mailing_lists">feedback</a> is important to continuously improve qooxdoo as one of the most amazing JavaScript frameworks around. Enjoy!</p> +<ul> +<li><a href="http://qooxdoo.org/about/release_notes">Release Notes</a></li> +<li><a href="http://qooxdoo.org/download">Downloads of SDK or pre-build package</a></li> +</ul> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=Zk55ooUa"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=Zk55ooUa" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=BLxW0cEj"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=BLxW0cEj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=iaVRLUq8"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=iaVRLUq8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=OFRBiERh"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=OFRBiERh" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=qAiaGiVy"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=qAiaGiVy" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=kmVzh0Er"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=kmVzh0Er" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=bgbKIHHd"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=bgbKIHHd" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=wAtcF7sW"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=wAtcF7sW" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/qooxdoo-061-released/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>qooxdoo 0.6 released</title>
+ <link>http://news.qooxdoo.org/qooxdoo-06-released</link>
+ <comments>http://news.qooxdoo.org/qooxdoo-06-released#comments</comments>
+ <pubDate>Thu, 07 Sep 2006 17:49:13 +0000</pubDate>
+ <dc:creator>Sebastian</dc:creator>
+
+ <category>Announcements</category>
+
+ <category>Release</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/qooxdoo-06-released</guid>
+ <description><![CDATA[ +Here comes the most advanced qooxdoo version ever! qooxdoo 0.6 introduces namespaces as the most noticeable change. This step has been combined with a long thought-out and at the end well-structured directory layout. +Integrated is one of the most advanced build systems. This new system allows you to generate [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>Here comes the most advanced qooxdoo version ever! qooxdoo 0.6 introduces namespaces as the most noticeable change. This step has been combined with a long thought-out and at the end well-structured directory layout.</p> +<p>Integrated is one of the most advanced build systems. This new system allows you to generate tailor-made user applications linked against the qooxdoo framework. You can even include your own project classes and optimize them along with qooxdoo. Using this new build system you can generate blazingly fast and highly optimized qooxdoo builds.</p> +<p>A new ground-breaking qooxdoo-based API viewer was added to make software development with qooxdoo easier than ever before. Supposed to become every qooxdoo users' number one resource, it shows all available packages, classes, properties and methods. All related information is connected by hyperlinks which gives you a highly convenient way to access the relevant information.</p> +<p>Of course there are also new widgets. A new advanced table widget has been introduced which is a virtual list view component that allows to handle many thousands of entries. Its features also make it possible to dynamically load the data from a remote server (using RPC for example). A splitpane - one of the long-awaited widgets - is now included. Full-blown logging capabilities featuring various appenders are available as well.</p> +<p>There are a lot more changes and enhancements. For details please take a look at <a href="http://qooxdoo.org/about/release_notes">the release notes</a>. Migration support simplifies the switch from the last qooxdoo release 0.5.3. <a href="http://qooxdoo.org/download">qooxdoo 0.6</a> is the perfect framework to build highly-interactive web applications. Why don't you start now? <a href="http://qooxdoo.org/download">Just download qooxdoo today!</a></p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=onwQzIon"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=onwQzIon" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=jYfYN2gj"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=jYfYN2gj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=0psukVw3"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=0psukVw3" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=eXdvErgL"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=eXdvErgL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=KM4zclIk"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=KM4zclIk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=hfgM1jFS"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=hfgM1jFS" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=LGUxEmi5"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=LGUxEmi5" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=qz5zRqV5"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=qz5zRqV5" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/qooxdoo-06-released/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>Introduce new tree compiler</title>
+ <link>http://news.qooxdoo.org/introduce-new-tree-compiler</link>
+ <comments>http://news.qooxdoo.org/introduce-new-tree-compiler#comments</comments>
+ <pubDate>Thu, 31 Aug 2006 16:02:27 +0000</pubDate>
+ <dc:creator>Sebastian</dc:creator>
+
+ <category>Announcements</category>
+
+ <category>Development</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/introduce-new-tree-compiler</guid>
+ <description><![CDATA[ +Another step forward to highly optimized applications based on qooxdoo: I would like to introduce the tree "compiler". The tree compiler is able to "compile" a syntax tree (generated by treegenerator.py which uses the tokenizer.py) back to optimized JavaScript code. Its feature set is comparable to the old [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>Another step forward to highly optimized applications based on qooxdoo: I would like to introduce the tree "compiler". The tree compiler is able to "compile" a syntax tree (generated by treegenerator.py which uses the tokenizer.py) back to optimized JavaScript code. Its feature set is comparable to the old compiler, which was directly based on the result of the tokenizer.py script. It completely removes comments, whitespaces and other optional stuff from the original JavaScript code. </p> +<p>This tree compiler is an important step, because it will allow us to do the following awesome things in the future:</p> +<ul> +<li>Remove complete methods (debug statements, …)</li> +<li>Remove cross-browser constructions and generate a version for each browser/engine.</li> +<li>Compress variable names</li> +<li>Lay out strings and reduce usage of simple constants (like "auto", "100%", …) for considerable IE performance improvements</li> +<li>Obfuscate the whole application (variable, function and class names)</li> +</ul> +<p>etc.</p> +<p>Now the interesting part: The tree compiler is the default from now on. It is already available in SVN and will be in the final release of qooxdoo 0.6. The tree compiler was tested against qooxdoo and another big internal project so we think it's quite stable already. It may not be free of bugs however, but I'm happy to fix bugs as fast as you can report them <img src='http://news.qooxdoo.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p> +<p>If you have problems with this new compiler, you can use the old one using the "–use-token-compiler" argument (generator.py). Each Makefile which is included in qooxdoo, has a new variable (OLDCOMPILER) in the first lines of the file which lets you select the compiler (simply set it to "true").</p> +<p>I hope you enjoy this new era of JavaScript optimization. Kudos to Til - without the treegenerator.py developed by him, qooxdoo would maybe not have seen such a tree-based optimizer.</p> +<p>You can immediately test the new compiler. Its results can also been seen online in <a href="http://qooxdoo.org/demo">the online demos</a> and <a href="http://api.qooxdoo.org">the API viewer</a>.</p> +<p>For all SDK/source version users: Please make sure to delete the directory ".cache". A simple "make distclean" will do this for you.</p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=IY1PzpQT"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=IY1PzpQT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=bQM4qh6n"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=bQM4qh6n" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=xNREhjUN"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=xNREhjUN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=WRp5C951"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=WRp5C951" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=1jl7qoQY"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=1jl7qoQY" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=PSL1b5Rt"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=PSL1b5Rt" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=mGL5WaXu"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=mGL5WaXu" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=e3rRUVoh"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=e3rRUVoh" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/introduce-new-tree-compiler/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>qooxdoo 0.6 (Release Candidate 1) available</title>
+ <link>http://news.qooxdoo.org/qooxdoo-06-release-candidate-1-available</link>
+ <comments>http://news.qooxdoo.org/qooxdoo-06-release-candidate-1-available#comments</comments>
+ <pubDate>Sat, 19 Aug 2006 02:31:26 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Release</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/qooxdoo-06-release-candidate-1-available</guid>
+ <description><![CDATA[ +Many aspects of qooxdoo have been improved to make it an even more professional and complete JavaScript framework. +A lot of issues, that have been brought up and discussed on the mailing list before, have been addressed. Some of the most noticable additions include a qooxdoo-based viewer for the [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>Many aspects of qooxdoo have been improved to make it an even more professional and complete JavaScript framework.</p> +<p>A lot of issues, that have been brought up and discussed on the mailing list before, have been addressed. Some of the most <a href="http://qooxdoo.org/documentation/improvements_for_qooxdoo_0.6">noticable additions</a> include a qooxdoo-based viewer for the auto-generated API documentation, a more powerful virtual list view and a smart build process that makes optimizing, compressing, linking and deployment of custom applications a snap.</p> +<p>A Release Candidate 1 is now available for <a href="http://qooxdoo.org/download">easy download</a>. That way people can immediately start to get themselves familiar with the most important improvements. </p> +<p>We would like to thank all users, contributors and fellow developers for their ongoing help and support. Keep up the good work!</p> +<p><a href="http://demo.qooxdoo.org">Try online demos</a></p> +<p><a href="http://digg.com/software/qooxdoo_0_6_Release_Candidate_1_available">Digg this</a> </p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=jvtn1dh2"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=jvtn1dh2" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=9WhvLamK"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=9WhvLamK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=FpMP6QAZ"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=FpMP6QAZ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=HjpVjKW8"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=HjpVjKW8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=vPJyRCRJ"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=vPJyRCRJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=5pCaV3g8"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=5pCaV3g8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=R1Pi8XSF"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=R1Pi8XSF" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=s9FAqx6S"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=s9FAqx6S" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/qooxdoo-06-release-candidate-1-available/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>Branch “namespaces” discontinued</title>
+ <link>http://news.qooxdoo.org/branch-namespaces-discontinued</link>
+ <comments>http://news.qooxdoo.org/branch-namespaces-discontinued#comments</comments>
+ <pubDate>Wed, 16 Aug 2006 21:38:12 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Announcements</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/use-trunk-instead-of-namespaces-branch</guid>
+ <description><![CDATA[ +IMPORTANT: Until recently the major development work towards the next release 0.6 has been done in a development branch named "namespaces". This branch is now discontinued. Its content has been transfered into the SVN trunk. +Future development of qooxdoo will concentrate on changes made in the trunk. Anyone interested [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>IMPORTANT: Until recently the major development work towards the next release 0.6 has been done in a development branch named "namespaces". This branch is now discontinued. Its content has been transfered into the SVN trunk.</p> +<p>Future development of qooxdoo will concentrate on changes made in the trunk. Anyone interested in an up-to-date version of the framework should simply <a href="http://qooxdoo.org/documentation/user/checkout_from_svn">checkout the latest revision of the SVN trunk</a> . Clearly, these snapshots are not expected to be stable enough for production use. They are not even supposed to be functional at all. It may happen that the trunk is broken for not only hours (delibaretely) but even days (rather by accident). Think of the trunk as a permanent work-in-progress that after potentially unstable phases finally leads to the next official release.</p> +<p>The content of the previous SVN trunk has been moved to a branch named "legacy_0_5_x". This branch may see some changes, particularly bugfixes and backports of modifications made in the trunk. Please do not expect many substantial improvements in this 0.5 line of qooxdoo, though. There may be a release 0.5.4 sometime, but this clearly depends on user contribution for this now "old" line of qooxdoo.</p> +<p>Please note, that the existing documentation has still to be updated to reflect the switch from the "namespaces" branch to the trunk. Information formerly specific to the "namespaces" branch should now be valid for the trunk.</p> +<p>We are getting closer to qooxdoo 0.6 <img src='http://news.qooxdoo.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=c2oS4gbi"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=c2oS4gbi" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=Didl6LAR"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=Didl6LAR" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=DiHnHveW"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=DiHnHveW" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=AUWodtyY"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=AUWodtyY" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=Aw6D7Zyp"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=Aw6D7Zyp" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=kUraOsvP"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=kUraOsvP" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=7H4Jc2VJ"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=7H4Jc2VJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=bWYU5yHV"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=bWYU5yHV" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/branch-namespaces-discontinued/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>Planned Improvements for qooxdoo 0.6</title>
+ <link>http://news.qooxdoo.org/planned-improvements-for-qooxdoo-06</link>
+ <comments>http://news.qooxdoo.org/planned-improvements-for-qooxdoo-06#comments</comments>
+ <pubDate>Thu, 10 Aug 2006 09:05:40 +0000</pubDate>
+ <dc:creator>Andreas Ecker</dc:creator>
+
+ <category>Announcements</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/planned-improvements-for-qooxdoo-06</guid>
+ <description><![CDATA[ +There is an extended update of an older post with respect to new features and modifications that are currently being implemented. +All interested qooxdoo users are welcome to bring themselves up-to-date and are invited to get involved in qooxdoo development. It takes not more than checking-out qooxdoo from [...]]]></description>
+ <content:encoded><![CDATA[<p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> +<p>There is an <a href="http://qooxdoo.org/documentation/improvements_for_qooxdoo_0.6">extended update</a> of an older post with respect to new features and modifications that are currently being implemented.</p> +<p>All interested qooxdoo users are welcome to bring themselves up-to-date and are invited to get involved in qooxdoo development. It takes not more than checking-out qooxdoo from a subversion repository and doing a "make" on your shell afterwards. </p> +<p>A couple of significant differences that are being addressed are:</p> +<ul> +<li>Namespaces</li> +<li>Documentation</li> +<li>Building and Deployment</li> +<li>Table</li> +<li>Remote Procedure Calls </li> +</ul> +<p> </body> </html> +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=5v7NltR5"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=5v7NltR5" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=28Nxb6gr"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=28Nxb6gr" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=au1dDM3I"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=au1dDM3I" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=Qh1RG75B"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=Qh1RG75B" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=is6ZeKJd"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=is6ZeKJd" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=IEWlxTSe"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=IEWlxTSe" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=MZTcg2Kn"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=MZTcg2Kn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=0hWzprwr"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=0hWzprwr" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/planned-improvements-for-qooxdoo-06/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>qooxdoo 0.5.3 released</title>
+ <link>http://news.qooxdoo.org/qooxdoo-053-released</link>
+ <comments>http://news.qooxdoo.org/qooxdoo-053-released#comments</comments>
+ <pubDate>Wed, 12 Jul 2006 09:09:27 +0000</pubDate>
+ <dc:creator>Sebastian</dc:creator>
+
+ <category>Announcements</category>
+
+ <category>Release</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/announcements/qooxdoo-053-released</guid>
+ <description><![CDATA[This is just a small release with some bugfixes for the users of any previous 0.5.x release. Also take a look at the release notes. Download the new version here at sourceforge. + +]]></description>
+ <content:encoded><![CDATA[<p>This is just a small release with some bugfixes for the users of any previous 0.5.x release. Also take a look at the <a href="http://qooxdoo.org/documentation/user/release_notes">release notes</a>. Download the new version <a href="http://sourceforge.net/project/showfiles.php?group_id=129854&package_id=151847">here at sourceforge</a>. +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=ou9mifFX"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=ou9mifFX" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=8ZEMUWxe"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=8ZEMUWxe" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=JSsN4MH7"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=JSsN4MH7" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=MIoFJanB"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=MIoFJanB" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=ObKHscCV"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=ObKHscCV" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=UbVce4qb"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=UbVce4qb" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=zAeLNyw2"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=zAeLNyw2" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=k50Tl2Qd"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=k50Tl2Qd" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/qooxdoo-053-released/feed/</wfw:commentRss>
+ </item>
+ <item>
+ <title>Bugzilla mailing list</title>
+ <link>http://news.qooxdoo.org/bugzilla-mailing-list</link>
+ <comments>http://news.qooxdoo.org/bugzilla-mailing-list#comments</comments>
+ <pubDate>Mon, 19 Jun 2006 09:24:26 +0000</pubDate>
+ <dc:creator>Sebastian</dc:creator>
+
+ <category>Bugs</category>
+
+ <category>Mailing lists</category>
+
+ <guid isPermaLink="false">http://news.qooxdoo.org/uncategorized/bugzilla-mailing-list</guid>
+ <description><![CDATA[I’ve just registered and configured a new mailing list, which is used to monitor the bug activity. Bugs in qooxdoo are also used to manage feature additions and enhancement wishes. +You can register yourself to always stay up-to-date with the further development of qooxdoo. + +]]></description>
+ <content:encoded><![CDATA[<p>I’ve just registered and configured a new <a href="http://lists.sourceforge.net/lists/listinfo/qooxdoo-bugs">mailing list</a>, which is used to monitor the bug activity. Bugs in <a href="http://qooxdoo.org">qooxdoo</a> are also used to manage feature additions and enhancement wishes.</p> +<p>You can <a href="http://lists.sourceforge.net/lists/listinfo/qooxdoo-bugs">register yourself</a> to always stay up-to-date with the further development of qooxdoo. +</p> + +<div class="feedflare"><a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=K0Py8qhO"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=K0Py8qhO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=jS2WTLmd"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=jS2WTLmd" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=bEAB9eQG"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=bEAB9eQG" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=RnriB89x"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=RnriB89x" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=XRTQ94fT"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=XRTQ94fT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=TzV4EYJn"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=TzV4EYJn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=e6upeVfr"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=e6upeVfr" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/qooxdoo/news/content?a=kU4viCW8"><img src="http://feeds.feedburner.com/~f/qooxdoo/news/content?i=kU4viCW8" border="0"></img></a></div>]]></content:encoded>
+ <wfw:commentRss>http://news.qooxdoo.org/bugzilla-mailing-list/feed/</wfw:commentRss>
+ </item>
+ </channel>
+</rss><!-- Dynamic Page Served (once) in 0.658 seconds -->
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/safari.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/safari.xml new file mode 100644 index 0000000000..9fc3180811 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/safari.xml @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- generator="wordpress/1.5.1.2" --> +<rss version="2.0" + xmlns:content="http://purl.org/rss/1.0/modules/content/" + xmlns:wfw="http://wellformedweb.org/CommentAPI/" + xmlns:dc="http://purl.org/dc/elements/1.1/" +> + +<channel> + <title>Surfin' Safari</title> + <link>http://webkit.org/blog</link> + <description>All about WebKit development</description> + <pubDate>Sat, 18 Nov 2006 22:18:02 +0000</pubDate> + <generator>http://wordpress.org/?v=1.5.1.2</generator> + <language>en</language> + + <item> + <title>Rob Buis is a WebKit Reviewer</title> + <link>http://webkit.org/blog/?p=82</link> + <comments>http://webkit.org/blog/?p=82#comments</comments> + <pubDate>Sat, 18 Nov 2006 22:17:52 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=82</guid> + <description><![CDATA[ Rob Buis is now a qualified WebKit reviewer. Rob was one of the main driving forces behind ksvg2 and kcanvas, along with Nikolas Zimmerman. The code from these libraries has been integrated into WebKit to provide fully integrated HTML/SVG support. Since then, Rob has submitted many WebKit patches for SVG and in many other areas, [...]]]></description> + <content:encoded><![CDATA[ <p>Rob Buis is now a qualified WebKit reviewer. Rob was one of the main driving forces behind ksvg2 and kcanvas, along with Nikolas Zimmerman. The code from these libraries has been integrated into WebKit to provide fully integrated HTML/SVG support. Since then, Rob has submitted many WebKit patches for SVG and in many other areas, including DOM, CSS, graphics support and general refactoring.</p> + <p>Please join me in congratulating Rob. +</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=82</wfw:commentRSS> + </item> + <item> + <title>Google Web Toolkit 1.2 Uses WebKit</title> + <link>http://webkit.org/blog/?p=81</link> + <comments>http://webkit.org/blog/?p=81#comments</comments> + <pubDate>Sat, 18 Nov 2006 08:59:10 +0000</pubDate> + <dc:creator>aroben</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=81</guid> + <description><![CDATA[ Google has just released version 1.2 of the Google Web Toolkit (GWT) with full Mac OS X support provided by WebKit. GWT allows web developers to create shiny AJAX web applications entirely in Java, which GWT compiles to JavaScript. While Mac users were able to use the GWT compiler in previous versions, they couldn’t use [...]]]></description> + <content:encoded><![CDATA[ <p>Google has just <a href="http://googlewebtoolkit.blogspot.com/2006/11/its-official-gwt-12-released.html" title="It's official: GWT 1.2 released">released version 1.2</a> of the <a href="http://code.google.com/webtoolkit/" title="Google Web Toolkit">Google Web Toolkit</a> (GWT) with full Mac OS X support provided by WebKit. GWT allows web developers to create shiny AJAX web applications entirely in Java, which GWT compiles to JavaScript. While Mac users were able to use the GWT compiler in previous versions, they couldn’t use GWT’s hosted browser to debug their web apps. WebKit has made it possible for Google to bring these development tools to the Mac, and, as a surprise Mac-only bonus, web developers using GWT get to use the <a href="http://webkit.org/blog/?p=41" title="Introducing the Web Inspector">Web Inspector</a>, too! +</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=81</wfw:commentRSS> + </item> + <item> + <title>Zack Rusin is a WebKit Reviewer for the Qt Port</title> + <link>http://webkit.org/blog/?p=79</link> + <comments>http://webkit.org/blog/?p=79#comments</comments> + <pubDate>Thu, 16 Nov 2006 02:32:07 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=79</guid> + <description><![CDATA[ Zack Rusin is now a qualified reviewer for Qt platform code in WebKit. Although he has not yet submitted many patches to WebKit as such, he has a long history working with KHTML and did much of the Unity porting work originally. As such, he is likely one of the best reviewers for Qt platform [...]]]></description> + <content:encoded><![CDATA[ <p>Zack Rusin is now a qualified reviewer for Qt platform code in WebKit. Although he has not yet submitted many patches to WebKit as such, he has a long history working with KHTML and did much of the Unity porting work originally. As such, he is likely one of the best reviewers for Qt platform code. Congrats, Zack, and thank you. +</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=79</wfw:commentRSS> + </item> + <item> + <title>The Safari Team’s Favorite Websites</title> + <link>http://webkit.org/blog/?p=77</link> + <comments>http://webkit.org/blog/?p=77#comments</comments> + <pubDate>Tue, 07 Nov 2006 03:00:46 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=77</guid> + <description><![CDATA[ Usually this blog has serious content about WebKit. But one of the great things about the web is that it’s actually lots of fun. +To give you a bit of the flavor of the Safari/WebKit Team’s personality, here are a few of our favorite websites. +Please post some of your favorite websites in the comments. + Apple Stuff + + Daring Fireball [...]]]></description> + <content:encoded><![CDATA[ <p>Usually this blog has serious content about WebKit. But one of the great things about the web is that it’s actually lots of fun.<br /> +To give you a bit of the flavor of the Safari/WebKit Team’s personality, here are a few of our favorite websites.<br /> +Please post some of <em>your</em> favorite websites in the comments.</p> + <h4>Apple Stuff</h4> + <ul> + <li><a href="http://daringfireball.net/">Daring Fireball <http://daringfireball.net/></a></li> + <li><a href="http://crazyapplerumors.com/">Crazy Apple Rumors <http://crazyapplerumors.com/></a></li> + </ul> + <h4>News & Information</h4> + <ul> + <li><a href="http://digg.com/">Digg <http://digg.com/></a></li> + <li><a href="http://wikipedia.org/">Wikipedia <http://wikipedia.org/></a></li> + <li><a href="http://valleywag.com/">Valleywag <http://www.valleywag.com/></a></li> + <li><a href="http://slate.com/">Slate <http://slate.com/></a></li> + </ul> + <h4>Media & Celebrities</h4> + <ul> + <li><a href="http://televisionwithoutpity.com/">Television Without Pity <http://televisionwithoutpity.com/></a></li> + <li><a href="http://aintitcool.com/">Ain’t it Cool News <http://aintitcool.com/></a></li> + <li><a href="http://imdb.com/">The Internet Movie Database <http://imdb.com/></a></li> + <li><a href="http://thesuperficial.com/">The Superficial <http://thesuperficial.com/></a></li> + <li><a href="http://www.apple.com/trailers/">Apple Movie Trailers <http://www.apple.com/trailers/></a></li> + </ul> + <h4>Amusement</h4> + <ul> + <li><a href="http://cuteoverload.com/">Cute Overload! <http://cuteoverload.com/></a></li> + <li><a href="http://www.theonion.com/">The Onion <http://www.theonion.com/></a></li> + <li><a href="http://youtube.com/">YouTube <http://youtube.com/></a></li> + <li><a href="http://xfm.co.uk/article.asp?id=3673">Ricky Gervais Podcast <http://xfm.co.uk/article.asp?id=3673></a></li> + <li><a href="http://homestarrunner.com/">Homestar Runner <http://homestarrunner.com/></a></li> + <li><a href="http://spamusement.com/">Spamusement <http://spamusement.com/></a></li> + </ul> + <h4>Communication</h4> + <ul> + <li><a href="http://www.facebook.com/">The Facebook <http://www.facebook.com/></a></li> + <li><a href="http://mail.google.com/">GMail <http://mail.google.com/></a></li> + </ul> + <h4>Shameless Nerdery</h4> + <ul> + <li><a href="http://xkcd.com/">xkcd <http://xkcd.com/></a></li> + <li><a href="http://worldofwarcraft.com/">World of Warcraft Community Site <http://worldofwarcraft.com/></a></li> + <li><a href="http://build.webkit.org/">WebKit Buildbot <http://build.webkit.org/></a> - but only when it’s green </li> + </ul> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=77</wfw:commentRSS> + </item> + <item> + <title>ADC Article about Apple Nightly Builds</title> + <link>http://webkit.org/blog/?p=78</link> + <comments>http://webkit.org/blog/?p=78#comments</comments> + <pubDate>Sat, 04 Nov 2006 02:33:23 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=78</guid> + <description><![CDATA[ Apple Developer Connection has posted an article on using nightly builds. Most of this content won’t be news to people who are already using nightlies. But it might be of interest to web developers and application developers who have not tried nightlies yet. There is also some interesting info about canvas changes. + +]]></description> + <content:encoded><![CDATA[ <p>Apple Developer Connection has posted an article on <a href="http://developer.apple.com/opensource/internet/nightlywebkit.html">using nightly builds</a>. Most of this content won’t be news to people who are already using <a href="http://nightly.webkit.org">nightlies</a>. But it might be of interest to web developers and application developers who have not tried nightlies yet. There is also some interesting info about canvas changes. +</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=78</wfw:commentRSS> + </item> + <item> + <title>Sam Weinig is a WebKit Reviewer</title> + <link>http://webkit.org/blog/?p=76</link> + <comments>http://webkit.org/blog/?p=76#comments</comments> + <pubDate>Wed, 01 Nov 2006 01:00:05 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=76</guid> + <description><![CDATA[ Sam Weinig is now a qualified WebKit reviewer. Sam has done a lot of coding in different areas of WebKit, including large refactoring changes and coding style cleanup, as well as large projects like autogenerating the Objective-C DOM bindings. At this point, he probably knows the coding style guidelines better than most of the existing [...]]]></description> + <content:encoded><![CDATA[ <p>Sam Weinig is now a qualified WebKit reviewer. Sam has done a lot of coding in different areas of WebKit, including large refactoring changes and coding style cleanup, as well as large projects like autogenerating the Objective-C DOM bindings. At this point, he probably knows the coding style guidelines better than most of the existing reviewers. And now you get to bug him to review your patches.</p> + <p>Please join me in congratulating Sam.</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=76</wfw:commentRSS> + </item> + <item> + <title>Optimizing Page Load Time (and a little about the Debug menu)</title> + <link>http://webkit.org/blog/?p=75</link> + <comments>http://webkit.org/blog/?p=75#comments</comments> + <pubDate>Tue, 31 Oct 2006 06:28:04 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=75</guid> + <description><![CDATA[ We don’t usually just repost content from other blogs here. But a lot of web developers seem to read this site, and those of us who work on WebKit are totally into loading web pages as fast as possible. With that in mind, here’s a great article on Optimizing Page Load Time. I recommend reading [...]]]></description> + <content:encoded><![CDATA[ <p>We don’t usually just repost content from other blogs here. But a lot of web developers seem to read this site, and those of us who work on WebKit are totally into loading web pages as fast as possible. With that in mind, here’s a great article on <a href="http://www.die.net/musings/page_load_time/">Optimizing Page Load Time</a>. I recommend reading and applying much of the advice here. However, I’ll note that we have experimented with using HTTP pipelining for Safari in the past, too many major servers gave garbage results in the face of it. While we may periodically re-evaluate this, we are not holding back on it out of spite or anything.</p> + <p>Another tip you might find handy as a web developer is the “Show Page Load Test Window” option in the Safari Debug menu. You can turn on the Debug menu by typing <code>defaults write com.apple.Safari IncludeDebugMenu YES</code> at a shell prompt, and then restarting Safari. This menu includes a number of rough debugging tools that we created mainly for browser testing, but you may find some of them handy for web development. The page load test in particular is interesting because it measures page load time in a more precise way than either onload timing or just using a stopwatch. If you change the “Suite” pop-up menu to “URL”, you can type the URL of your choice and get a fairly precise time for loading it. If you empty the cache first, you can get an uncached time.</p> + <p>I recommend trying this a couple of times as you test your site. We’ve found that it’s a lot easier to improve performance when you have a precise way to measure it.</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=75</wfw:commentRSS> + </item> + <item> + <title>Adobe Apollo Uses WebKit</title> + <link>http://webkit.org/blog/?p=74</link> + <comments>http://webkit.org/blog/?p=74#comments</comments> + <pubDate>Mon, 30 Oct 2006 10:11:55 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=74</guid> + <description><![CDATA[ A few months ago, Adobe announced Apollo, a tool that lets you build desktop applications based on Flash and web technologies like HTML and JavaScript. A bunch of blog posts have features whizzy screenshots. This is pretty cool stuff, you can use all your web development skills to make slick looking desktop apps. + Even more exciting, [...]]]></description> + <content:encoded><![CDATA[ <p>A few months ago, Adobe announced <a href="http://labs.adobe.com/wiki/index.php/Apollo">Apollo</a>, a tool that lets you build desktop applications based on Flash and web technologies like HTML and JavaScript. A bunch of blog posts have features <a href="http://blog.digitalbackcountry.com/?p=75">whizzy screenshots</a>. This is pretty cool stuff, you can use all your web development skills to make slick looking desktop apps.</p> + <p>Even more exciting, Adobe has announced that Apollo <a href="http://casario.blogs.com/mmworld/2006/10/apollo_will_use.html">will use WebKit</a> as its HTML layout engine. Welcome to the world of WebKit, Adobe.</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=74</wfw:commentRSS> + </item> + <item> + <title>Color Spaces</title> + <link>http://webkit.org/blog/?p=73</link> + <comments>http://webkit.org/blog/?p=73#comments</comments> + <pubDate>Sun, 22 Oct 2006 11:37:48 +0000</pubDate> + <dc:creator>hyatt</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=73</guid> + <description><![CDATA[ I was pointed to this article about color spaces in Web browsers. The ultimate point of the article, that it would be good for a Web browser to be “Color Smart”, i.e., to support not only embedded color profiles in images but also to correct unprofiled images to sRGB is a sound one. [...]]]></description> + <content:encoded><![CDATA[ <p>I was pointed to this article about <a href="http://regex.info/blog/photo-tech/color-spaces-page3">color spaces in Web browsers</a>. The ultimate point of the article, that it would be good for a Web browser to be “Color Smart”, i.e., to support not only embedded color profiles in images but also to correct unprofiled images to sRGB is a sound one. However, the author takes a few potshots at Web browsers on the Mac, and I thought I’d respond to make it clear what the technical hurdles are with this problem.</p> + <p>First of all, if you correct unprofiled images to sRGB, you have to correct all drawing to sRGB. This includes everything drawn by CSS (borders, backgrounds, text). This is not difficult to do under the hood, although it is difficult to do it with no performance regression in our benchmarks at all. In fact we even tried this during the Tiger development cycle (just correcting everything drawn to sRGB), but it slowed us down.</p> + <p>The big hurdle that we ran into, though, was with the drawing we did not control, namely the Flash plug-in. The problem is that designers specify colors in Flash and colors in CSS in the Web page, and they expect those colors to match. Because Flash’s drawing isn’t correcting to sRGB, if we did it in Safari, there would be color mismatches all over the place. These mismatches look far worse than if we just don’t correct at all.</p> + <p>(This mismatch with plug-ins is presumably the reason that this feature was not enabled by default in Mac IE.)</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=73</wfw:commentRSS> + </item> + <item> + <title>Safari Market Share Continues to Increase</title> + <link>http://webkit.org/blog/?p=71</link> + <comments>http://webkit.org/blog/?p=71#comments</comments> + <pubDate>Tue, 10 Oct 2006 20:23:16 +0000</pubDate> + <dc:creator>maciej</dc:creator> + + <category>Uncategorized</category> + <guid>http://webkit.org/blog/?p=71</guid> + <description><![CDATA[ According to recent reports, Safari market share is still increasing. According to one survey, it’s up to 3.56%. The total including other WebKit-based browsers could be even higher, it’s hard to tell from the somewhat thin stats. It’s cool to see WebKit getting more and more users in any case. + +]]></description> + <content:encoded><![CDATA[ <p>According to recent reports, <a href="http://www.macnewsworld.com/rsstory/53528.html">Safari market share is still increasing.</a> According to one survey, it’s up to 3.56%. The total including other WebKit-based browsers could be even higher, it’s hard to tell from the somewhat thin stats. It’s cool to see WebKit getting more and more users in any case. +</p> +]]></content:encoded> + <wfw:commentRSS>http://webkit.org/blog/?feed=rss2&p=71</wfw:commentRSS> + </item> + </channel> +</rss> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/zimbra-atom.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/zimbra-atom.xml new file mode 100644 index 0000000000..2a09b9118d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/feeds/zimbra-atom.xml @@ -0,0 +1,699 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en"> +<title>Zimbra - Blog</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/" /> +<modified>2006-11-15T04:46:36Z</modified> +<tagline>All things Zimbra</tagline> +<id>tag:www.zimbra.com,2006:/blog//1</id> +<generator url="http://www.movabletype.org/" version="3.2">Movable Type</generator> +<copyright>Copyright (c) 2006, Kevin</copyright> +<entry> +<title>What's new in ZCS 4.5 Beta 1</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/11/whats_new_in_zc.html" /> +<modified>2006-11-15T04:46:36Z</modified> +<issued>2006-11-15T04:12:42Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.129</id> +<created>2006-11-15T04:12:42Z</created> +<summary type="text/plain">We posted the first beta of Zimbra 4.5 this past Friday. Major new features of 4.5 include complex password enforcement, identities, personal distro lists's, server performance improvements, backup/restore in the admin console, a search builder in the admin console, user-set...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>We <a href="http://www.zimbra.com/forums/showthread.php?t=5380">posted</a> the first beta of Zimbra 4.5 this past Friday.</p> + +<p>Major new features of 4.5 include complex password enforcement, identities, personal distro lists's, server performance improvements, backup/restore in the admin console, a search builder in the admin console, user-set default fonts for HTML compose, an upgrade to use MySQL 5.0, and a Lotus Domino migration wizard. More details can be found in the <a href="http://www.zimbra.com/pdf/Zimbra%20OS%204.5%20Beta%201%20Release%20Notes.pdf">beta release notes</a>.</p>]]> + +</content> +</entry> +<entry> +<title>How much data does Zimbra Mobile use?</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/11/how_much_data_does_zimbra_mobile_use.html" /> +<modified>2006-11-15T04:11:35Z</modified> +<issued>2006-11-15T03:49:42Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.128</id> +<created>2006-11-15T03:49:42Z</created> +<summary type="text/plain">Lots of people have asked how much data Zimbra Mobile uses over the wire. Just got my Cingular bill so thought I'd post a screen shot to help explain. ...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Lots of people have asked how much data <a href="http://www.zimbra.com/products/zimbra_mobile.html">Zimbra Mobile</a> uses over the wire. Just got my Cingular bill so thought I'd post a screen shot to help explain. </p>]]> +<![CDATA[<p>This is just a snapshot of one day Nov 7th and the total is for the previous 30days. My Nokia E61 is configured to sync every 15min from 8am -> 8pm 7days a week and then every 4hrs overnight (8pm->8am) On avg each check for mail, calendar, and contacts consumes ~20KB which turns out to be about 1.3MB per day or ~40MB per month. Cingular has a $19.99 Media Max plan that gives you unlimited data and 200 txt msgs so it works out pretty well.</p> + +<p><img alt="Zimbra Mobile Data Usage" src="http://www.zimbra.com/blog/archives/images/Picture%209.png" width="671" height="796" /><br /> +</p>]]> +</content> +</entry> +<entry> +<title>Taking Zimbra Offline</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/11/taking_zimbra_offline.html" /> +<modified>2006-11-09T19:43:13Z</modified> +<issued>2006-11-09T17:32:10Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.127</id> +<created>2006-11-09T17:32:10Z</created> +<summary type="text/plain">Zimbra users have been asking for how they can take the Zimbra AJAX UI offline. Today at Web 2.0 we demo'd this for the first time. ...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Zimbra users have been asking for how they can take the Zimbra AJAX UI offline. Today at Web 2.0 we demo'd this for the first time. </p>]]> +<![CDATA[<p> The design goal is to have the same user experience with Zimbra both online and offline. Technically the Zimbra Offline client is the same AJAX client UI but now connecting to a local sync'd cache of the data and more importantly the ability to search, tag, organize, etc without network access. The two way sync of mail, calendar, contacts, and documents will allow Zimbra user's to take their collaboration data together with the Zimbra AJAX experience with them on the road or in places without a network connection and when they come back online - all of the changes made while offline (like composing, deleting, moving, creating messages, contacts, events or folders) are sync'd back to the cloud. Just like traditional offline mail clients - messages pending to be sent are stored in an Outbox where you can edit and view them until re-connected. You'll notice in the screenshots that both POP accounts and RSS feed folders are sync'd when in offline mode just as when online. RSS folders have been part of Zimbra for a while. POP aggregation will be part of our next major release and IMAP will be added shortly after that. Mail identities allows you to respond with the FROM and REPLY-TO addresses that the mail come with - responding to mail POP'd from gmail; Zimbra will automatically set the FROM address to your @gmail.com account. This feature is also useful for people who would like to respond as support@company.com when responding on behalf of a support team mail list for example. Mail identities will also be part of Zimbra's next major release. Watch this space for more on the architecture of the offline sync cache - meanwhile below are some screenshots. The beta version of the offline client for email and contacts will be available in Q4. </p> + +<p><img alt="Zimbra Outbox" src="http://www.zimbra.com/blog/archives/images/Picture%201.png" width="356" height="244" /><br/></p> + +<p><img alt="Zimbra Offline Compose" src="http://www.zimbra.com/blog/archives/images/Picture%202.png" width="713" height="450" /><br/></p> + +<p><img alt="Zimbra Offline POP accounts" src="http://www.zimbra.com/blog/archives/images/Picture%203.png" width="511" height="462" /><br/></p> + +<p><img alt="Zimbra Offline Sync" src="http://www.zimbra.com/blog/archives/images/Picture%204.png" width="427" height="252" /><br/></p> + +<p><img alt="Zimbra Mail Identities" src="http://www.zimbra.com/blog/archives/images/Picture%205.png" width="666" height="482" /></p> + +<p></p> + +<p></p>]]> +</content> +</entry> +<entry> +<title>Busy week @ Zimbra</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/11/busy_week_zimbra.html" /> +<modified>2006-11-07T00:08:50Z</modified> +<issued>2006-11-06T23:53:34Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.126</id> +<created>2006-11-06T23:53:34Z</created> +<summary type="text/plain">Several events going on this week. Satish, John and Greg will be at VMWorld where Satish will take part in tomorrow's keynote. Later this week at ISPCon I'll be on a panel - What the Web 2.0?. Last but not...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Several events going on this week. Satish, John and Greg will be at <a href="http://www.vmware.com/vmworld/">VMWorld</a> where Satish will take part in <a href="https://www.vmware.com/vmworld/agenda_keynotes.html">tomorrow's keynote</a>. Later this week at <a href="http://www.ispcon.com/">ISPCon</a> I'll be on a panel - <a href="http://www.ispcon.com/conference/sessionsbyday.php#E6">What the Web 2.0?</a>. Last but not least <a href="http://www.web2con.com/cs/web2006/view/e_spkr/2441">Satish</a> will be back on the main stage at <a href="http://www.web2con.com/">Web 2.0</a>. For those who missed it last year; <a href="http://blogsearch.google.com/blogsearch?hl=en&q=zimbra+web+2.0&ie=UTF-8&as_maxm=11&as_miny=2005&as_maxy=2005&as_minm=10&as_mind=1&as_maxd=1&as_drrb=b&ctz=480&c1cr=10%2F1%2F2005&c2cr=11%2F1%2F2005&btnD=Go">Zimbra launched at Web 2.0</a>.</p>]]> + +</content> +</entry> +<entry> +<title>The Ajax Experience, Oct 23-25, Boston, MA</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/10/the_ajax_experi.html" /> +<modified>2006-11-02T20:10:26Z</modified> +<issued>2006-10-29T19:08:04Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.125</id> +<created>2006-10-29T19:08:04Z</created> +<summary type="text/plain">Below are random thoughts on three days in Boston at The Ajax Experience. I gave a talk titled Ajax in the Enterprise....</summary> +<author> +<name>Conrad</name> +<email>cdamon@zimbra.com</email></author> +<dc:subject>Conrad Damon</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Below are random thoughts on three days in Boston at <br /> +<a href="http://www.theajaxexperience.com">The Ajax Experience</a>. I gave a talk titled <a href="http://www.theajaxexperience.com/s/show/59/slides/Conrad_Damon/Ajax_in_the_Enterprise.pdf">Ajax in the Enterprise</a>.</p>]]> +<![CDATA[<p>... AOL was giving away T-shirts by the hundreds, in solid, bright colors with <br /> +words like "Geek" or "2.0" on them. Some conferencegoers walked away with <br /> +several, which wasn't discouraged - there seemed to be an endless supply. Every <br /> +time I walked by the booth I wanted ("want" isn't the right word, it's more the <br /> +primal lust for free stuff) to grab a shirt or two, when the last thing in the <br /> +world I need is more T-shirts. Eight years ago when I moved I gave 99 shirts, <br /> +most of them unworn, to the Salvation Army. These were garish and ugly, and <br /> +trying in AOL's typically disingenuous way to plug into geek culture. Plus, <br /> +there's the associated guilt of all those unopened CDs taking up landfill space. <br /> +Hence the little cartoon angel on my right shoulder. Of course, the little <br /> +cartoon devil on my left shoulder made himself heard: "Dude, it's FREE! Don't be <br /> +such a Herb! If you don't take one, someone else will get it. You've earned it. <br /> +And dude: it's FREE!" So it went, and every walk past the AOL booth became an <br /> +exercise in self-denial of something I didn't actually want at all, and the <br /> +thimbleful of pride I felt on passing by empty-handed made me feel like some sort of <br /> +lame modern-day ascetic.</p> + +<p>... speaking of AOL (I don't mean to pick on AOL, even the newly warm and fuzzy <br /> +AOL, but they make it really easy), one of their minions gave a keynote during <br /> +which he screened a movie where they went up to people on the street or in the <br /> +grocery store and asked them what they thought "Ajax" was. And OH MY GAWD (the <br /> +voice here should be Dr Cox from Scrubs), they thought it was a cleanser! What a <br /> +bunch of losers!</p> + +<p>Crikey.</p> + +<p>... really regret my get-out-of-Dodge trip planning, which made me miss Brendan <br /> +Eich's closing keynote on Javascript 2.</p> + +<p>... "stack" is the new "solution".</p> + +<p>... <a href="http://www.openqa.org/selenium/">Selenium</a>, a product for doing functional client <br /> +testing in an Ajax environment, got a lot of buzz. Our QA team is looking into it. They've had to <br /> +pound on Mercury's QTP pretty hard to get it to work with our client, and I'm hoping <br /> +Selenium will be way more straightforward.</p> + +<p>... the booths from some of the sponsors such as Google, Sun, and Ask were more<br /> +focused on recruiting than on demos, always a sign of a technology on its way up.</p> + +<p>... after the experts' panel on Monday night, I headed to the hotel bar and met <br /> +up with the Netflix crew. As a longtime Netflix member, I couldn't resist rattling on <br /> +about what I liked and disliked about their site and service. Not only did they <br /> +listen - brave souls - they bought me beer. The more beer I had in me, the more <br /> +clever and insightful I became, and I think they caught on to that.</p> + +<p>The Netflix UI makes for a great case study in how going from HTML to Ajax <br /> +can improve the user experience.</p> + +<p>... there is a bewildering array of Ajax toolkits out there, and at least two of <br /> +the presentations were overviews of frameworks. The space has exploded, and <br /> +sooner rather than later, it will contract. Documentation, often overlooked, <br /> +will be key to adoption. It's hard to bet against <br /> +<a href="http://www.dojotoolkit.org/">Dojo</a>, with its breadth, careful design, and technical impressiveness. <br /> +I heard good things about <a href="http://jquery.com/">jQuery</a>, and <a href="http://developer.yahoo.com/yui/">YUI</a> looks clean. For all-Java shops there's <br /> +<a href="http://code.google.com/webtoolkit/">GWT</a>, and possibly <a ref="http://getahead.ltd.uk/dwr">DWR</a>.</p> + +<p>... My ad hoc plan of attack, and reviews, in order of attendance:</p> + +<p>Leveraging Ajax for Enterprise Application Development - mostly good <br /> +content, somewhat awkwardly delivered. Best part was practical tips for shops <br /> +coming up to speed on Ajax.</p> + +<p>Javascript Exposed: There's a Real Programming Language in There (Pt 1), by <br /> +Glenn Vanderburg - had intended to go to Mahemoff's talk on design patterns, but <br /> +he didn't make it to the conference. Glenn's an engaging presenter, which eased <br /> +the fact that it was mostly a tutorial of what you'd find in the O'Reilly book. <br /> +Glenn did a good job of focusing on important bits of the language that are <br /> +often glossed, and I really liked his lists of what he believes the language <br /> +designers got right and wrong.</p> + +<p>Ruining the User Experience, by Aaron Gustafson - the scope of this presentation <br /> +was smaller than I had hoped. From the summary, I thought it would cover UI <br /> +idioms that have been made possible by Ajax but which don't improve the user <br /> +experience, but it was almost all about what to do when Javascript is<br /> +disabled.</p> + +<p>Frameworks Guide, by Nathaniel Schutta - came to this one as a refugee from a <br /> +TIBCO-centric talk on building desktop-like apps in Ajax. It was good to get an <br /> +overview, delivered capably and neutrally, since having developed our own <br /> +toolkit I'm not familiar with others.</p> + +<p>Intro to Dojo / Dojo in Depth, by Alex Russell - Dojo looks pretty awesome, and <br /> +Alex is super-smart. Dojo obviously goes beyond Ajax, and even within Ajax it <br /> +offers much more than widgets and neat effects. Their event system, the new <br /> +SVG/VML support, and XhrIframeRequest were highlights. I'll be looking soon into <br /> +using its package system to leverage deferred loading of ZCS components.</p> + +<p>IE7: From Ajax to RSS and More: How to Take Full Advantage, by Chris Wilson - <br /> +acutally: quite: interesting. IE7 will make app developers very happy, and app <br /> +maintainers very unhappy. It's really frightening to think of the untold numbers <br /> +of websites out there that rely on the many ways in which IE6 is broken (insert <br /> +truism about reaping what you sow). As much grief as they deservedly get, MS <br /> +appears to be committing to standards as far as its browser goes (thank you, <br /> +market forces). Best news for me is that they fixed the garbage collector, so <br /> +memory no longer leaks at the drop of a hat. They also fixed the SELECT <br /> +element's behavior with regard to z-index, the gzip caching problem, and untold <br /> +CSS bugs.</p> + +<p>JSON: The X in Ajax, by Douglas Crockford - the case for JSON is a strong one, <br /> +as XML is often overkill for shuttling data around. I love its simplicity and <br /> +compactness. Of particular interest: JSONRequest and a proposed MODULE tag to <br /> +address cross-domain security issues. Near the end there was an odd moment when <br /> +John Resig (jQuery) posed a reasonable-sounding question about whether JSON <br /> +performance scales well across large datasets when compared with XML, and the <br /> +immediate response was "Next question." Not sure what to conclude from that.</p> + +<p>Designing for Ajax, by Bill Scott - bailed on a performance talk that turned out <br /> +to be Gomez-centric and came here. Great presentation. Bill used Yahoo as well <br /> +as other sites to point out good and bad Ajax-enabled interaction patterns. <br /> +Makes me want to check out the Yahoo design patterns library.</p> + +<p>Case Study: Building Great UI, the Netflix Way, by Sean Kane - everyone loves <br /> +Hypnotoad, I mean Netflix. What was interesting here (aside from the obvious <br /> +fascination with the service) was how extensively they test in UI labs with <br /> +regular folks before rolling out changes, often trying out several possible <br /> +versions of a UI feature. It would be nice if we could eventually get real-world <br /> +data like that.</p>]]> +</content> +</entry> +<entry> +<title>Firefox 2 vs IE 7</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/10/firefox_2_vs_ie_1.html" /> +<modified>2006-10-25T23:56:26Z</modified> +<issued>2006-10-25T21:33:29Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.124</id> +<created>2006-10-25T21:33:29Z</created> +<summary type="text/plain">Last week I posted an entry comparing IE 7 with Firefox 1.5 and the venerable IE 6. Lot's of folks have since asked for Firefox 2 to be added to the mix. The reason we didn't initially include Firefox 2...</summary> +<author> +<name>Ross</name> +<email>ross@zimbra.com</email></author> +<dc:subject>Ross Dargahi</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Last week I posted an <a href='http://www.zimbra.com/blog/archives/2006/10/ie_7_a_better_b.html'>entry</a> comparing IE 7 with Firefox 1.5 and the venerable IE 6. Lot's of folks have since asked for Firefox 2 to be added to the mix. The reason we didn't initially include Firefox 2 is because it was not at the time officially released and so we felt it unfair for it to be included. </p>]]> +<![CDATA[<p>The graph below shows the cumulative time it took for IE 7 and Firefox 2 to execute the Zimbra Web Client (ZWC) peformance tests at various dates leading up to the final release of each browser. As can be seen, both IE and Firefox showed improvement in their final release, and so we think leaving Firefox 2 out of last week's tests was indeed the fair thing to do. </p> + +<p><a target='_new' href="http://www.zimbra.com/blog/archives/images/trend.jpg"><br /> +<img alt="trend.jpg" src="http://www.zimbra.com/blog/archives/images/trend.jpg" width="344" height="169" /></a></p> + +<p>So now that Firefox 2 has been officially released, how does if fare against IE 7? </p> + +<p>We ran each browser over a common set of Zimbra Web Client (ZWC) operations such as logging in, viewing messages, navigating around various folders, changing options, viewing contacts, and performing various calendar operations. As the graph below shows, Firefox 2 beat out IE 7 in just about every operation - sometimes by significant margins. </p> + +<p><a target="_new" href="http://www.zimbra.com/blog/archives/images/FF2vsIE7.jpg"><br /> +<img alt="FF2vsIE7.jpg" src="http://www.zimbra.com/blog/archives/images/FF2vsIE7.jpg" width="638" height="144" /></a></p> + +<p>We also tested Firefox 2 vs Firefox 1.5. As seen below, Firefox 2 has not made substantial performance improvements over Firefox 1.5, and has certainly not shown the same order of gain as IE 7 has over IE6.</p> + +<p><a target="_new" href="http://www.zimbra.com/blog/archives/images/FF2vsFF15.jpg" ><br /> +<img alt="FF2vsFF15.jpg" src="http://www.zimbra.com/blog/archives/images/FF2vsFF15.jpg" width="603" height="157" /></a></p> + +<p>I think the net result is that for highly JavaScript intensive AJAX applications such as the ZWC, Firefox is still the winner by quite a wide margin. Of course your mileage will vary depending on the type and footprint of your client.</p> + +<p>I would like to end by saying that we are able to present this data thanks to lots of hard work by Raja Rao of the Zimbra QA department who has spent many long hours building our AJAX client testing framework, and executing the performance tests against the various browsers.</p>]]> +</content> +</entry> +<entry> +<title>IE 7 vs IE 6</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/10/ie_7_a_better_b.html" /> +<modified>2006-10-19T18:12:50Z</modified> +<issued>2006-10-19T18:13:00Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.123</id> +<created>2006-10-19T18:13:00Z</created> +<summary type="text/plain">Back in April I wrote an entry complaining about IE's performance as a Web 2.0 platform: "From a Web 2.0 application developers perspective (developers who use a lot of JavaScript and DOM manipulation), IE 6 is plagued by a number...</summary> +<author> +<name>Ross</name> +<email>ross@zimbra.com</email></author> +<dc:subject>Ross Dargahi</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Back in April I wrote an <a href="http://www.zimbra.com/blog/archives/2006/04/post.html">entry</a> complaining about IE's performance as a Web 2.0 platform:</p> + +<p><i>"From a Web 2.0 application developers perspective (developers who use a lot of JavaScript and DOM manipulation), IE 6 is plagued by a number of well known problems such as its ability to readily leak memory. Regrettably, Microsoft's next release of Internet Explorer, IE 7, does little to resolve these issues."</i></p> + +<p>I am happy to say that I was wrong. </p>]]> +<![CDATA[<p>Microsoft's IE team has clearly been hard at work on improving their browser's memory management and JavaScript performance. IE 7 has made some significant leaps forward based on some initial in house testing here at Zimbra. We are in general observing about a 2x performance improvement with IE 7 vs IE 6 when using the Zimbra Web Client (ZWC).</p> + +<p>As is well documented, IE 6 is notoriously bad at leaking memory, particularly due to circular references that include COM objects. The good news is that our tests indicate that this problem has been solved in IE 7. While in our test profile, it appears to consume more memory than Firefox, IE 7 seems to have solved the horrendous memory leaks exhibited in IE 6.</p> + +<p>We also looked at the performance of Firefox, IE 6, and IE 7 over a set of common ZWC operations such as logging in, viewing messages, navigating around various folders, viewing contacts, and performing various calendar operations. The graph below shows the relative performance of each browser against the other:</p> + +<p><a href="http://www.zimbra.com/blog/archives/images/browserperf.jpg" target="_new"><img alt="browserperf.jpg" src="http://www.zimbra.com/blog/archives/images/browserperf.jpg" width="499" height="130" /></a></p> + +<p>Again we see that across just about every operation, IE 7 performs better than IE 6; however, for the most part Firefox still beats out IE 7. When we looked at the sum total time it takes for all operations to be performed (admittedly a coarse grained metric), we noticed that IE 7 was about twice as fast as IE 6; however, Firefox was more than twice as fast as IE 7 and about four times faster than IE 6.</p> + +<p>In conclusion, IE 7 has made some quite significant improvements over IE 6, both in terms of performance and memory management; however, there is still room to improve - particularly against Firefox, a challenge I hope the IE team will be taking up.</p>]]> +</content> +</entry> +<entry> +<title>Zimbra Collaboration Suite 4.0.3 Released</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/10/zimbra_403_released.html" /> +<modified>2006-10-17T23:09:27Z</modified> +<issued>2006-10-17T23:09:23Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.122</id> +<created>2006-10-17T23:09:23Z</created> +<summary type="text/plain">ZCS 4.0.3 includes fixes for 55 bugs and enhancements. It has significant improvements in calendar behavior and fixes a bug in Trash folder viewing that was troubling many folks. It also includes upgrade speed improvements. This allows the upgrade to...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>ZCS 4.0.3 includes fixes for 55 bugs and enhancements. It has significant improvements in calendar behavior and fixes a bug in Trash folder viewing that was troubling many folks. It also includes upgrade speed improvements. This allows the upgrade to take much better advantage of installs that have multiple disks available to MySQL.</p> + +<p><a title="Zimbra - Forums - Zimbra Collaboration Suite 4.0.3 Released" href="http://www.zimbra.com/forums/showthread.php?p=27503">Zimbra - Forums - Zimbra Collaboration Suite 4.0.3 Released</a></p> + +<p></p>]]> + +</content> +</entry> +<entry> +<title>Thoughts on Office 2.0 (Reprise)</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/10/preliminary_tho.html" /> +<modified>2006-10-21T20:01:05Z</modified> +<issued>2006-10-17T11:43:14Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.121</id> +<created>2006-10-17T11:43:14Z</created> +<summary type="text/plain">(FYI: I've made some enhancements/corrections based on Zimbra's participation at the Office 2.0 Conference; pointer below. May or may not be worth a quick reread.) Yes, the "2.0" hype is getting out of hand. However, just as with Web 2.0,...</summary> +<author> +<name>Scott</name> +<url>www.zimbra.com</url><email>scott.dietzen@zimbra.com</email></author> +<dc:subject>Scott Dietzen</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>(FYI: I've made some enhancements/corrections based on Zimbra's participation at the Office 2.0 Conference; pointer below. May or may not be worth a quick reread.)</p> + +<p>Yes, the "2.0" hype is getting out of hand. However, just as with <a href="http://www.zimbra.com/blog/archives/2006/06/defining_web_20.html">Web 2.0</a>, the technology evolution we are participating in is sufficent to at least justify the discussion. So while I am still dubious about the Office 2.0 moniker, there is no doubt that the Web authoring, sharing, and collaboration technologies under the Web 2.0 umbrella are allowing us to do many of the things we used to do within proprietary Office 1.0 desktop applications, and to do so from any browser on the net. So before you dismiss Office 2.0 as yet another buzz word <em>du jour</em>, please consider some (modest) over-generalizations: </p>]]> +<![CDATA[<p><strong>Office 1.0 Users: </strong>Power users (information workers/professionals) <br /> +<strong>Office 2.0 Users: </strong>"All hands" (most everyone who browses) </p> + +<p><strong>1.0 Model:</strong> Client-centric (desktop applications) <br /> +<strong>2.0 Model:</strong> Network-centric (web applications)</p> + +<p><strong>1.0 Sharing (in the small):</strong> Pass by value <em>(Email)</em>, pass by reference <em>(Public folders)</em><br /> +<strong>2.0 Sharing (in the large):</strong> Adds the ability to use the Internet to pass by value <em>(Email, VoIP, IM, ...) </em> and (effectively) by reference <em>(XHTML pages/hyperlinks, Wiki, Blogs, iCalendar/CalDAV, iTasks, WebDAV, ...)</em>, all with access control</p> + +<p><strong>1.0 Navigation (sans meta-data):</strong> <em>Folders </em><br /> +<strong>2.0 Navigation (with meta-data):</strong> <em>Hyperlinks, indexing & search, tagging, mash-ups …</em></p> + +<p><strong>1.0 Editing:</strong> <em>Via proprietary desktop applications; WYSIWYG with change tracking</em><br /> +<strong>2.0 Editing:</strong> <em>From any browser; WYSIWYG (via Ajax authoring) with versioning and history</em></p> + +<p><strong>1.0 Data types:</strong> Proprietary<br /> +<strong>2.0 Data types:</strong> Open <em>(XHMTL, ODF, microformats, XML such as via Service-Oriented Architecture/SOA, REST, SOAP, etc.)</em></p> + +<p><strong>1.0 Content:</strong> Relatively static, with intra-desktop dynamic components<br /> +<strong>2.0 Content:</strong> More dynamic <em>(including web application-generated content, SOA mash-ups, …)</em></p> + +<p><strong>1.0 Multi-document:</strong> <em>Object Linking & Embedding (OLE), Bonobo, …</em> <br /> +<strong>2.0 Multi-document:</strong> <em>Hyperlinks, <a href="http://www.zimbra.com/blog/archives/2006/04/zimbra_ale-ajax_linking_and_embedding.html">Ajax Linking & Embedding (ALE)</a>, mash-ups, ...</em></p> + +<p>(No doubt the above takes a rather expansive view of Office 2.0, but then again Office 1.0 arguably covered most all computer-assisted authoring of content. Please also note: The above content would have proved substantially more compelling in an HTML table authored, say, with a WYSIWYG Ajax editor, like that included within the Zimbra Documents applications.)</p> + +<p>All this is not to say that Office 2.0 can or should supercede Office 1.0---Zimbra spreadsheets, for example, will not support pivot tables any time soon. I believe our goal should <strong>not</strong> be to reproduce Office 1.0 functionality on a Web 2.0 platform, but rather to realize an easier to use (<em>a.k.a.</em> less complex) collaborative authoring and sharing model that scales with the Internet. Office 2.0 users should be able to (1) author content from anywhere; (2) appropriately reuse and adapt (mash up) content (both static and dynamic) already published on the Internet; and (3) securely collaborate with others in whatever <em>ad hoc</em> fashion best meets their needs. The fun with "Office 2.0" is that thanks to the maturing of the underlying <a href="http://www.zimbra.com/blog/archives/2006/06/defining_web_20.html">Web 2.0 technologies</a> and near universal success of the Internet, this vision is close to realization.</p> + +<p>One thing I'm not yet happy with is that the above description does not draw a very compelling line between Web 2.0 and Office 2.0. Some technologies are more obvious: for example, Ajax, RSS, and SOA/XML fit under Web 2.0, while Ajax authoring and ALE arguably fit more naturally under Office 2.0. Given the emphesis on collaboration and authoring inherent in the Web 2.0 definition, I think these two potential categories are going to be tough to keep separate. After all, both Office 1.0 and Web 2.0 are about authoring rich content---the difference is that the former is focused on the desktop and "sharing in the small", while the latter is targeting the network and "sharing in the large". Office 2.0 then may merely mean leveraging Web 2.0 technologies to do many/most (?) of the things we used to do in Office 1.0. </p> + +<p>(Some of this thinking came out our <a href="http://www.eu.socialtext.net/office20/index.cgi?apis_and_feeds_for_office_2_0">our panel session</a> at the <a href="http://www.office20con.com/conference.html">Office 2.0 Conference</a> in San Francisco, and our <a href="http://wanderingstan.com/2006-08-21/web_2_0_kongress_in_germany">Web 2.0 Kongress</a> session in Germany the day before. Just doing our bit to keep the airlines in the black :-).)</p>]]> +</content> +</entry> +<entry> +<title>Zimbra Collaboration Suite 4.0 Webinar</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/10/zimbra_40_webinar.html" /> +<modified>2006-10-05T02:35:45Z</modified> +<issued>2006-10-01T23:07:51Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.120</id> +<created>2006-10-01T23:07:51Z</created> +<summary type="text/plain">Zimbra Collaboration Suite 4.0 Webinar When: Thurs, October 5th at 10am PST. Length: 60 minutes. Subject: Modern Collaboration with Zimbra Collaboration Suite (ZCS) 4.0 Overview: Fueled by demand for better productivity, the web is exploding as the primary communication medium...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p><a href="http://www.zimbra.com/about/webinars.html">Zimbra Collaboration Suite 4.0 Webinar</a><br /> +When:</p> + +<p>Thurs, October 5th at 10am PST. Length: 60 minutes.</p> + +<p>Subject: Modern Collaboration with Zimbra Collaboration Suite (ZCS) 4.0</p> + +<p>Overview:<br /> +Fueled by demand for better productivity, the web is exploding as the primary communication medium for the modern organization.</p> + +<p>ZCS leads the way, providing powerful next-generation messaging and collaboration.</p> + +<p>Join our CTO Scott Dietzen for this free live webinar to see:</p> + +<p> * How ZCS 4.0 is the right solution for today's collaboration demands<br /> + * Discuss and demo features such as Zimbra Documents, Admin UI, Zimlets, Mobile device sync, Active Directory integration and more…<br /> + * Why ZCS 4.0 enables organizations to realize the true benefits of an innovative and cost-effective collaboration solution.<br /> + * Plus live Q & A</p> + +<p>Sign up:</p> + +<p>Please <a href="http://breeze58226024.breezecentral.com/e78552532/event/registration.html">register</a>; space is limited!</p>]]> + +</content> +</entry> +<entry> +<title>Zimbra 4.0.2 released, Ubuntu preview release</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/09/zimbra_ubuntu_preview_release.html" /> +<modified>2006-09-26T06:11:30Z</modified> +<issued>2006-09-26T05:48:24Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.119</id> +<created>2006-09-26T05:48:24Z</created> +<summary type="text/plain">We released Zimbra 4.0.2 today and there were a few extras that came along for the ride. First off the Fedora Core 5 build is now GA. We also added a new developer/preview release on Ubuntu. This has been a...</summary> +<author> +<name>Kevin</name> +<url>www.zimbra.com</url><email>kevinh@zimbra.com</email></author> +<dc:subject>Kevin Henrikson</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>We released Zimbra 4.0.2 today and there were a few extras that came along for the ride. First off the Fedora Core 5 build is now GA. We also added a new <a href="http://www.zimbra.com/community/downloads.html">developer/preview release</a> on <a href="http://www.ubuntu.com/">Ubuntu</a>. This has been a popular <a href="http://www.zimbra.com/forums/showthread.php?t=1644">hack</a> in our forums for sometime.</p> + +<p>Here's a sample of some of the other changes/fixes in 4.0.2:</p> + +<p>- perf improvements for IMAP (new MySQL indexes)<br /> +- > 2GB support in the Zimbra Outlook Connector<br /> +- i18n and some l10n for the Zimbra Outlook Connector<br /> +- disabling AS/AV causes mail deferral<br /> +- cursor fails to appear in Firefox<br /> +- mailbox quota page does not contain any entries<br /> +- several all day event and timezone bugs fixed</p>]]> + +</content> +</entry> +<entry> +<title>Look Ma, No Mouse: Keyboard Navigation and Shortcuts in the Zimbra Collaboration Suite and The Kabuki Ajax Toolkit</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/09/look_ma_no_mous.html" /> +<modified>2006-09-13T07:28:26Z</modified> +<issued>2006-09-13T07:25:00Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.118</id> +<created>2006-09-13T07:25:00Z</created> +<summary type="text/plain">Keyboard shortcuts and navigation are indispensable time savers for an application's frequent and power users. Who among us has not quickly learned the keyboard shortcuts for performing common tasks within an application that we use regularly? Unfortunately, one of the...</summary> +<author> +<name>Ross</name> +<email>ross@zimbra.com</email></author> +<dc:subject>Ross Dargahi</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>Keyboard shortcuts and navigation are indispensable time savers for an application's frequent and power users. Who among us has not quickly learned the keyboard shortcuts for performing common tasks within an application that we use regularly? </p> + +<p>Unfortunately, one of the more common complaints against web-based applications is that they are, in many instances, lacking when it comes to supporting keyboard shortcuts and navigation. Frankly, the lack of keyboard support (both shortcuts and navigation) is something that has annoyed me about the Zimbra Collaboration Suite (ZCS), and it is something that I have been wanting to add to both Kabuki (the Zimbra Ajax Toolkit) and the ZCS; however, I didn't want to just stuff in some basic keyboard shortcuts and call it a day. Instead, I wanted to have a go at implementing the same level of keyboard support that most traditional UI toolkits and desktop applications support. This actually turned out to involve quite a bit of work - for example, since only input elements may have focus (in most browsers) we needed to simulate and track focus for toolkit components which frequently have no native input element associated with them - but at the end of the day, I think it was worth the effort.</p>]]> +<![CDATA[<p>So the good news is that Kabuki now provides a pretty rich keyboard model that in many ways approximates the level of support found in more traditional UI toolkits. Specifically, this includes support for a canonical focus model, customizable key bindings in UI widgets (not all of them just yet), as well as full support for tab group hierarchies for navigating native and toolkit visual components in an orderly fashion via the tab and arrow keys. Conrad (one of Zimbra's lead Ajax architects), took this work to the next level by implementing keyboard navigation and shortcuts throughout the ZCS and by improving the framework itself. As a result the ZCS now has significant keyboard support in version 4.0, about 80% coverage at the moment, and we are working towards making that even higher. Future work also includes normalized mappings among browsers (very high on our list), I18N support, and supporting custom user-defined bindings.</p> + +<p>The bottom line is that the ZCS now supports some pretty spiffy keyboard actions (over 100 of them) including:<br /> +<ul><li>Navigating among the various ZCS apps<br /> +<li>Navigation and selection within a list of items<br /> +<li>Composing and sending an email message<br /> +<li>Creating calendar appointments<br /> +<li>Switching among calendar views<br /> +<li>Creating new tags, folders, calendars, etc<br /> +<li>Popping up the Zimbra Assistant<br /> +<li>Changing views<br /> +<li>Popping up, interacting with, and dismissing context menus<br /> +</ul></p> + +<p>You can find a more complete list of supported keyboard events on the <a href="http://wiki.zimbra.com/index.php?title=Zimbra_Web_Client_Keyboard_Shortcuts ">Zimbra Wiki</a></p> + +<p>Now onto some of the more technical details on Zimbra's keyboard support. </p> + +<p>The keyboard management infrastructure is implemented in the DHTML Widget Toolkit (DWT), which is the Kabuki Ajax toolkit's UI framework. DWT consists of a component model, numerous widgets, an event model, drag and drop infrastructure, and now a keyboard shortcut and navigation model. DWT is loosely modeled after SWT. There are several elements that compose DWT's keyboard management framework:</p> + +<h4>Key Maps</h4><p> +A key map is a set of key bindings. A key binding maps a key sequence to an action. For example, I may decide that "Ctrl+U" marks an email message as unread, or I may decide that a multi-key sequence such as "Ctrl+N" followed by the letter "M" will create a new mail message (Note that by default, there is a 750ms timeout between keys for a multiple-key sequence, though this is configurable via the DwtKeyboardMgr class described later). + +<p>DwtKeyMap is the base class for key maps and provides bindings for DWT widgets. Below is a snippet from DwtKeyMap's constructor showing the key bindings for some of the widgets. Note how key sequences bind to the symbolic constants representing keyboard actions:</p> + +<pre> +function DwtKeyMap() { + [snip...] + this._map["DwtDialog"] = { + "Enter": DwtKeyMap.ENTER, + "Esc": DwtKeyMap.CANCEL + }; + this._map["DwtButton"] = { + "Enter": DwtKeyMap.SELECT_CURRENT, + "ArrowDown": DwtKeyMap.SELECT_SUBMENU + }; + this._map["DwtListView"] = { + "Space": DwtKeyMap.SELECT_CURRENT, + "Ctrl+Space": DwtKeyMap.ADD_SELECT_CURRENT, + "Ctrl+`": DwtKeyMap.ADD_SELECT_CURRENT, // Mac FF + "ArrowDown": DwtKeyMap.SELECT_NEXT, + "Shift+ArrowDown": DwtKeyMap.ADD_SELECT_NEXT, + "Ctrl+ArrowDown": DwtKeyMap.NEXT, + "ArrowUp": DwtKeyMap.SELECT_PREV, + "Shift+ArrowUp": DwtKeyMap.ADD_SELECT_PREV, + "Ctrl+ArrowUp": DwtKeyMap.PREV, + "Ctrl+A": DwtKeyMap.SELECT_ALL, + "Home": DwtKeyMap.SELECT_FIRST, + "End": DwtKeyMap.SELECT_LAST, + "Enter": DwtKeyMap.DBLCLICK, + "Comma": DwtKeyMap.ACTION, + "Shift+Comma": DwtKeyMap.ACTION, + "Ctrl+Enter": DwtKeyMap.ACTION, + "Ctrl+M": DwtKeyMap.ACTION // Mac FF + }; + this._map["DwtMenu"] = { + "Esc": DwtKeyMap.CANCEL, + "Enter": DwtKeyMap.SELECT_CURRENT, + "ArrowDown": DwtKeyMap.SELECT_NEXT, + "ArrowUp": DwtKeyMap.SELECT_PREV, + "ArrowLeft": DwtKeyMap.SELECT_PARENTMENU, + "ArrowRight": DwtKeyMap.SELECT_SUBMENU + }; + [snip...] +}; +</pre> + +<p>Applications may inherit from the above class and add their own maps or override existing ones (for example when subclassing widgets). Note that component and application authors don't need to worry about key sequences, rather they just need to implement the actions that their components support. The keyboard management framework takes care of handling the mapping from key sequences to actions. Once a key sequence has been mapped to an action, the action is passed to the handleKeyAction() method defined by the component (See the sections of DwtKeyboardMgr and DwtControl below for more details). </p> + +<p>Decoupling key bindings and actions makes it easy to change the key binding for a given action, or to allow multiple key bindings for that action. Key maps may inherit (including multiply) from other key maps. This allows for extensions as well as application-wide (or default) key maps.</p> + +<p>The sample code below shows a portion of the ZCS's key map. Notice how the ZmMailListController inherits from the Global key map.</p> + +<pre> +function ZmKeyMap() { + this._map["Global"] = { + "`": ZmKeyMap.ASSISTANT, + "Shift+`": ZmKeyMap.ASSISTANT, + [snip...] + } + this._map["ZmMailListController"] = { + "INHERIT": "Global", + "R": ZmKeyMap.REPLY, + "A": ZmKeyMap.REPLY_ALL, + "R,S": ZmKeyMap.REPLY, + "R,A": ZmKeyMap.REPLY_ALL, + [snip...] + } + [snip...] +} +</pre> + +<p>Key map entries may consist of:</p> + +<ul><li>Single keys e.g. "Enter" or "M" +<li>Single keys plus one or more modifiers e.g. "Ctrl+M" or "Ctrl+Shift+M" +<li>Multiple key sequences e.g "M,U" or "M,U,A" +<li>Multiple key sequences plus modifiers e.g. "Shift+M, U" or "Shift+M, Shift+U, A" +</ul> + +<p>We are currently working on a serialization/deserialization interface so that key maps may be serialized to and deserialized from a textual representation. This will help in with localizations and custom/user defined keymaps, and will do away with the need for the hash tables shown above.</p> + +<h4>Tab Groups</h4><p> + +<p>Tab groups permit the definition of a hierarchical keyboard navigation model. A tab group is a tree structure where the intermediate nodes in the tree are other tab groups and the leaf nodes are focusable components i.e. DWT widgets and/or focusable native HTML elements such as input fields. Tab groups represent the order in which components that the user sees on the screen are traversed via the keyboard. The tab group hierarchy (or tree) is traversed "in order" by the user pressing the tab key, or in reverse order when the user typically presses the shift key plus the tab key.</p> + +<p>There is a special tab group called the root tab group. A root tab group has no parent and represents the keyboard navigation order for the components in a given application view. There can be multiple root tab groups within an application, e.g. an email message list view tag group, a calendar new appointment tab group, or a dialog tab group; however, only one root tab group may be active at any given time.</p> + +<p>As will be described in the section on DwtKeyboardMgr, tab groups may be "pushed to" and "popped from" the tab group stack. For example, when a dialog is popped up, its corresponding tab group is pushed onto the tab group stack and becomes the active tab group while that dialog is activated. When the dialog is popped down, its tab group is also popped off the tab group stack bringing the underlying tab group (i.e. the one for the active view) back into play, so that the component that had focus prior to the dialog being activated will once again have focus.</p> + +<p>Tab groups are implemented by the DwtTabGroup class. That class provides the API for manipulating tab groups. Here are some of the member methods:</p> + +<ul><li>addMember(index) - Adds a member to the tab group at index position, or at end if index is omitted +<li>addMemberBefore(member) - Adds a member to the tab group positioned before another member +<li>addMemberAfter(member) - Adds a member to the tab group positioned after another member +<li>blockDefaultHandling(block) - Blocks the default handler from being invoked for this tab group +<li>contains(member) - Checks to see if an item is a member of this tab group +<li>removeMember(member) - Removes a member +<li>replaceMember(old, new) - Replaces a member with another one +<li>newParent(newParent) - Sets a new parent for this tab group +<li>getFocusMember() - Gets the current focus member +<li>setFocusMember(member) - Sets the current focus member +<li>getNextFocusMember() - Gets the next focus member +<li>getPrevFocusMember() - Gets the previous focus member +<li>resetFocusMember() - Resets the focus member to the first available member +</ul> + +<h4>DwtKeyboardMgr</h4><p> + +<p>DwtKeyboardMgr is the engine that drives the keyboard management framework. It is responsible for intercepting key events generated by the browser, mapping them to actions (via the registered keymaps), and then dispatching the action to the correct component. In addition, DwtKeyboardMgr is responsible for enforcing the tab order specified by the currently active tab group. Finally, this class also has the machinery that handles multi-key keymap entires by utilizing a timeout mechanism for resolving such sequences.</p> + +<p>When dispatching actions, DwtKeyboardMgr will first try and resolve a key sequence with the component that has focus (be it a DWT widget or a native component such as an HTML input element). If the component does not have an action binding for a key sequence (an entry in its key map for the current key sequence), then DwtKeyboardMgr checks to see if a default handler has been pushed on its default handler stack (via the pushDefaultHandler method). If one has been pushed, then DwtKeyboardMgr will query it for the name of the keymap that should be used to resolve the key sequence to an action code. If an action code exists in the key map for the key sequence, then DwtKeyboardMgr will dispatch it to the default handler.</p> + +<p>A default handler is analogous to the root tab group. It provides a context for key bindings that are not tied to a specific widget. In a way, the default handler can be thought of as providing a global context. For example, if a button has focus when the character Esc is typed, DwtKeyboardMgr will first give the button a chance to handle the event. If the button does not handle Esc (which is the case), then DwtKeyboardMgr hands the event to the current default handler. So far, there are only two default handlers used within ZCS: an application-level default handler and a dialog-level default handler.</p> + +<p>A default handler must implement the following interface:</p> + +<ul><li>getKeymapNameToUse() - This method is called by DwtKeyboardMgr to get the name of the key map that should be used for resolving a key sequence. Of course this is application-specific and may change as the user navigates an application. For example, in the case of the ZCS, a different key map may in play for the calendar application as opposed to the email application. +<li>handleKeyAction(action) - Where the action formal parameter is the action constant bound to the key sequence in the key map. This method is where the real work gets done. Its implementation will perform the work necessary to complete the action. It will return true if it handled the action, or false if it did not. +</ul> + +<p>As previously mentioned, DwtKeyboardMgr is also responsible for enforcing the component tab ordering specified by the currently active root tab group - i.e. the one that is on top of the tab group stack. The way this works is that upon intercepting the tab key, DwtKeyboardMgr will call the DwtTabGroup's getNextFocusMember() method. This method returns the next focusable component in the tab group hierarchy (be it a DWT widget or a native HTML input field). DwtKeyboardMgr will then call the blur() method on the previously focused component, followed by calling the focus() method on the component returned by getNextFocusMember(). Note that I intentionally paralleled the native HTML input element focus() and blur() methods within DWT so there is a canonical way of managing the focus state of any UI component (native or DWT). The combination of DwtKeyboardMgr and DwtTabGroup handles all corner cases such as skipping over components that are not enabled (i.e. grayed out), as well as dealing with scenarios such as the currently focused component becoming disabled.</p> + +<p>The following lists some of the more commonly used methods provided by DwtKeyboardMgr:</p> + +<ul><li>enable(enable) - Enables or disables keyboard event handling +<li>isEnabled() - Returns true if keyboard event handling is enabled, else returns false +<li>grabFocus(element) - Causes element to grab focus - where element is a DWT widget or an HTML input element +<li>pushDefaultHandler(hdlr) - Pushes a default handler onto the handler stack +<li>popDefaultHandler()- Pops the default handler off the top of the handler stack +<li>pushTabGroup(tabGroup) - Pushes a tab group onto the tab group stack and makes it the active tab group +<li>popTabGroup() - Pops the tab group that is on top of the tab group stack +<li>registerKeyMap(keyMap) - Registers a key map +<li>setKeyTimeout(timeout) - Sets the maximum time to allow between key presses for a multi-key key sequence +<li>setTabGroup(tabGroup) - Replaces the current tab group with the one provided +</ul> + +<h4>DwtControl</h4><p> + +<p>DwtControl is the base DWT class from which all widgets ultimately inherit behaviour. DwtControl has a number of responsibilities including hooking into the drag and drop system, basic mouse event handling, and integration with the keyboard shortcut and navigation model.</p> + +<p>DwtControl exports public focus() and blur() methods that parallel the native HTML input elements so that there is a canonical set of methods for setting and blurring focus across native and DWT elements. DwtControl also declares four methods that widget authors must implement in order to support keyboard management:</p> + +<ul><li>_focus() - This method is called when a control receives focus. Its implementation should provide visual feedback that the control has gained focus (e.g. by drawing a border around the component) +<li>_blur() - This method is called when a control loses focus. Its implementation should provide the visual feedback that the control has lost focus (e.g. by hiding the border around a control) +<li>handleKeyAction(actionCode) - This method is responsible for implementing supported actions. The keyboard framework passes in the actionCode associated with a key sequence in the control's keymap. This method returns true if the control handled the actionCode, else it returns false +</ul> + +<h4>Using The Keyboard Framework in an Application</h4><p> + +<p>An application programmer wanting to use the keyboard management frameworks typically needs to perform the following steps:</p> + +<ol><li>Create a key map class for the application that inherits from DwtKeyMap. Define any application and/or custom widget key maps in this class. +<li>Implement one or more default handlers for the application should they be required. Recall that the default handler is called when a visual component does not have a action code binding for a key sequence. Depending on the complexity of the application, multiple handlers may be pushed and popped as the user interacts with the application. +<li>Create any tab group(s) that may be required. Note that tab groups may be created and manipulated during the application lifecycle. +<li>Instantiate DwtKeyboardMgr. +<li>Register the application's key map with DwtKeyboardMgr via the registerKeyMap() method. +<li>Push the currently applicable default handler via DwtKeyboardMgr's pushDefaultHdlr() method. +<li>Push or set the current tab group via the pushTabGroup() or setTabGroup() method. +</ol>]]> +</content> +</entry> +<entry> +<title>Securing Ajax</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/09/securing_ajax.html" /> +<modified>2006-09-11T15:22:42Z</modified> +<issued>2006-09-09T18:45:46Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.117</id> +<created>2006-09-09T18:45:46Z</created> +<summary type="text/plain">To continue the Zimbra blog series on Ajax (recent entries include Ajax innovation is about the server, Ajax optimization techniques (presented at OSCON), OpenAjax update, and Ajax's impact on scaling), we wanted to offer some general thoughts on securing Ajax...</summary> +<author> +<name>Scott</name> +<url>www.zimbra.com</url><email>scott.dietzen@zimbra.com</email></author> +<dc:subject>Scott Dietzen</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>To continue the Zimbra blog series on Ajax (recent entries include <a href="http://www.zimbra.com/blog/archives/2006/08/ajax_innovation.html">Ajax innovation is about the server</a>, <a href="http://www.zimbra.com/blog/archives/2006/07/oscon_ajax_slid.html">Ajax optimization techniques (presented at OSCON)</a>, <a href="http://www.zimbra.com/blog/archives/2006/05/openajax_update.html">OpenAjax update</a>, and <a href="http://www.zimbra.com/blog/archives/2006/04/ajax_impact_on.html">Ajax's impact on scaling</a>), we wanted to offer some general thoughts on securing Ajax applications gleaned, of course, from our Zimbra experience. </p>]]> +<![CDATA[<p><strong>Ajax security advantages. </strong> Less often discussed than Ajax security <em>concerns</em> are inherent security <em>advantages</em> of Ajax clients:<br /> +• Dynamic Ajax client download – Ajax client code is downloaded on demand from the trusted server after a particular user logs-in, automatically ensuring client and server versions are in-sync (for public computers, a shift re-load is better in that it overwrites any Ajax code from that website leftover in the browser cache). <br /> +• No persistent client caching – An exposure with traditional web clients is that they cache HTML pages that can include user/application data on the client disk during normal operation. This can be a security vulnerability for access from public kiosks or other shared computers. Ajax applications like the Zimbra client cache no user data on disk. <br /> +• Server-side control of intranet and Internet mash-ups – Zimlets and other Ajax mash-ups are precluded from accessing arbitrary services on the Internet (unless they open a new iFrame, which can be determined at server deployment time), and must instead (like Java applets) make all invocations back to the originating server (in our case, the Zimbra server). This means the Ajax server can act as a secure, proxy gateway for accessing intranet applications, and can govern which external web services (if any) are accessible for mash-up within the Ajax client. </p> + +<p><strong>Ajax security considerations. </strong> Subject to the additional precautions enumerated below, Ajax applications can be made as highly-secure as the web technologies upon which the Ajax model is based. </p> + +<p>The most obvious security issue for Ajax applications is that the associated source code is inherently downloaded to the browser for interpretation. This is a concern for any application logic that contains intellectual property that the author does not want to share with the world: while obviscation and minimization (white space removal, shortening identifier) can certainly render JavaScript much harder to read (and debug), developers should consider Ajax applications to be like HTML in that others will be able to examine the fruits of your labor. The only real alternative is to either (1) limit log-in to the application to trusted users/partners (in this way only licensed/authorized users get to download the Ajax application logic); or else (2) keep closely-held algorithms on the server-side, and simply invoke them via web services from the Ajax client. All this is not an issue for the Zimbra Ajax Client, since it is, after all, open source. </p> + +<p>Zimbra provides the following additional guarantees to further secure Zimbra deployments over even public networks, techniques that we beileve are broadly relevant for securing Ajax applications:<br /> +• Use SSL/TLS (i.e., HTTPS) – In addition to protecting the privacy/integrity XML/JSON HTTP communications to/from the Ajax client, SSL/TLS encryption limits access to the Ajax source code itself to only those that have legitimate log-ins (as per above), since no-one snooping on the network can see the app. logic. Moreover, SSL/TLS protects the Ajax application (JavaScript, CSS, etc.) from potential security attacks while it is in route to the user's browser. <br /> +• No server-side interpretation of JavaScript or other client-submitted code – Zimbra receives vanilla XML requests from the browser client that are validated and then processed by Zimbra server-side Java code. No JavaScript flows from client to server, and there is no server-side interpretation of any application data (e.g., message bodies). In fact, there is no JavaScript execution on the server period. This ensures that there is no way for even a hostile Ajax client with an authentication credentials to inject malicious code for execution on the server-side. <br /> +• Limited or no client-side interpretation of JavaScript within user data – The Zimbra Ajax client is, of course, an Email application that runs within the confines of the web browser. There is an additional risk, then, to displaying the contents of rich HTML messages that themselves contain JavaScript, in that JavaScript within the message might somehow be able to make malicious calls to the Zimbra server (it is generally precluded from making invocations to other sites). Zimbra blocks any “risky” HTML, first on the server and then again (for extra protection) on the client. When a rich HTML message contains any suspect JavaScript, simply better to err on the side of caution. For most Ajax applications, simply maintaining a strict separation of code from data (and never interpretting JavaScript that is included within user data) protects against such attacks.<br /> +• Benign URLs – All Zimbra’s GET-based REST and URL-based APIs are read-only and do not modify data. This ensures that a user (with pre-validated security credentials) cannot be fooled into clicking on a malicious link (that someone sends he or she in an email or posts on his/her external website) that would have harmful side-effects on that user's data. Again, this is broadly relevant for Ajax applications that potentially display clickable URLs in application data. <br /> +• Mash-ups/Zimlet validation – Zimbra's mash-up architecture does provide the opportunity to introduce server-side Java code (most Zimlets run only on the client side), but the introduction of Zimlets requires server administration privileges. Zimbra recommends only deploying Zimlets that have been certified by Zimbra or else which have been vetted by your security architects internally. The key is to ensure that only trustworthy mash-ups can be deployed with your Ajax application, mash-ups that do not expose additional attack points for malicious users. </p> + +<p>The end result is that while an attacker with appropriate security credentials (such as a user's password) could certainly damage that user's server-side data, there is no way for them to compromise other user's data or the server in general. (And, of course, that user could have any damged mailbox state restored to the point before the attack by a Zimbra administrator.) </p> + +<p>Stronger network security can be afforded by additional technologies (such as VPNs, Smartcards, etc.), but that's our recipe in general for leveraging the benefits of Ajax without giving up the security your customers, partners, and business depend on. More detail on the Zimbra-specific approach can be found in the newly updated Zimbra Architecture Overivew (linked within our <a href="http://www.zimbra.com/community/documentation.html">Community</a> and <a href="http://www.zimbra.com/products/documentation.html">Product</a> Documentation). </p> + +<p>As always, thanks for listening (particularly to my verbose posts).</p>]]> +</content> +</entry> +<entry> +<title>Some thoughts on Mobility and Web 2.0</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/08/some_thoughts_o.html" /> +<modified>2006-08-29T22:45:39Z</modified> +<issued>2006-08-29T19:50:57Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.116</id> +<created>2006-08-29T19:50:57Z</created> +<summary type="text/plain">I had the pleasure of joining Motorola, SugarCRM, and Funambol on a panel at LinuxWorld regarding the future of mobility. The depressing bit was that we panelists admitted that we could have made almost identical points three years ago: (1)...</summary> +<author> +<name>Scott</name> +<url>www.zimbra.com</url><email>scott.dietzen@zimbra.com</email></author> +<dc:subject>Scott Dietzen</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>I had the pleasure of joining Motorola, SugarCRM, and <a href="http://www.funambol.com/blog/capo/">Funambol</a> on a panel at LinuxWorld regarding the future of mobility. The depressing bit was that we panelists admitted that we could have made almost identical points three years ago: (1) the Web (1.0 more than 2.0) is coming soon to mobile devices, but the experience isn't entirely there yet; and (2) the challenge to extending applications for mobile devices continues to be exacerbated by innovation in device profiles (more on that below). However, the good news is (1) that a "smart phone" profile is converging---a profile that is likely the right target for non-consumer mobile applications; and (2) that "over the air" sync to the native Personal Information Management (PIM) software on mobile devices has gotten dramatically easier/cheaper, and provides exciting new opportunities for mobile application extension.</p>]]> +<![CDATA[<p>As an old Web hand, I'm no doubt biased, but I think the Web is a generally the right model for business application extension to mobile devices, simply because the Web does not require any <em>a priori</em> installation of client-side software. After all, if the Web is already the dominant model for B2C and B2B applications on PCs, then it is arguably an even better architectural fit for lower horsepower (CPU, memory) mobile devices. <a href="http://www.zimbra.com/blog/archives/2006/06/defining_web_20.html">Web 2.0/Ajax clients</a> seem like a natural fit too---Ajax is a zero client install and its client/server interaction model is actually a better fit for higher latency networks like those of the wireless carriers. The challenge is that rich Ajax applications (ones with mouse-overs, drag 'n drop, etc.) consume enough laptop CPU that they are still out of the computational reach of most smart phones/PDAs, let alone basic telephones. </p> + +<p>The alternative application model to the Web (I include WML/HTTP under the Web architecture) is of course more traditional fat client applications---such as those programmed for J2ME, Windows Mobile, Symbian, Palm, or mobile Linux. Fat client app's are ideal for PIM (email, SMS, calendaring, contacts, tasks), games, and other code that handset manufactures or the carriers are willing to preinstall, but a tougher sell for non-expert business and consumer end-user installation. </p> + +<p>However, there is yet another approach that we proposed. It is particularly relevant for applications that can be surfaced via PIM software, such as your customer contacts from your CRM system, your travel itinerary from your procurement application, an urgent notification (via SMS), or even an email request to visit a particular URL. Such items can be submitted to a server like the Zimbra Collaboration Suite (ZCS), and then delivered to the mobile device via "over the air" sync. <a href="http://www.zimbra.com/products/zimbra_mobile.html">Zimbra Mobile</a>, for example, can sync contacts, appointments, and messages to Nokia, Motorola, Samsung, Treo, and Blackberry smart phones, and both intranet and Internet applications can securely export to Zimbra over open/standard protocols. Putting the two together allows Web-enabled applications to deliver PIM-oriented data all the way to the mobile device. </p> + +<p>So for applications that can be naturally surfaced via the native mobile PIM, there are now easier/cheaper options for mobile extension. For those business applications that have no such easy fit with PIM, I'm afraid you must still weigh the classic Web versus fat client architectural trade-off. In either case, I think that choosing the smart phone/PDA as the target profile makes more sense because of their relative consistency (screen size, scroll-to-click, J2ME vs. Windows Mobile platform), at least when compared with targeting the continuing stream of ever more compact, ever more personalized mobile phones. </p>]]> +</content> +</entry> +<entry> +<title>Open source and IP ownership</title> +<link rel="alternate" type="text/html" href="http://www.zimbra.com/blog/archives/2006/08/open_source_and_2.html" /> +<modified>2006-08-16T15:29:47Z</modified> +<issued>2006-08-15T16:58:03Z</issued> +<id>tag:www.zimbra.com,2006:/blog//1.114</id> +<created>2006-08-15T16:58:03Z</created> +<summary type="text/plain">I got myself in a small bit of trouble recently talking about open source IP ownership when I should have been talking about the cool new collaboration and mobile features in the 4.0 release of the Zimbra Collaboration Suite. (Nothing...</summary> +<author> +<name>Scott</name> +<url>www.zimbra.com</url><email>scott.dietzen@zimbra.com</email></author> +<dc:subject>Scott Dietzen</dc:subject><content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.zimbra.com/blog/"> +<![CDATA[<p>I got myself in a small bit of trouble recently talking about open source IP ownership when I should have been talking about the cool new collaboration and mobile features in the <a href="http://www.zimbra.com/products/countdown.html">4.0 release of the Zimbra Collaboration Suite</a>. (Nothing like a developer coming by your cube and saying "You said what?") While I didn't do such a good job at the time, the underlying point is an important one, so I'm going to give it another shot ...</p>]]> +<![CDATA[<p>It is increasingly common practice in open source communities to insist upon a single organization owning the IP rights for a particular project. For example, the Apache and Free Software Foundations do this as well as private firms like Zimbra. The primary goal of IP ownership is to better guarantee "squeaky clean" IP (that is, that all contributed code is unencumbered by any hidden IP rights) for the benefit of the community as well as for customers. This also ensures that open source licensing upgrade decisions can be made for future releases of the open source license itself---without an organizational owner, projects can effectively get locked to a particular version of a license because there is no easy way to get all of the IP owners together to make a decision about upgrading. </p> + +<p>The grief came in particular from my drawing parallels between Zimbra---a for-profit company---with more altruistic non-profit organizations like Apache and FSF regarding IP ownership. No doubt there are clear differences between for-profits and non-profits that the prospective community members have every right to consider, but I think in terms of IP ownership there is more in common than different. </p> + +<p>For a potential community member, the most important thing is the long-term guarantee of their freedoms: (1) Open source rights (granted under the open source software license) to use the product in perpetuity for free, to produce and redistribute any derivative works thereof for free, and so on; and (2) rights to do whatever they may see fit in perpetuity for any of their own contributions that they made in good faith to the project. (The good contribution agreements grant contributors back all of their rights <strong>except </strong> those that could interfere with the community, such as the right to withdraw their contribution in the future, the right to charge the community patent royalties down the road, etc. For example, Zimbra's Contributor Agreement can be found <a href="http://www.zimbra.com/community/contribute.html">here</a>. For another take, check out <a href="http://dojotoolkit.org/foundation/">Dojo</a>, one of our <a href="http://www.zimbra.com/partners/open_ajax_partners.html">Open Ajax Alliance</a> partners. ) This practice seems to me to strike the right balance between preserving individual freedoms without sacrificing the freedoms of the community as a whole. </p> + +<p>Both non-profit and for-profit open source organizations equally guarantee these freedoms to their communities, the difference being that the for-profit ones (like Zimbra) also strive to sell <strong>optional </strong>value-added services on the side, much of the proceeds of which then funds the further development of the open source software. </p>]]> +</content> +</entry> +</feed>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/images/locale.png b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/images/locale.png Binary files differnew file mode 100644 index 0000000000..0dfece4d3f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/images/locale.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/proxy/proxy.php b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/proxy/proxy.php new file mode 100644 index 0000000000..71853e9b86 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/resource/proxy/proxy.php @@ -0,0 +1,60 @@ +<?php + +$ALLOWED_URL_PREFIXES = array( + "http://feeds.feedburner.com", + "http://blog.dojotoolkit.org/feed", + "http://www.jackslocum.com/blog/feed/", + "http://portlets.blogspot.com", + "http://www.go-mono.com/monologue/index.rss", + "http://feeds.yuiblog.com/YahooUserInterfaceBlog", +); + +$ALLOWED_URL_SUFFIXES = array( + ".rdf", + ".rss", + "atom.xml", + "rss2", + "rss.xml", + "feed/atom/", +); + +$proxy_url = isset($_GET['proxy']) ? $_GET['proxy'] : false; + +if (!$proxy_url) { + header("HTTP/1.0 400 Bad Request"); + echo "proxy.php failed because proxy parameter is missing"; + exit(); +} + +$is_url_valid = false; +foreach ($ALLOWED_URL_PREFIXES as $prefix) { + if (strpos($proxy_url, $prefix) === 0) { + $is_url_valid = true; + break; + } +} + +foreach ($ALLOWED_URL_SUFFIXES as $suffix) { + if (strpos($proxy_url, $suffix) === strlen($proxy_url)-strlen($suffix)) { + $is_url_valid = true; + break; + } +} + +if (!$is_url_valid) { + header("HTTP/1.0 400 Bad Request"); + echo "Address is not allowed!"; + exit(); +} + +$session = curl_init($proxy_url); + +curl_setopt($session, CURLOPT_HEADER, false); +curl_setopt($session, CURLOPT_RETURNTRANSFER, true); + +header("Content-Type: application/xml"); +echo(curl_exec($session)); + +curl_close($session); + +?>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/C.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/C.po new file mode 100644 index 0000000000..fc408105a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/C.po @@ -0,0 +1,93 @@ +# Default translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:52+0100\n" +"PO-Revision-Date: 2006-12-19 16:54+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/feedreader/Application.js:133 +msgid "reloading ..." +msgstr "" + +#: source/class/feedreader/Application.js:138 +msgid "qooxdoo feed reader." +msgstr "" + +#: source/class/feedreader/Application.js:143 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "" +msgstr[1] "" + +#: source/class/feedreader/Application.js:144 +msgid "Remove feed" +msgstr "" + +#: source/class/feedreader/Application.js:147 +msgid "Reload" +msgstr "" + +#: source/class/feedreader/Application.js:149 +msgid "(%1) Reload the feeds." +msgstr "" + +#: source/class/feedreader/Application.js:156 +#: source/class/feedreader/Application.js:158 +msgid "English" +msgstr "" + +#: source/class/feedreader/Application.js:157 +msgid "German" +msgstr "" + +#: source/class/feedreader/Application.js:159 +msgid "Turkish" +msgstr "" + +#: source/class/feedreader/Application.js:160 +msgid "Italian" +msgstr "" + +#: source/class/feedreader/Application.js:161 +msgid "Spanish" +msgstr "" + +#: source/class/feedreader/Application.js:162 +msgid "Swedish" +msgstr "" + +#: source/class/feedreader/Application.js:163 +msgid "Russian" +msgstr "" + +#: source/class/feedreader/Application.js:186 +msgid "Help" +msgstr "" + +#: source/class/feedreader/Application.js:194 +msgid "News feeds" +msgstr "" + +#: source/class/feedreader/Application.js:215 +msgid "Subject" +msgstr "" + +#: source/class/feedreader/Application.js:216 +msgid "Sender" +msgstr "" + +#: source/class/feedreader/Application.js:217 +msgid "Date" +msgstr "" + +#: source/class/feedreader/ArticleView.js:79 +msgid "read more ..." +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/de.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/de.po new file mode 100644 index 0000000000..099f9855d4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/de.po @@ -0,0 +1,95 @@ +# German translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:52+0100\n" +"PO-Revision-Date: 2006-12-22 09:59+0100\n" +"Last-Translator: Fabian Jakobs <fabian dot jakobs at 1und1 dot de>\n" +"Language-Team: <en@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#: source/class/feedreader/Application.js:133 +#, fuzzy +msgid "reloading ..." +msgstr "aktualisieren ..." + +#: source/class/feedreader/Application.js:138 +msgid "qooxdoo feed reader." +msgstr "\"qooxdoo\" feed reader" + +#: source/class/feedreader/Application.js:143 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Feed hinzufügen" +msgstr[1] "Feeds hinzufügen" + +#: source/class/feedreader/Application.js:144 +msgid "Remove feed" +msgstr "Feed löschen" + +#: source/class/feedreader/Application.js:147 +msgid "Reload" +msgstr "Aktualisieren" + +#: source/class/feedreader/Application.js:149 +msgid "(%1) Reload the feeds." +msgstr "(%1) Feeds aktualisieren." + +#: source/class/feedreader/Application.js:156 +#: source/class/feedreader/Application.js:158 +msgid "English" +msgstr "Englisch" + +#: source/class/feedreader/Application.js:157 +msgid "German" +msgstr "Deutsch" + +#: source/class/feedreader/Application.js:159 +msgid "Turkish" +msgstr "Türkisch" + +#: source/class/feedreader/Application.js:160 +msgid "Italian" +msgstr "Italienisch" + +#: source/class/feedreader/Application.js:161 +msgid "Spanish" +msgstr "Spanisch" + +#: source/class/feedreader/Application.js:162 +msgid "Swedish" +msgstr "Schwedisch" + +#: source/class/feedreader/Application.js:163 +msgid "Russian" +msgstr "Russisch" + +#: source/class/feedreader/Application.js:186 +msgid "Help" +msgstr "Hilfe" + +#: source/class/feedreader/Application.js:194 +msgid "News feeds" +msgstr "Nachrichtenkanäle" + +#: source/class/feedreader/Application.js:215 +msgid "Subject" +msgstr "Betreff" + +#: source/class/feedreader/Application.js:216 +msgid "Sender" +msgstr "Absender" + +#: source/class/feedreader/Application.js:217 +msgid "Date" +msgstr "Datum" + +#: source/class/feedreader/ArticleView.js:79 +msgid "read more ..." +msgstr "weitere Informationen ..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/en.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/en.po new file mode 100644 index 0000000000..e24d30878b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/en.po @@ -0,0 +1,93 @@ +# English translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:52+0100\n" +"PO-Revision-Date: 2006-12-21 10:17+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/feedreader/Application.js:133 +msgid "reloading ..." +msgstr "reloading ..." + +#: source/class/feedreader/Application.js:138 +msgid "qooxdoo feed reader." +msgstr "qooxdoo feed reader." + +#: source/class/feedreader/Application.js:143 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Add feed" +msgstr[1] "Add feeds" + +#: source/class/feedreader/Application.js:144 +msgid "Remove feed" +msgstr "Remove feed" + +#: source/class/feedreader/Application.js:147 +msgid "Reload" +msgstr "Reload" + +#: source/class/feedreader/Application.js:149 +msgid "(%1) Reload the feeds." +msgstr "(%1) Reload the feeds." + +#: source/class/feedreader/Application.js:156 +#: source/class/feedreader/Application.js:158 +msgid "English" +msgstr "English" + +#: source/class/feedreader/Application.js:157 +msgid "German" +msgstr "German" + +#: source/class/feedreader/Application.js:159 +msgid "Turkish" +msgstr "Turkish" + +#: source/class/feedreader/Application.js:160 +msgid "Italian" +msgstr "Italian" + +#: source/class/feedreader/Application.js:161 +msgid "Spanish" +msgstr "Spanish" + +#: source/class/feedreader/Application.js:162 +msgid "Swedish" +msgstr "Swedish" + +#: source/class/feedreader/Application.js:163 +msgid "Russian" +msgstr "Russian" + +#: source/class/feedreader/Application.js:186 +msgid "Help" +msgstr "Help" + +#: source/class/feedreader/Application.js:194 +msgid "News feeds" +msgstr "News feeds" + +#: source/class/feedreader/Application.js:215 +msgid "Subject" +msgstr "Subject" + +#: source/class/feedreader/Application.js:216 +msgid "Sender" +msgstr "Sender" + +#: source/class/feedreader/Application.js:217 +msgid "Date" +msgstr "Date" + +#: source/class/feedreader/ArticleView.js:79 +msgid "read more ..." +msgstr "read more ..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/es.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/es.po new file mode 100644 index 0000000000..cb1e02ccb0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/es.po @@ -0,0 +1,94 @@ +# Spanish translation +# +msgid "" +msgstr "" +"Project-Id-Version: feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:52+0100\n" +"PO-Revision-Date: 2007-01-24 20:54+0100\n" +"Last-Translator: Carsten Rammoser <carsten@rammoser.com>\n" +"Language-Team: <camilo.aguilar@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: COLOMBIA\n" + +#: source/class/feedreader/Application.js:133 +msgid "reloading ..." +msgstr "actualizando ..." + +#: source/class/feedreader/Application.js:138 +msgid "qooxdoo feed reader." +msgstr "lector de feeds qooxdoo." + +#: source/class/feedreader/Application.js:143 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Agregar feed" +msgstr[1] "Agregar feeds" + +#: source/class/feedreader/Application.js:144 +msgid "Remove feed" +msgstr "Eliminar feed" + +#: source/class/feedreader/Application.js:147 +msgid "Reload" +msgstr "Actualizar" + +#: source/class/feedreader/Application.js:149 +msgid "(%1) Reload the feeds." +msgstr "(%1) Actualizar los feeds." + +#: source/class/feedreader/Application.js:156 +#: source/class/feedreader/Application.js:158 +msgid "English" +msgstr "Inglés" + +#: source/class/feedreader/Application.js:157 +msgid "German" +msgstr "Alemán" + +#: source/class/feedreader/Application.js:159 +msgid "Turkish" +msgstr "Turco" + +#: source/class/feedreader/Application.js:160 +msgid "Italian" +msgstr "Italiano" + +#: source/class/feedreader/Application.js:161 +msgid "Spanish" +msgstr "Español" + +#: source/class/feedreader/Application.js:162 +msgid "Swedish" +msgstr "Sueco" + +#: source/class/feedreader/Application.js:163 +msgid "Russian" +msgstr "Ruso" + +#: source/class/feedreader/Application.js:186 +msgid "Help" +msgstr "Ayuda" + +#: source/class/feedreader/Application.js:194 +msgid "News feeds" +msgstr "Feeds de noticias" + +#: source/class/feedreader/Application.js:215 +msgid "Subject" +msgstr "Asunto" + +#: source/class/feedreader/Application.js:216 +msgid "Sender" +msgstr "Remitente" + +#: source/class/feedreader/Application.js:217 +msgid "Date" +msgstr "Fecha" + +#: source/class/feedreader/ArticleView.js:79 +msgid "read more ..." +msgstr "leer más ..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/it.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/it.po new file mode 100644 index 0000000000..1431458283 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/it.po @@ -0,0 +1,94 @@ +# Italian translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-23 17:57+0100\n" +"PO-Revision-Date: 2006-12-21 22:55+0100\n" +"Last-Translator: Alessandro Sala <alessandro.sala@mclink.net>\n" +"Language-Team: Italiano <it@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#: source/class/feedreader/Application.js:130 +msgid "reloading ..." +msgstr "ricarico..." + +#: source/class/feedreader/Application.js:135 +msgid "qooxdoo feed reader." +msgstr "lettore di feed di qooxdoo" + +#: source/class/feedreader/Application.js:140 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Aggiungi un feed" +msgstr[1] "Aggiungi dei feed" + +#: source/class/feedreader/Application.js:141 +msgid "Remove feed" +msgstr "Rimuovi un feed" + +#: source/class/feedreader/Application.js:144 +msgid "Reload" +msgstr "Ricarica" + +#: source/class/feedreader/Application.js:146 +msgid "(%1) Reload the feeds." +msgstr "(%1) Ricarica i feed" + +#: source/class/feedreader/Application.js:153 +#: source/class/feedreader/Application.js:155 +msgid "English" +msgstr "Inglese" + +#: source/class/feedreader/Application.js:154 +msgid "German" +msgstr "Tedesco" + +#: source/class/feedreader/Application.js:156 +msgid "Turkish" +msgstr "Turco" + +#: source/class/feedreader/Application.js:157 +msgid "Italian" +msgstr "Italiano" + +#: source/class/feedreader/Application.js:158 +msgid "Spanish" +msgstr "Spagnolo" + +#: source/class/feedreader/Application.js:159 +msgid "Swedish" +msgstr "Svedese" + +#: source/class/feedreader/Application.js:160 +msgid "Russian" +msgstr "Russo" + +#: source/class/feedreader/Application.js:183 +msgid "Help" +msgstr "Aiuto" + +#: source/class/feedreader/Application.js:191 +msgid "News feeds" +msgstr "Feed di notizie" + +#: source/class/feedreader/Application.js:212 +msgid "Subject" +msgstr "Oggetto" + +#: source/class/feedreader/Application.js:213 +msgid "Sender" +msgstr "Mittente" + +#: source/class/feedreader/Application.js:214 +msgid "Date" +msgstr "Data" + +#: source/class/feedreader/ArticleView.js:77 +msgid "read more ..." +msgstr "continua..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/ru.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/ru.po new file mode 100644 index 0000000000..b728919dbf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/ru.po @@ -0,0 +1,94 @@ +# Russian translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-23 17:57+0100\n" +"PO-Revision-Date: 2006-12-20 23:22+0200\n" +"Last-Translator: <zindel@gammacenter.com>\n" +"Language-Team: <en@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"X-Generator: KBabel 1.11.4\n" + +#: source/class/feedreader/Application.js:130 +msgid "reloading ..." +msgstr "загрузка..." + +#: source/class/feedreader/Application.js:135 +msgid "qooxdoo feed reader." +msgstr "qooxdoo RSS reader" + +#: source/class/feedreader/Application.js:140 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Добавить канал" +msgstr[1] "Добавить каналы" + +#: source/class/feedreader/Application.js:141 +msgid "Remove feed" +msgstr "Удалить канал" + +#: source/class/feedreader/Application.js:144 +msgid "Reload" +msgstr "Перечитать" + +#: source/class/feedreader/Application.js:146 +msgid "(%1) Reload the feeds." +msgstr "{%1) Перечитать все каналы." + +#: source/class/feedreader/Application.js:153 +#: source/class/feedreader/Application.js:155 +msgid "English" +msgstr "Английский" + +#: source/class/feedreader/Application.js:154 +msgid "German" +msgstr "Немецкий" + +#: source/class/feedreader/Application.js:156 +msgid "Turkish" +msgstr "" + +#: source/class/feedreader/Application.js:157 +msgid "Italian" +msgstr "" + +#: source/class/feedreader/Application.js:158 +msgid "Spanish" +msgstr "" + +#: source/class/feedreader/Application.js:159 +msgid "Swedish" +msgstr "" + +#: source/class/feedreader/Application.js:160 +msgid "Russian" +msgstr "" + +#: source/class/feedreader/Application.js:183 +msgid "Help" +msgstr "Помощь" + +#: source/class/feedreader/Application.js:191 +msgid "News feeds" +msgstr "Новостные каналы" + +#: source/class/feedreader/Application.js:212 +msgid "Subject" +msgstr "Тема" + +#: source/class/feedreader/Application.js:213 +msgid "Sender" +msgstr "Отправитель" + +#: source/class/feedreader/Application.js:214 +msgid "Date" +msgstr "Дата" + +#: source/class/feedreader/ArticleView.js:77 +msgid "read more ..." +msgstr "далее..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/sv.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/sv.po new file mode 100644 index 0000000000..f1a03b3b52 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/sv.po @@ -0,0 +1,93 @@ +# Swedish translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-23 17:57+0100\n" +"PO-Revision-Date: 2006-12-19 11:10+0100\n" +"Last-Translator: Henric Johansson <henric.johansson@mindset.se>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: source/class/feedreader/Application.js:130 +msgid "reloading ..." +msgstr "uppdaterar..." + +#: source/class/feedreader/Application.js:135 +msgid "qooxdoo feed reader." +msgstr "qooxdoo feed läsare." + +#: source/class/feedreader/Application.js:140 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Lägg till feed" +msgstr[1] "Lägg till feeds" + +#: source/class/feedreader/Application.js:141 +msgid "Remove feed" +msgstr "Ta bort feed" + +#: source/class/feedreader/Application.js:144 +msgid "Reload" +msgstr "Uppdatera" + +#: source/class/feedreader/Application.js:146 +msgid "(%1) Reload the feeds." +msgstr "(%1) Uppdatera feedsen." + +#: source/class/feedreader/Application.js:153 +#: source/class/feedreader/Application.js:155 +msgid "English" +msgstr "Engelska" + +#: source/class/feedreader/Application.js:154 +msgid "German" +msgstr "Tyska" + +#: source/class/feedreader/Application.js:156 +msgid "Turkish" +msgstr "" + +#: source/class/feedreader/Application.js:157 +msgid "Italian" +msgstr "" + +#: source/class/feedreader/Application.js:158 +msgid "Spanish" +msgstr "" + +#: source/class/feedreader/Application.js:159 +msgid "Swedish" +msgstr "" + +#: source/class/feedreader/Application.js:160 +msgid "Russian" +msgstr "" + +#: source/class/feedreader/Application.js:183 +msgid "Help" +msgstr "Hjälp" + +#: source/class/feedreader/Application.js:191 +msgid "News feeds" +msgstr "Nyhetsfeed" + +#: source/class/feedreader/Application.js:212 +msgid "Subject" +msgstr "Ämne" + +#: source/class/feedreader/Application.js:213 +msgid "Sender" +msgstr "Avsändare" + +#: source/class/feedreader/Application.js:214 +msgid "Date" +msgstr "Datum" + +#: source/class/feedreader/ArticleView.js:77 +msgid "read more ..." +msgstr "läs mer..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/tr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/tr.po new file mode 100644 index 0000000000..f3ccc949b8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/feedreader/source/translation/tr.po @@ -0,0 +1,95 @@ +# Turkish translation +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo feedreader\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-23 17:57+0100\n" +"PO-Revision-Date: 2006-12-18 21:51+0200\n" +"Last-Translator: Fatih Tolga Ata <fatih@diyezon.com>\n" +"Language-Team: <fatih@tullab.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Turkish\n" +"X-Poedit-Country: Turkey\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: source/class/feedreader/Application.js:130 +msgid "reloading ..." +msgstr "yenileniyor ..." + +#: source/class/feedreader/Application.js:135 +msgid "qooxdoo feed reader." +msgstr "qooxdoo besleme okuyucu." + +#: source/class/feedreader/Application.js:140 +msgid "Add feed" +msgid_plural "Add feeds" +msgstr[0] "Besleme ekle" +msgstr[1] "Beslemeler ekle" + +#: source/class/feedreader/Application.js:141 +msgid "Remove feed" +msgstr "Besleme sil" + +#: source/class/feedreader/Application.js:144 +msgid "Reload" +msgstr "Yenile" + +#: source/class/feedreader/Application.js:146 +msgid "(%1) Reload the feeds." +msgstr "(%1) Beslemesini yenile." + +#: source/class/feedreader/Application.js:153 +#: source/class/feedreader/Application.js:155 +msgid "English" +msgstr "İngilizce" + +#: source/class/feedreader/Application.js:154 +msgid "German" +msgstr "Almanca" + +#: source/class/feedreader/Application.js:156 +msgid "Turkish" +msgstr "" + +#: source/class/feedreader/Application.js:157 +msgid "Italian" +msgstr "" + +#: source/class/feedreader/Application.js:158 +msgid "Spanish" +msgstr "" + +#: source/class/feedreader/Application.js:159 +msgid "Swedish" +msgstr "" + +#: source/class/feedreader/Application.js:160 +msgid "Russian" +msgstr "" + +#: source/class/feedreader/Application.js:183 +msgid "Help" +msgstr "Yardım" + +#: source/class/feedreader/Application.js:191 +msgid "News feeds" +msgstr "Haber beslemeleri" + +#: source/class/feedreader/Application.js:212 +msgid "Subject" +msgstr "Konu" + +#: source/class/feedreader/Application.js:213 +msgid "Sender" +msgstr "Gönderen" + +#: source/class/feedreader/Application.js:214 +msgid "Date" +msgstr "Tarih" + +#: source/class/feedreader/ArticleView.js:77 +msgid "read more ..." +msgstr "daha fazla ..." diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/index.html new file mode 100644 index 0000000000..139e50cabc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/index.html @@ -0,0 +1,183 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>qooxdoo » Demo</title> + <style type="text/css"> +*{ + box-sizing: border-box; + -moz-box-sizing: border-box; + margin: 0; + padding: 0; +} + +body{ + font-size: 12px; + font-family: Arial, "Bitstream Vera Sans", Verdana, sans-serif; + margin: 0; + padding: 0; +} + +p{ + margin: 6px 0; +} + +.hide, .build { + display: none; +} + +#demoHead, +#demoFoot{ + position: absolute; + left: 0px; + right: 0px; + width: 100%; + background: #134275; + padding: 5px 8px; + color: #DEFF83; + font-weight: bold; + overflow: hidden; + z-index: 1000000000; +} + +#demoHead{ + top: 0px; +} + +#demoHead span{ + font-weight: normal; + color: white; +} + +img{ + box-sizing: content-box; + -moz-box-sizing: content-box; +} + +#content{ + margin: 40px 20px 0; + width: 400px; +} + +h1{ + font-size: 22px; + margin-bottom: 20px; + color: #134275; +} + +h2{ + font-size: 16px; + color: #134275; + margin-bottom: 10px; +} + +h3{ + font-size: 14px; + color: #1D65B3; +} + +a{ + color: #335EA8; +} + +li{ + margin-left: 16px; + list-style: square; + margin-bottom: 20px; +} + +p{ + font-size: 12px; +} + +ul ul{ + margin-top: 20px; +} + +p.note{ + padding: 10px; + background: #F3FFD1; + color: #444444; + margin: 20px 0; +} + </style> + <script type="text/javascript"> + function launch(url, w, h) { + var w = w || 800; + var h = h || 600; + var sw = 100; + var sh = 100; + + sw = getCenteredCoord(w, screen.availWidth); + sh = getCenteredCoord(h, screen.availHeight); + + var win = window.open(url, "qx", "width=" + w + ",height=" + h + ",left=" + sw + ",top=" + sh + ",status=no,resizable=no"); + } + + function getCenteredCoord(windowDim, screenDim) { + return (screenDim / 2) - (windowDim / 2); + } + </script> +</head> +<body> + <div id="demoHead">qooxdoo: <span>The new era of web interface development</span></div> + + <div id="content" style="position:absolute;top:0px;left:0px"> + + <h1>Demo</h1> + + <p class="note">The source version is only available in SVN and SDK archives.</p> + + <h2>Applications</h2> + + <ul> + <li> + <h3>Showcase</h3> + <p>A good example for qooxdoo's versatility.</p> + <span class="source"><a href="showcase/build/index.html"><b>Build</b></a> | <a href="showcase/source/index.html">Source (Developer)</a></span> + <span class="build"><a href="showcase/index.html"><b>Start Showcase</b></a></span> + </li> + <li> + <h3>Feed Reader</h3> + <p>qooxdoo RSS feed reader using dummy RSS feed data.</p> + <span class="source"><a href="feedreader/build/index.html"><b>Build</b></a> | <a href="feedreader/source/index.html">Source (Developer)</a></span> + <span class="build"><a href="feedreader/index.html"><b>Open Feed Reader</b></a></span> + </li> + <li> + <h3>Web Mail</h3> + <p>Complex application-like interface using multiple qooxdoo widgets.</p> + <span class="source"><a href="#" onclick="launch('webmail/build/index.html')"><b>Build</b></a> | <a href="#" onclick="launch('webmail/source/index.html')">Source (Developer)</a></span> + <span class="build"><a href="#" onclick="launch('webmail/index.html')"><b>Open Web Mail</b></a></span> + </li> + <li> + <h3>API Viewer</h3> + <p>qooxdoo based API viewer.</p> + <span class="source"><a href="apiviewer/build/index.html"><b>Build</b></a> | <a href="apiviewer/source/index.html">Source (Developer)</a></span> + <span class="build"><a href="apiviewer/index.html"><b>Open API viewer</b></a></span> + </li> + <li> + <h3>Samples</h3> + <ul> + <li> + <h4>Example</h4> + <p>Easily to understand examples. The basic features of each qooxdoo widget is demonstrated in a separate example. This section is probably the one you are looking for!</p> + <span class="source"><a href="sample/build/html/example/index.html"><b>Build</b></a> | <a href="sample/source/html/example/index.html">Source (Developer)</a></span> + <span class="build"><a href="sample/html/example/index.html"><b>Show Example</b></a></span> + </li> + <li> + <h4>Test</h4> + <p>These tests demonstrate internal functionality of qooxdoo. Not really useful for the typical qooxdoo user, but needed for developers to test some complex layout stuff, performance related problems and more. The tests may not always be up-to-date and functioning!</p> + <span class="source"><a href="sample/build/html/test/index.html"><b>Build</b></a> | <a href="sample/source/html/test/index.html">Source (Developer)</a></span> + <span class="build"><a href="sample/html/test/index.html"><b>Show Test</b></a></span> + </li> + <li> + <h4>Performance</h4> + <p>These tests are used to test performance of different javascript/qooxdoo rountines and allows them to compare them with each other</p> + <span class="source"><a href="sample/build/html/performance/index.html"><b>Build</b></a> | <a href="sample/source/html/performance/index.html">Source (Developer)</a></span> + <span class="build"><a href="sample/html/performance/index.html"><b>Show Performance</b></a></span> + </li> + </ul> + </li> + </ul> + </div> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/Makefile new file mode 100644 index 0000000000..ec67480fc1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/Makefile @@ -0,0 +1,122 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################ +# BASIC SETTINGS +################################################################################ + +# +# Location of your qooxdoo distribution +# Could be relative from this location or absolute +# +QOOXDOO_PATH = ../../.. + +# +# The same as above, but from the webserver point of view +# Starting point is the application HTML file of the source folder. +# In most cases just add a "/.." compared to above +# +QOOXDOO_URI = ../../../../../.. + +# +# Namespace of your application e.g. custom +# +APPLICATION_NAMESPACE = sample + +# +# Titles used in your API viewer and during the build process +# +APPLICATION_MAKE_TITLE = SAMPLE +APPLICATION_API_TITLE = Sample + +# +# Additional files (space separated list) +# +APPLICATION_FILES = index.html html css + + + +################################################################################ +# ADVANCED SETTINGS +################################################################################ + +# +# Disable line breaks +# +APPLICATION_LINEBREAKS_BUILD = false +APPLICATION_LINEBREAKS_SOURCE = false + +# +# qooxdoo.org sync +# +APPLICATION_PUBLISH_PATH = root@qooxdoo.org:/var/www/qooxdoo/demo/$(FRAMEWORK_VERSION)/$(APPLICATION_NAMESPACE) + +# +# Build/Integrate all features +# +APPLICATION_COMPLETE_BUILD = true + +# +# Relation from HTML file to the top level directory (source or build). +# +APPLICATION_PAGE_TO_TOPLEVEL = ../.. + + + + + + +################################################################################ +# INCLUDE CORE +################################################################################ + +ifneq ($(QOOXDOO_PATH),PLEASE_DEFINE_QOOXDOO_PATH) + include $(QOOXDOO_PATH)/frontend/framework/tool/make/targets.mk + include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk +endif + +error: + @echo " * Please configure QOOXDOO_PATH" + + + + + +################################################################################ +# EXTENSIONS +################################################################################ + +layout-source: + @echo + @echo " GENERATION OF SAMPLE LAYOUT" + @$(CMD_LINE) + @echo " * Generating source/script/layout.js..." + @python tool/layout.py source/script/layout.js source/html + +layout-build: + @echo + @echo " GENERATION OF SAMPLE LAYOUT" + @$(CMD_LINE) + @echo " * Generating build/script/layout.js..." + @python tool/layout.py build/script/layout.js build/html + +build: layout-build +source: layout-source diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/css/layout.css b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/css/layout.css new file mode 100644 index 0000000000..e2c1d55ade --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/css/layout.css @@ -0,0 +1,173 @@ +body{ + font-size: 11px; + font-family: Arial, "Bitstream Vera Sans", Verdana, sans-serif; + margin: 0; + padding: 0; +} + +p{ + margin: 6px 0; +} + +#demoHead, +#demoFoot{ + position: absolute; + left: 0px; + right: 0px; + width: 100%; + background: #134275; + padding: 3px 8px; + height: 20px; + color: white; + font-weight: bold; + overflow: hidden; + z-index: 1000000000; +} + +#demoHead{ + top: 0px; +} + +#demoHead span{ + font-weight: normal; +} + +#demoFoot{ + bottom: 0px; +} + +#demoFoot a{ + color: white; +} + +#demoFrame{ + position: absolute; + top: 20px; + bottom: 20px; + right: 0; + width: 280px; + background: #fff; + border-left: 10px solid #134275; + z-index: 1000000000; +} + +#demoFiles{ + font-size: 11px; + font-family: Tahoma, Verdana, sans-serif; + + position: absolute; + top: 24px; + right: 50px; + width: 215px; + z-index: 1000000002; +} + +#demoFiles optgroup{ + background: #ececed; + font-size: 14px; + text-transform: capitalize; +} + +#demoFiles optgroup option{ + font-size: 11px; + background: #fff; +} + +#demoJump{ + position: absolute; + top: 24px; + right: 4px; + width: 45px; + text-align: right; + z-index: 1000000002; +} + +#demoDescription{ + position: absolute; + top: 44px; + height : 120px; + width: 266px; + right: 4px; + z-index: 1000000002; + overflow: auto; + border-bottom: 10px solid #134275; + padding: 0px 6px 0px 4px; +} + +#demoDescription p{ + margin: 4px 0; +} + +#demoDescription h1{ + font-size: 12px; + margin: 8px 0 4px; +} + +#demoDebug{ + position: absolute; + top: 160px; + bottom: 24px; + right: 4px; + width: 266px; + font-size: 10px; + font-family: "Bitstream Vera Sans Mono", "Courier New", "Courier", monospace; + z-index: 1000000102; +} + +#demoDebug .log-body{ + overflow: auto; + position: absolute; + top: 30px; + bottom: 0px; + width: 266px; + padding: 4px; +} + +#demoDebug .log-debug{ + color: gray; + padding-left: 6px; +} + +#demoDebug .log-info{ + background: #DFEBFD; + padding-left: 6px; +} + +#demoDebug .log-warn{ + background: #F5FAAD; + padding-left: 6px; +} + +#demoDebug .log-error{ + background: #D2623E; + color: black; + padding-left: 6px; +} + +#demoDebug .log-group{ + margin-top: 4px; + margin-bottom: 1px; + text-decoration: underline; +} + +#demoDebug .log-head{ + padding: 8px 2px 4px; +} + +#demoJump button, +#demoDebug .log-head button{ + border: 1px solid #335EA8; + margin: 0 2px; + font-size: 11px; + background: #EBE9ED; + font-family: Tahoma, Verdana, sans-serif; +} + +#demoDebug .log-head button{ + visibility: visible; +} + +#demoJump button{ + width: 16px; + -moz-appearance: none !important; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/css/layout_ie.css b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/css/layout_ie.css new file mode 100644 index 0000000000..70de91b69e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/css/layout_ie.css @@ -0,0 +1,11 @@ +#demoFrame{ + height: expression(document.body.offsetHeight - 40); +} + +#demoDebug{ + height: expression(document.body.offsetHeight - 184); +} + +#demoDebug .log-body{ + height: expression(document.body.offsetHeight - 214); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_1.html new file mode 100644 index 0000000000..3a8078e1bf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_1.html @@ -0,0 +1,73 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.basic.Atom is the parent class for buttons, menu entries, icons, checkboxes. While you can do, + you usually don't have to instantiate qx.ui.basic.Atom directly.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // test no1 + var nl1 = new qx.ui.basic.Atom("Test #1", "icon/16/actions/view-refresh.png", 16, 16); + nl1.setTop(48); + nl1.setLeft(20); + nl1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + nl1.setBackgroundColor(new qx.renderer.color.Color("white")); + nl1.setPadding(4); + d.add(nl1); + + // test no2 + var nl2 = new qx.ui.basic.Atom("Test #2"); + nl2.setTop(48); + nl2.setLeft(120); + nl2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + nl2.setBackgroundColor(new qx.renderer.color.Color("white")); + nl2.setPadding(4); + d.add(nl2); + + // test no3 + var nl3 = new qx.ui.basic.Atom(null, "icon/16/actions/view-refresh.png"); + nl3.setTop(48); + nl3.setLeft(200); + nl3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + nl3.setBackgroundColor(new qx.renderer.color.Color("white")); + nl3.setPadding(4); + d.add(nl3); + + // test no4 + var nl4 = new qx.ui.basic.Atom("<span style='font-size:14px'>Some great HTML</span><br/>for <b>you</b>", "icon/32/actions/view-refresh.png"); + nl4.setTop(48); + nl4.setLeft(250); + nl4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + nl4.setBackgroundColor(new qx.renderer.color.Color("white")); + nl4.setPadding(4); + d.add(nl4); + + // test no5 + var nl5 = new qx.ui.basic.Atom(qx.html.Textile.textilize("*File Information*:\nJPEG-Photo\nCreated: 01/03/05"), "icon/48/apps/preferences-desktop-theme.png"); + with(nl5) + { + setTop(200); + setLeft(20); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + setPadding(3, 6); + }; + d.add(nl5); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_2.html new file mode 100644 index 0000000000..dcbf546b4d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_2.html @@ -0,0 +1,172 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some more complex tests for qx.ui.basic.Atom.</p> + <p>You can change all the properties before "really creating" the object or any time after this was done.</p> + </div> + + <div style="display:none" id="control"> + <p> + Width: + <a href="javascript://" onclick="void(at1.setWidth(null))">null</a> | + <a href="javascript://" onclick="void(at1.setWidth('auto'))">auto</a> | + <a href="javascript://" onclick="void(at1.setWidth(25))">25</a> | + <a href="javascript://" onclick="void(at1.setWidth(50))">50</a> | + <a href="javascript://" onclick="void(at1.setWidth(100))">100</a> | + <a href="javascript://" onclick="void(at1.setWidth(200))">200</a> + </p> + <p> + Height: + <a href="javascript://" onclick="void(at1.setHeight(null))">null</a> | + <a href="javascript://" onclick="void(at1.setHeight('auto'))">auto</a> | + <a href="javascript://" onclick="void(at1.setHeight(25))">25</a> | + <a href="javascript://" onclick="void(at1.setHeight(50))">50</a> | + <a href="javascript://" onclick="void(at1.setHeight(100))">100</a> | + <a href="javascript://" onclick="void(at1.setHeight(200))">200</a> + </p> + <hr/> + <p> + Label Size: + <a href="javascript://" onclick="void(at1.setLabel(null))">null</a> | + <a href="javascript://" onclick="void(at1.setLabel('short'))">short</a> | + <a href="javascript://" onclick="void(at1.setLabel('some cool label'))">medium</a> | + <a href="javascript://" onclick="void(at1.setLabel('ultra long label description'))">long</a> | + <a href="javascript://" onclick="void(at1.setLabel('<b>hello <i>world</i></b>'))">html</a> | + <a href="javascript://" onclick="void(at1.setLabel('<p>Hello tester.</p><ul><li>cool</li><li><b>test</b></li><li>file</li></ul>'))">complex</a> + </p> + <p> + Icon Size: + <a href="javascript://" onclick="void(at1.setIcon(null))">null</a> | + <a href="javascript://" onclick="void(at1.setIcon('icon/16/apps/accessories-date.png'))">16px</a> | + <a href="javascript://" onclick="void(at1.setIcon('icon/32/actions/format-color.png'))">32px</a> | + <a href="javascript://" onclick="void(at1.setIcon('icon/48/devices/media-flash.png'))">48px</a> + </p> + <p> + Icon Position: + <a href="javascript://" onclick="void(at1.setIconPosition('top'))">top</a> | + <a href="javascript://" onclick="void(at1.setIconPosition('right'))">right</a> | + <a href="javascript://" onclick="void(at1.setIconPosition('bottom'))">bottom</a> | + <a href="javascript://" onclick="void(at1.setIconPosition('left'))">left</a> + </p> + <p> + Spacing: + <a href="javascript://" onclick="void(at1.setSpacing(0))">0</a> | + <a href="javascript://" onclick="void(at1.setSpacing(2))">2</a> | + <a href="javascript://" onclick="void(at1.setSpacing(4))">4</a> | + <a href="javascript://" onclick="void(at1.setSpacing(6))">6</a> | + <a href="javascript://" onclick="void(at1.setSpacing(8))">8</a> | + <a href="javascript://" onclick="void(at1.setSpacing(10))">10</a> | + <a href="javascript://" onclick="void(at1.setSpacing(25))">25</a> | + <a href="javascript://" onclick="void(at1.setSpacing(50))">50</a> + </p> + <hr/> + <p> + Show: + <a href="javascript://" onclick="void(at1.setShow('none'))">None</a> | + <a href="javascript://" onclick="void(at1.setShow('label'))">Label</a> | + <a href="javascript://" onclick="void(at1.setShow('icon'))">Icon</a> | + <a href="javascript://" onclick="void(at1.setShow('both'))">Both</a> + </p> + <hr/> + <p> + Horizontal Children Align: + <a href="javascript://" onclick="void(at1.setHorizontalChildrenAlign('left'))">left</a> | + <a href="javascript://" onclick="void(at1.setHorizontalChildrenAlign('center'))">center</a> | + <a href="javascript://" onclick="void(at1.setHorizontalChildrenAlign('right'))">right</a> + </p> + <p> + Vertical Children Align: + <a href="javascript://" onclick="void(at1.setVerticalChildrenAlign('top'))">top</a> | + <a href="javascript://" onclick="void(at1.setVerticalChildrenAlign('middle'))">middle</a> | + <a href="javascript://" onclick="void(at1.setVerticalChildrenAlign('bottom'))">bottom</a> + </p> + <hr/> + <p> + Padding: + <a href="javascript://" onclick="void(at1.setPadding(null))">None</a> | + <a href="javascript://" onclick="void(at1.setPadding(2, 4))">2, 4</a> | + <a href="javascript://" onclick="void(at1.setPadding(4, 8))">4, 8</a> | + <a href="javascript://" onclick="void(at1.setPadding(16))">16</a> + </p> + <p> + Border: + <a href="javascript://" onclick="void(at1.setBorder(null))">null</a> | + <a href="javascript://" onclick="void(at1.setBorder(new qx.renderer.border.Border(1, 'solid', 'black')))">1</a> | + <a href="javascript://" onclick="void(at1.setBorder(new qx.renderer.border.Border(5, 'solid', 'black')))">5</a> | + <a href="javascript://" onclick="void(at1.setBorder(new qx.renderer.border.Border(10, 'solid', 'black')))">10</a> | + <a href="javascript://" onclick="void(at1.setBorder(new qx.renderer.border.Border(25, 'solid', 'black')))">25</a> | + <a href="javascript://" onclick="void(at1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset))">outset</a> | + <a href="javascript://" onclick="void(at1.setBorder(qx.renderer.border.BorderPresets.getInstance().inset))">inset</a> + </p> + <hr/> + <p> + Opacity: + <a href="javascript://" onclick="void(at1.setOpacity(null))">null</a> | + <a href="javascript://" onclick="void(at1.setOpacity(0))">0</a> | + <a href="javascript://" onclick="void(at1.setOpacity(0.25))">0.25</a> | + <a href="javascript://" onclick="void(at1.setOpacity(0.5))">0.5</a> | + <a href="javascript://" onclick="void(at1.setOpacity(0.75))">0.75</a> | + <a href="javascript://" onclick="void(at1.setOpacity(1))">1</a> + </p> + <p> + Enabled: + <a href="javascript://" onclick="void(at1.setEnabled(false))">false</a> | + <a href="javascript://" onclick="void(at1.setEnabled(true))">true</a> + </p> + </div> + + <script type="text/javascript"> + var at1; + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + at1 = new qx.ui.basic.Atom("My first qx.ui.basic.Atom", "icon/32/actions/format-color.png"); + + with(at1) + { + setTop(48); + setLeft(20); + + setIconPosition("right"); + + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setBackgroundColor(new qx.renderer.color.Color("white")); + setPadding(2, 4); + }; + + var ct1 = new qx.ui.basic.Label(document.getElementById("control").innerHTML); + + with(ct1) + { + setWidth(300); + setRight(335); + + setHeight(null); + setTop(48); + setBottom(48); + + setOverflow("auto"); + + setBackgroundColor(new qx.renderer.color.Color("white")); + setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + setPadding(10); + }; + + d.add(at1, ct1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_3.html new file mode 100644 index 0000000000..675988a65a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Atom_3.html @@ -0,0 +1,39 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the new flash support for qx.ui.basic.Atom</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + var a; + + for (var i=1; i<11; i++) + { + var a = new qx.ui.basic.Atom("Flash Atom #" + i, "icon/16/actions/view-refresh.png", 16, 16, "./image/flash/color/file" + i + ".swf"); + + a.setTop(48 + ((i-1)*30)); + a.setLeft(20); + a.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + a.setBackgroundColor(new qx.renderer.color.Color("white")); + a.setPadding(4); + + d.add(a); + }; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ButtonView_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ButtonView_1.html new file mode 100644 index 0000000000..f491ac2cba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ButtonView_1.html @@ -0,0 +1,89 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.pageview.buttonview.ButtonView implementation</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var bs = new qx.ui.pageview.buttonview.ButtonView; + + bs.setLocation(20, 48); + bs.setRight(335); + bs.setBottom(48); + + var bsb1 = new qx.ui.pageview.buttonview.Button("Display", "icon/32/devices/video-display.png"); + var bsb2 = new qx.ui.pageview.buttonview.Button("Bug", "icon/32/apps/graphics-snapshot.png"); + var bsb3 = new qx.ui.pageview.buttonview.Button("Colors", "icon/32/actions/format-color.png"); + var bsb4 = new qx.ui.pageview.buttonview.Button("Icons", "icon/32/apps/preferences-desktop-theme.png"); + var bsb5 = new qx.ui.pageview.buttonview.Button("Paint", "icon/32/apps/graphics-image-viewer.png"); + var bsb6 = new qx.ui.pageview.buttonview.Button("Applications", "icon/32/actions/system-run.png"); + var bsb7 = new qx.ui.pageview.buttonview.Button("System", "icon/32/apps/system-software-update.png"); + + bsb1.setChecked(true); + + bs.getBar().add(bsb1, bsb2, bsb3, bsb4, bsb5, bsb6, bsb7); + + var p1 = new qx.ui.pageview.buttonview.Page(bsb1); + var p2 = new qx.ui.pageview.buttonview.Page(bsb2); + var p3 = new qx.ui.pageview.buttonview.Page(bsb3); + var p4 = new qx.ui.pageview.buttonview.Page(bsb4); + var p5 = new qx.ui.pageview.buttonview.Page(bsb5); + var p6 = new qx.ui.pageview.buttonview.Page(bsb6); + var p7 = new qx.ui.pageview.buttonview.Page(bsb7); + + bs.getPane().add(p1, p2, p3, p4, p5, p6, p7); + + var f1 = new qx.ui.form.TextField("Display Input"); + var f2 = new qx.ui.form.TextField("Penguin Input"); + var f3 = new qx.ui.form.TextField("Colorize Input"); + var f4 = new qx.ui.form.TextField("Icons Input"); + var f5 = new qx.ui.form.TextField("Paint Input"); + var f6 = new qx.ui.form.TextField("Applications Input"); + var f7 = new qx.ui.form.TextField("System Input"); + + p1.add(f1); + p2.add(f2); + p3.add(f3); + p4.add(f4); + p5.add(f5); + p6.add(f6); + p7.add(f7); + + var r1 = new qx.ui.form.RadioButton("Top", "top", null, true); + var r2 = new qx.ui.form.RadioButton("Right", "right"); + var r3 = new qx.ui.form.RadioButton("Bottom", "bottom"); + var r4 = new qx.ui.form.RadioButton("Left", "left"); + + r1.setTop(50); + r2.setTop(70); + r3.setTop(90); + r4.setTop(110); + + p1.add(r1, r2, r3, r4); + + var rm = new qx.manager.selection.RadioManager(null, [r1, r2, r3, r4]); + + rm.addEventListener("changeSelected", function(e) { + bs.setBarPosition(e.getData().getValue()); + }); + + d.add(bs); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ButtonView_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ButtonView_2.html new file mode 100644 index 0000000000..86d6c14d3e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ButtonView_2.html @@ -0,0 +1,98 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Yet Another qx.ui.pageview.buttonview.ButtonView Example</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var bs = new qx.ui.pageview.buttonview.ButtonView; + bs.set({ left: 20, top: 48, right: 335, bottom: 48 }); + bs.setBarPosition("left"); + + var bsb1 = new qx.ui.pageview.buttonview.Button("Display", "icon/16/devices/video-display.png"); + var bsb2 = new qx.ui.pageview.buttonview.Button("Organizer", "icon/16/apps/office-organizer.png"); + var bsb3 = new qx.ui.pageview.buttonview.Button("Colorize", "icon/16/actions/format-color.png"); + var bsb4 = new qx.ui.pageview.buttonview.Button("Icons", "icon/16/apps/preferences-desktop-theme.png"); + var bsb5 = new qx.ui.pageview.buttonview.Button("Paint", "icon/16/apps/graphics-image-viewer.png"); + var bsb6 = new qx.ui.pageview.buttonview.Button("Applications", "icon/16/actions/system-run.png"); + var bsb7 = new qx.ui.pageview.buttonview.Button("System", "icon/16/apps/system-software-update.png"); + + bsb1.setChecked(true); + + bsb1.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb2.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb3.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb4.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb5.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb6.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb7.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + + bs.getBar().add(bsb1, bsb2, bsb3, bsb4, bsb5, bsb6, bsb7); + + bs.getBar().setHorizontalChildrenAlign("center"); + bs.getBar().setVerticalChildrenAlign("bottom"); + + var p1 = new qx.ui.pageview.buttonview.Page(bsb1); + var p2 = new qx.ui.pageview.buttonview.Page(bsb2); + var p3 = new qx.ui.pageview.buttonview.Page(bsb3); + var p4 = new qx.ui.pageview.buttonview.Page(bsb4); + var p5 = new qx.ui.pageview.buttonview.Page(bsb5); + var p6 = new qx.ui.pageview.buttonview.Page(bsb6); + var p7 = new qx.ui.pageview.buttonview.Page(bsb7); + + bs.getPane().add(p1, p2, p3, p4, p5, p6, p7); + + var f1 = new qx.ui.form.TextField("Display Input"); + var f2 = new qx.ui.form.TextField("Sunshine Input"); + var f3 = new qx.ui.form.TextField("Paint Input"); + var f4 = new qx.ui.form.TextField("Icons Input"); + var f5 = new qx.ui.form.TextField("Images Input"); + var f6 = new qx.ui.form.TextField("Applications Input"); + var f7 = new qx.ui.form.TextField("System Input"); + + p1.add(f1); + p2.add(f2); + p3.add(f3); + p4.add(f4); + p5.add(f5); + p6.add(f6); + p7.add(f7); + + var r1 = new qx.ui.form.RadioButton("Top", "top"); + var r2 = new qx.ui.form.RadioButton("Right", "right"); + var r3 = new qx.ui.form.RadioButton("Bottom", "bottom"); + var r4 = new qx.ui.form.RadioButton("Left", "left", null, true); + + r1.setTop(50); + r2.setTop(70); + r3.setTop(90); + r4.setTop(110); + + p1.add(r1, r2, r3, r4); + + var rm = new qx.manager.selection.RadioManager(null, [r1, r2, r3, r4]); + + rm.addEventListener("changeSelected", function(e) { + bs.setBarPosition(e.getData().getValue()); + }); + + d.add(bs); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Button_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Button_1.html new file mode 100644 index 0000000000..35f6c8f336 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Button_1.html @@ -0,0 +1,73 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test the qx.ui.form.Button constructor. qx.ui.form.Button is based on qx.ui.basic.Atom.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function buttonExecute() { this.debug("Executed: " + this.getLabel()); }; + + var btn1 = new qx.ui.form.Button("Button No #1"); + with(btn1) + { + setTop(48); + setLeft(20); + addEventListener("execute", buttonExecute); + }; + + d.add(btn1); + + + + var btn2 = new qx.ui.form.Button("Button No #2"); + with(btn2) + { + setTop(48); + setLeft(120); + addEventListener("execute", buttonExecute); + setEnabled(false); + }; + + d.add(btn2); + + + + var btn3 = new qx.ui.form.Button("Button No #3"); + with(btn3) + { + setTop(48); + setLeft(220); + addEventListener("execute", buttonExecute); + }; + + d.add(btn3); + + + var btn4 = new qx.ui.form.Button("Button No #4", "icon/16/actions/go-next.png"); + with(btn4) + { + setTop(48); + setLeft(320); + addEventListener("execute", buttonExecute); + }; + + d.add(btn4); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/CheckBox_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/CheckBox_1.html new file mode 100644 index 0000000000..f9b205bc3a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/CheckBox_1.html @@ -0,0 +1,104 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for qx.ui.form.CheckBox. qx.ui.form.CheckBox extends qx.ui.basic.Atom and so it inherits all the options and properties defined there.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.form.CheckBox("Send Data to Server", "c1checked", "c1"); + with(c1) + { + setTop(48); + setLeft(20); + }; + d.add(c1); + + var c2 = new qx.ui.form.CheckBox("Delete all Data on Server", "c2checked", "c2"); + with(c2) + { + setTop(78); + setLeft(20); + }; + d.add(c2); + c2.setChecked(true); + + + var c3 = new qx.ui.form.CheckBox("Top Checkbox", "c3checked", "c3"); + with(c3) + { + setTop(120); + setLeft(20); + setIconPosition("top"); + }; + d.add(c3); + + var c4 = new qx.ui.form.CheckBox("Bottom Checkbox", "c4checked", "c4"); + with(c4) + { + setTop(120); + setLeft(140); + setIconPosition("bottom"); + }; + d.add(c4); + + + var c5 = new qx.ui.form.CheckBox("Left Checkbox", "c5checked", "c5"); + with(c5) + { + setTop(180); + setLeft(20); + setIconPosition("left"); + }; + d.add(c5); + + var c6 = new qx.ui.form.CheckBox("Right Checkbox", "c6checked", "c6"); + with(c6) + { + setTop(180); + setLeft(140); + setIconPosition("right"); + }; + d.add(c6); + + var c7 = new qx.ui.form.CheckBox(null, "c7checked", "c7"); + with(c7) + { + setTop(250); + setLeft(20); + }; + d.add(c7); + + var c8 = new qx.ui.form.CheckBox(null, "c7checked", "c7"); + with(c8) + { + setTop(300); + setLeft(20); + setLabel("Label pure"); + setShow("label"); + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setBackgroundColor(new qx.renderer.color.Color("red")); + }; + d.add(c8); + + c8.addEventListener("changeChecked", function(e) { + this.setBackgroundColor(new qx.renderer.color.Color(this.getChecked() ? "green" : "red")); + }); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorPopup_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorPopup_1.html new file mode 100644 index 0000000000..94aa182cf9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorPopup_1.html @@ -0,0 +1,83 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.component.ColorPopup.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var mybtn = new qx.ui.form.Button("Open Popup"); + mybtn.setLocation(20, 48); + mybtn.addEventListener("execute", function() { + mypop.setTop(qx.html.Location.getPageBoxBottom(this.getElement())); + mypop.setLeft(qx.html.Location.getPageBoxLeft(this.getElement())); + mypop.show(); + }); + + var myview = new qx.ui.basic.Label("Selected Color"); + myview.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + myview.setLocation(100, 48); + myview.setPadding(3, 6); + myview.setBackgroundImage("core/dotted_white.gif"); + myview.addToDocument(); + + var mytables = + { + core : { + label : "Basic Colors", + values : [ "#000", "#333", "#666", "#999", "#CCC", "#FFF", "red", "green", "blue", "yellow", "teal", "maroon" ] + }, + + template : { + label : "Template Colors", + values : [ "#B07B30", "#B07BC9", "#E3AEC9", "#7A2A53" ] + }, + + recent : { + label : "Recent Colors", + + // In this case we need named colors or rgb-value-strings, hex is not allowed currently + values : [ "rgb(122,195,134)", "orange" ] + } + } + + var mypop = new qx.ui.component.ColorPopup(mytables); + mypop.setLocation(100, 100); + mypop.setValue(new qx.renderer.color.Color("#23F3C1")); + + mybtn.addToDocument(); + mypop.addToDocument(); + + mypop.addEventListener("changeValue", function(e) { + this.debug("Value Listener: " + e.getData()); + myview.setBackgroundColor(e.getData()); + myview.setBackgroundImage(e.getData() ? null : "core/dotted_white.gif"); + }); + + mypop.addEventListener("changeRed", function(e) { + this.debug("Red Listener: " + e.getData()); + }); + + mypop.addEventListener("changeGreen", function(e) { + this.debug("Green Listener: " + e.getData()); + }); + + mypop.addEventListener("changeBlue", function(e) { + this.debug("Blue Listener: " + e.getData()); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorSelector_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorSelector_1.html new file mode 100644 index 0000000000..2a4a39a728 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorSelector_1.html @@ -0,0 +1,29 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.component.ColorSelector.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var mycolor = new qx.ui.component.ColorSelector; + + mycolor.setLocation(50, 50); + + qx.ui.core.ClientDocument.getInstance().add(mycolor); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorSelector_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorSelector_2.html new file mode 100644 index 0000000000..e43a1e9434 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ColorSelector_2.html @@ -0,0 +1,30 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.component.ColorSelector.</p> + <p>Adding a default/previous/old color value to compare it with the new selection.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var mycolor = new qx.ui.component.ColorSelector(130, 180, 100); + + mycolor.setLocation(50, 50); + + qx.ui.core.ClientDocument.getInstance().add(mycolor); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ComboBoxEx_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ComboBoxEx_1.html new file mode 100644 index 0000000000..956fd1c391 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ComboBoxEx_1.html @@ -0,0 +1,230 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + <script type="text/javascript"> + +function getTestData() { + var testData = [ + [ '1', 'One' ], + [ '2', 'Two' ], + [ '3', 'Three' ], + [ '4', 'Four' ], + [ '5', 'Five' ], + [ '6', 'Six' ], + [ '7', 'Seven' ], + [ '8', 'Eight' ], + [ '9', 'Nine' ], + [ '10', 'Ten' ], + [ '11', 'Eleven' ], + [ '12', 'Twelve' ], + [ '13', 'Thirteen' ], + [ '14', 'Fourteen' ], + [ '15', 'Fiveteen' ], + [ '16', 'Sixteen' ], + [ '17', 'Seventeen' ], + // Test of a long string + [ '1921', 'One thousand nine hundred twenty one' ] + ]; + for (var i = 0; i < testData.length; i++) { + testData[i].push('widget/arrows/'+(i % 2 ? 'up':'down')+'_small.gif'); + testData[i].push('Extra data '+i); + } + return testData; +} + +qx.OO.defineClass('Box', qx.ui.layout.BoxLayout, function() { + qx.ui.layout.BoxLayout.apply(this, arguments); + this.auto(); +}); + +qx.OO.defineClass('GroupBox', qx.ui.groupbox.GroupBox, function() { + qx.ui.groupbox.GroupBox.apply(this, arguments); + this.auto(); +}); + +qx.core.Init.getInstance().defineMain(function() { + // Shortcuts + var form = qx.ui.form; + Label = qx.ui.basic.Label; + var testData = getTestData(); + + //###1st row: combo + + combo = new form.ComboBoxEx; + var butSize = new form.Button('Size text field to content'); + butSize.addEventListener('execute', function() { + combo.sizeTextFieldToContent(); + }); + + var boxCombo2 = new Box; + with (boxCombo2) { + setSpacing(10); + add(combo, butSize); + } + var boxCombo = new GroupBox('This is the ComboBoxEx under test'); + boxCombo.add(boxCombo2); + + //###2nd row: Test of simple properties + var cEd = new form.CheckBox('Editable'); + cEd.setChecked(combo.getEditable()); + cEd.addEventListener('changeChecked', function() { + combo.setEditable(cEd.isChecked()); + }); + + var cEnsure = new form.CheckBox('Ensure something selected'); + cEnsure.setChecked(combo.getEnsureSomethingSelected()); + cEnsure.addEventListener('changeChecked', function() { + combo.setEnsureSomethingSelected(cEnsure.isChecked()); + }); + + var cAllowSearch = new form.CheckBox('Allow searching'); + cAllowSearch.setChecked(combo.getAllowSearch()); + cAllowSearch.addEventListener('changeChecked', function() { + combo.setAllowSearch(cAllowSearch.isChecked()); + }); + + var cIdCol = new form.CheckBox('ID column visible'); + cIdCol.setChecked(combo.isIdColumnVisible()); + cIdCol.addEventListener('changeChecked', function() { + combo.setIdColumnVisible(cIdCol.isChecked()); + }); + + var fieldItems = new form.Spinner(0, 0, testData.length); + fieldItems._manager.addEventListener('changeValue', function() { + var sel = [], count = fieldItems.getValue(); + for (var i = 0; i < count; i++) { + sel.push(testData[i]); + } + combo.setSelection(sel); + }); + fieldItems.setValue(15); + + var boxProp2 = new Box; + with (boxProp2) { + setSpacing(10); + add(cEd, cEnsure, cAllowSearch, cIdCol, new Label('Number of items in list'), fieldItems); + } + var boxProp = new GroupBox('Test of simple properties'); + boxProp.add(boxProp2); + + //###Test of headers + var allHeaders = [ 'ID', 'Description', 'Img', 'Extra info' ]; + var rb1 = new form.RadioButton('1', '1'); + var rb2 = new form.RadioButton('2', '2'); + rb2.setChecked(true); + var rb3 = new form.RadioButton('3', '3'); + var rb4 = new form.RadioButton('4', '4'); + + var fieldHeaders = new qx.manager.selection.RadioManager('headers', [ rb1, rb2, rb3, rb4 ]); + fieldHeaders.addEventListener("changeSelected", function(e) { + var headers = [], count = Number(e.getData().getValue()); + for (var i = 0; i < count; i++) { + headers.push(allHeaders[i]); + } + combo.setColumnHeaders(headers); + }); + + var butChangeHeaders = new form.Button('Add * to headers'); + // This tests changing the headers, but not the number of columns + butChangeHeaders.addEventListener('execute', function() { + var headers = combo.getColumnHeaders(); + for (var i = 0; i < headers.length; i++) { + headers[i] += '*'; + } + combo.setColumnHeaders(headers); + }); + + var boxHeaders2 = new Box; + with (boxHeaders2) { + setSpacing(10); + add(new Label('# of headers'), rb1, rb2, rb3, rb4, butChangeHeaders); + } + var boxHeaders = new GroupBox('Test headers'); + boxHeaders.add(boxHeaders2); + + var fieldMaxRows = new form.Spinner(2, combo.getMaxVisibleRows(), 20); + fieldMaxRows._manager.addEventListener('changeValue', function() { + combo.setMaxVisibleRows(fieldMaxRows.getValue()); + }); + var boxMaxRows = new GroupBox('Max. number of visible rows'); + boxMaxRows.add(fieldMaxRows); + + var boxRow3 = new Box; + boxRow3.add(boxHeaders, boxMaxRows); + + //###Test of showOnTextField + var rbDesc = new form.RadioButton('Description', 'description'); + rbDesc.setChecked(true); + var rbIdAndDesc = new form.RadioButton('ID and description', 'idAndDescription'); + var fieldShowOn = new qx.manager.selection.RadioManager("showOnTextField", [ rbDesc, rbIdAndDesc ]); + fieldShowOn.addEventListener("changeSelected", function(e) { + combo.setShowOnTextField(e.getData().getValue()); + }); + + var fieldSeparator = new form.TextField; + fieldSeparator.setValue(combo.getIdDescriptionSeparator()); + fieldSeparator.setWidth(50); + fieldSeparator.addEventListener('changeValue', function() { + combo.setIdDescriptionSeparator(fieldSeparator.getValue()); + }); + var boxShowOn2 = new Box; + with (boxShowOn2) { + setSpacing(10); + add(new Label('Show on text field:'), rbDesc, rbIdAndDesc, new Label('Separator between ID and description:'), fieldSeparator); + } + var boxShowOn = new GroupBox('Test showOnTextField property'); + boxShowOn.add(boxShowOn2); + + //###Test of get/setValue + var fieldValue = new form.TextField; + var butSetValue = new form.Button('Set'); + butSetValue.addEventListener('execute', function() { + combo.setValue(fieldValue.getValue()); + }); + var butGetValue = new form.Button('Get'); + butGetValue.addEventListener('execute', function() { + fieldValue.setValue(combo.getValue()); + }); + var boxVal2 = new Box; + with (boxVal2) { + setSpacing(10); + add(fieldValue, butSetValue, butGetValue); + } + var boxVal = new GroupBox('Test value property'); + boxVal.add(boxVal2); + + //###Main box + var vbox = new Box('vertical'); + with (vbox) { + setSpacing(10); + setTop(50); + setLeft(30); + add(boxCombo, boxProp, boxRow3, boxShowOn, boxVal); + addToDocument(); + } + combo.focus(); +}); + </script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + <script type="text/javascript"> +if (console.debug) { + with (qx.log.Logger.ROOT_LOGGER) { + removeAllAppenders(); + addAppender(new qx.log.FireBugAppender); + setMinLevel(qx.log.Logger.LEVEL_WARN); + } +} + </script> + <div id="demoDescription"> + <p>ComboBoxEx is an enhanced version of ComboBox</p> + </div> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ComboBox_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ComboBox_1.html new file mode 100644 index 0000000000..bf3f297be9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ComboBox_1.html @@ -0,0 +1,101 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing ComboBox implementation.</p> + <p>The elements of the popup will be created on the first open of the qx.ui.form.ComboBox.</p> + </div> + + <select style="position:absolute; left:300px; top:48px; width: 120px;"> + <option>Item No 1</option> + <option>Item No 2</option> + <option>Item No 3</option> + <option>Item No 4</option> + <option>Item No 5</option> + <option>Item No 6</option> + <option>Item No 7</option> + <option>Item No 8</option> + <option>Item No 9</option> + <option disabled="true">Item No 10</option> + <option>Item No 11</option> + <option>Item No 12</option> + <option>Item No 13</option> + <option>Item No 14</option> + <option>Item No 15</option> + <option>Item No 16</option> + <option>Item No 17</option> + <option>Item No 18</option> + <option>Item No 19</option> + <option disabled="true">Item No 20</option> + <option>Item No 21</option> + <option>Item No 22</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 25</option> + <option>Item No 26</option> + <option>Item No 27</option> + <option>Item No 28</option> + <option>Item No 29</option> + <option disabled="true">Item No 30</option> + </select> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.form.ComboBox; + c1.set({ top: 48, left: 20 }); + + + + var item; + + for(var i=1; i<=30; i++) + { + item = new qx.ui.form.ListItem("Item No " + i); + !(i % 10) && (item.setEnabled(false)); + c1.add(item); + }; + + + c1.setSelected(c1.getList().getFirstChild()); + + c1.addEventListener("changeValue", function(e) { + this.debug("New value: " + e.getData()); + }); + + c1.addEventListener("changeSelected", function(e) { + this.debug("New selected: " + e.getData()); + }); + + + + + var b1 = new qx.ui.form.CheckBox("Editable"); + + b1.set({ top: 50, left: 150 }); + + b1.addEventListener("changeChecked", function(e) { + c1.setEditable(e.getData()); + }); + + + + d.add(c1, b1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Command_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Command_1.html new file mode 100644 index 0000000000..14472f33f7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Command_1.html @@ -0,0 +1,141 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>An example showing global shortcut commands in action. The commands are linked with menu-items, but + could also be executed with the corresponding shortcut.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + /* comamnds */ + var undo_cmd = new qx.client.Command("Ctrl+Z"); + undo_cmd.addEventListener("execute", function(){ this.debug("undo Command executed"); }, this); + + var redo_cmd = new qx.client.Command("Ctrl+Y"); + redo_cmd.addEventListener("execute", function(){ this.debug("redo Command executed"); }, this); + + var cut_cmd = new qx.client.Command("Ctrl+X"); + cut_cmd.addEventListener("execute", function(){ this.debug("cut Command executed"); }, this); + + var copy_cmd = new qx.client.Command("Ctrl+C"); + copy_cmd.addEventListener("execute", function(){ this.debug("copy Command executed"); }, this); + + var paste_cmd = new qx.client.Command("Ctrl+V"); + paste_cmd.addEventListener("execute", function(){ this.debug("paste Command executed"); }, this); + + var delete_cmd = new qx.client.Command("Del"); + delete_cmd.addEventListener("execute", function(){ this.debug("delete Command executed"); }, this); + + var select_all_cmd = new qx.client.Command("Ctrl+A"); + select_all_cmd.addEventListener("execute", function(){ this.debug("select all Command executed"); }, this); + + var search_cmd = new qx.client.Command("Ctrl+F"); + search_cmd.addEventListener("execute", function(){ this.debug("search Command executed"); }, this); + + var search_again_cmd = new qx.client.Command("F3"); + search_again_cmd.addEventListener("execute", function(){ this.debug("search again Command executed"); }, this); + + /* building the menu */ + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("New Window"); + var mb2_02 = new qx.ui.menu.Button("Overlapping"); + var mb2_03 = new qx.ui.menu.Button("Split Vertical"); + var mb2_04 = new qx.ui.menu.Button("Split Horizontal"); + var mb2_05 = new qx.ui.menu.Button("Next Window"); + var mb2_06 = new qx.ui.menu.Button("Previous Window"); + + m2.add(mb2_01, mb2_02, mb2_03, mb2_04, mb2_05, mb2_06); + + + var m3 = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_04, mb3_05); + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("View/Lists"); + var mb1_02 = new qx.ui.menu.Button("Syntax Highlighting"); + var ms1 = new qx.ui.menu.Separator(); + var mb1_03 = new qx.ui.menu.Button("Window Font"); + var mb1_04 = new qx.ui.menu.Button("Printer Font", null, null, m3); + var ms2 = new qx.ui.menu.Separator(); + var mb1_05 = new qx.ui.menu.Button("Undo", null, undo_cmd); + var mb1_06 = new qx.ui.menu.Button("Redo", null, redo_cmd); + var ms3 = new qx.ui.menu.Separator(); + var mb1_07 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", cut_cmd); + var mb1_08 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", copy_cmd); + var mb1_09 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", paste_cmd); + var mb1_10 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", delete_cmd); + var mb1_11 = new qx.ui.menu.Button("Select All", null, select_all_cmd); + var ms4 = new qx.ui.menu.Separator(); + var mb1_12 = new qx.ui.menu.Button("Search", null, search_cmd); + var mb1_13 = new qx.ui.menu.Button("Search Again", null, search_again_cmd); + var ms5 = new qx.ui.menu.Separator(); + var mb1_14 = new qx.ui.menu.Button("View", null, null, m2); + var mb1_15 = new qx.ui.menu.Button("Editor Settings..."); + var mb1_16 = new qx.ui.menu.Button("Editor Plugins"); + var mb1_17 = new qx.ui.menu.Button("Framework Settings"); + + m1.add(mb1_01, mb1_02, ms1, mb1_03, mb1_04, ms2, mb1_05, mb1_06, ms3, mb1_07, mb1_08, mb1_09, mb1_10, mb1_11, ms4, mb1_12, mb1_13, ms5, mb1_14, mb1_15, mb1_16, mb1_17); + + + d.add(m1, m2, m3); + + + var w1 = new qx.ui.form.Button("Open"); + + w1.setTop(48); + w1.setLeft(20); + + w1.addEventListener("click", function(e) + { + if (m1.isSeeable()) + { + m1.hide(); + } + else + { + var el = this.getElement(); + + m1.setLeft(qx.html.Location.getPageBoxLeft(el)); + m1.setTop(qx.html.Location.getPageBoxBottom(el)); + + m1.show(); + }; + + e.setPropagationStopped(true); + }); + + w1.addEventListener("mousedown", function(e) + { + e.setPropagationStopped(true); + }); + + + d.add(w1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Command_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Command_2.html new file mode 100644 index 0000000000..2fdeb1cb3c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Command_2.html @@ -0,0 +1,186 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>An example showing global shortcut commands in action. The commands are linked with menu-items, but + could also be executed with the corresponding shortcut.</p> + <p>An objectmanager is used to disable/enable a specific command (del-Key) to make available for text-editing + in the textfield of the window. When the window is closed the command gets re-enabled.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + /* comamnds */ + var undo_cmd = new qx.client.Command("Ctrl+Z"); + undo_cmd.addEventListener("execute", function(){ this.debug("undo Command executed"); }, this); + + var redo_cmd = new qx.client.Command("Ctrl+Y"); + redo_cmd.addEventListener("execute", function(){ this.debug("redo Command executed"); }, this); + + var cut_cmd = new qx.client.Command("Ctrl+X"); + cut_cmd.addEventListener("execute", function(){ this.debug("cut Command executed"); }, this); + + var copy_cmd = new qx.client.Command("Ctrl+C"); + copy_cmd.addEventListener("execute", function(){ this.debug("copy Command executed"); }, this); + + var paste_cmd = new qx.client.Command("Ctrl+V"); + paste_cmd.addEventListener("execute", function(){ this.debug("paste Command executed"); }, this); + + var delete_cmd = new qx.client.Command("Del"); + delete_cmd.addEventListener("execute", function(){ this.debug("delete Command executed"); }, this); + + var select_all_cmd = new qx.client.Command("Ctrl+A"); + select_all_cmd.addEventListener("execute", function(){ this.debug("select all Command executed"); }, this); + + var search_cmd = new qx.client.Command("Ctrl+F"); + search_cmd.addEventListener("execute", function(){ this.debug("search Command executed"); }, this); + + var search_again_cmd = new qx.client.Command("F3"); + search_again_cmd.addEventListener("execute", function(){ this.debug("search again Command executed"); }, this); + + + /* objectmanager for all commands which should be disabled when opening the window */ + var cmd_manager = new qx.manager.object.ObjectManager; + cmd_manager.add(delete_cmd); + + + /* building the menu */ + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("New Window"); + var mb2_02 = new qx.ui.menu.Button("Overlapping"); + var mb2_03 = new qx.ui.menu.Button("Split Vertical"); + var mb2_04 = new qx.ui.menu.Button("Split Horizontal"); + var mb2_05 = new qx.ui.menu.Button("Next Window"); + var mb2_06 = new qx.ui.menu.Button("Previous Window"); + + m2.add(mb2_01, mb2_02, mb2_03, mb2_04, mb2_05, mb2_06); + + + var m3 = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_04, mb3_05); + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("View/Lists"); + var mb1_02 = new qx.ui.menu.Button("Syntax Highlighting"); + var ms1 = new qx.ui.menu.Separator(); + var mb1_03 = new qx.ui.menu.Button("Window Font"); + var mb1_04 = new qx.ui.menu.Button("Printer Font", null, null, m3); + var ms2 = new qx.ui.menu.Separator(); + var mb1_05 = new qx.ui.menu.Button("Undo", null, undo_cmd); + var mb1_06 = new qx.ui.menu.Button("Redo", null, redo_cmd); + var ms3 = new qx.ui.menu.Separator(); + var mb1_07 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", cut_cmd); + var mb1_08 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", copy_cmd); + var mb1_09 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", paste_cmd); + var mb1_10 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", delete_cmd); + var mb1_11 = new qx.ui.menu.Button("Select All", null, select_all_cmd); + var ms4 = new qx.ui.menu.Separator(); + var mb1_12 = new qx.ui.menu.Button("Search", null, search_cmd); + var mb1_13 = new qx.ui.menu.Button("Search Again", null, search_again_cmd); + var ms5 = new qx.ui.menu.Separator(); + var mb1_14 = new qx.ui.menu.Button("View", null, null, m2); + var mb1_15 = new qx.ui.menu.Button("Editor Settings..."); + var mb1_16 = new qx.ui.menu.Button("Editor Plugins"); + var mb1_17 = new qx.ui.menu.Button("Framework Settings"); + + m1.add(mb1_01, mb1_02, ms1, mb1_03, mb1_04, ms2, mb1_05, mb1_06, ms3, mb1_07, mb1_08, mb1_09, mb1_10, mb1_11, ms4, mb1_12, mb1_13, ms5, mb1_14, mb1_15, mb1_16, mb1_17); + + + d.add(m1, m2, m3); + + + /* button to open menu */ + var w1 = new qx.ui.form.Button("Open"); + + w1.setTop(48); + w1.setLeft(20); + + w1.addEventListener("click", function(e) + { + if (m1.isSeeable()) + { + m1.hide(); + } + else + { + var el = this.getElement(); + + m1.setLeft(qx.html.Location.getPageBoxLeft(el)); + m1.setTop(qx.html.Location.getPageBoxBottom(el)); + + m1.show(); + }; + + e.setPropagationStopped(true); + }); + + w1.addEventListener("mousedown", function(e) + { + e.setPropagationStopped(true); + }); + + + /* window */ + var window1 = new qx.ui.window.Window("Test"); + window1.set({ top: 100, left: 100, width: 300, height: 200, allowMaximize: false, allowMinimize: false }); + + window1.addEventListener("beforeAppear", function(e){ + textField.setValue(""); + }); + + window1.addEventListener("beforeDisappear", function(e){ + cmd_manager.enableAll(); + }); + + /* label */ + var label1 = new qx.ui.basic.Label("Please enter your Name"); + label1.setTop(20); + label1.setLeft(8); + + /* textfield */ + var textField = new qx.ui.form.TextField; + textField.setTop(20); + textField.setLeft(140); + + window1.add(label1, textField); + + + /* button to open window */ + var w2 = new qx.ui.form.Button("Open Window"); + w2.setTop(48); + w2.setLeft(100); + + w2.addEventListener("execute", function(e){ + cmd_manager.disableAll(); + window1.open(); + }); + + + d.add(w1, window1, w2); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/DateChooser_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/DateChooser_1.html new file mode 100644 index 0000000000..ffa537ecfa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/DateChooser_1.html @@ -0,0 +1,31 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>The DateChooser shows calendar and allows choosing a date.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var chooser = new qx.ui.component.DateChooser; + chooser.setLocation(10, 50); + chooser.setWidth("auto"); + chooser.setHeight("auto"); + d.add(chooser); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Drag_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Drag_1.html new file mode 100644 index 0000000000..415bfb7c35 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Drag_1.html @@ -0,0 +1,57 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Show one way to drag a widget around the screen.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var a1 = new qx.ui.basic.Atom("Drag Me"); + a1.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove }); + a1.setPadding(10); + a1.setLocation(20, 48); + d.add(a1); + + + a1.addEventListener("mousedown", handleMouseDown); + a1.addEventListener("mousemove", handleMouseMove); + a1.addEventListener("mouseup", handleMouseUp); + + function handleMouseDown(e) + { + this.setCapture(true); + a1._offsetX = e.getPageX() - a1.getLeft(); + a1._offsetY = e.getPageY() - a1.getTop(); + } + + function handleMouseMove(e) + { + if (this.getCapture()) + { + a1.setLeft(e.getPageX() - a1._offsetX); + a1.setTop(e.getPageY() - a1._offsetY); + } + } + + function handleMouseUp(e) + { + this.setCapture(false); + } + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fields_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fields_1.html new file mode 100644 index 0000000000..fe002cc516 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fields_1.html @@ -0,0 +1,107 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some tests for some of the most used properties of qx.ui.core.Widget (coordinates, dimensions, backgroundColor, opacity, ...).</p> + <p>Also here are the first test of some widgets which extend qx.ui.core.Widget: qx.ui.form.TextField and qx.ui.form.PasswordField. These extended + widgets also interacts like the basic QxWidgets with the qx.event.handler.FocusHandler.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function textChange(e) { + this.debug("Text changed: " + e.getData()); + } + + var t1 = new qx.ui.form.TextField; + t1.setValue("textfield"); + t1.setTop(48); + t1.setLeft(20); + + t1.addEventListener("changeValue", textChange); + t1.addEventListener("input", function(e) { + this.debug("Input: " + e.getData()); + }); + + d.add(t1); + + + + + var t2 = new qx.ui.form.PasswordField; + t2.setValue("passwordfield"); + t2.setTop(80); + t2.setLeft(20); + + t2.addEventListener("changeValue", textChange); + + d.add(t2); + + + var t3 = new qx.ui.form.TextArea; + t3.setValue("textarea"); + t3.setTop(110); + t3.setLeft(20); + t3.setWidth(300); + t3.setHeight(60); + + t3.addEventListener("changeValue", textChange); + + d.add(t3); + + + var t4 = new qx.ui.form.TextField; + t4.setValue("textfield"); + t4.setTop(200); + t4.setLeft(20); + t4.setWidth(200); + t4.setMaxLength(100); + t4.setReadOnly(true); + + t4.addEventListener("changeValue", textChange); + + d.add(t4); + + + var t5 = new qx.ui.form.TextField; + t5.setValue("You are foo!"); + t5.setTop(240); + t5.setLeft(20); + + t5.addEventListener("changeValue", textChange); + + d.add(t5); + + + + var t6 = new qx.ui.form.TextField; + t6.setTop(270); + t6.setLeft(20); + + t6.addEventListener("changeText", textChange); + t6.addEventListener("input", function(e) { + this.debug("Input: " + e.getData()); + }); + + t6.addEventListener("keydown", function(e) { + this.debug("Keypress: " + e.getKeyIdentifier()); + }); + + d.add(t6); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Flash_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Flash_1.html new file mode 100644 index 0000000000..12cb67fcab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Flash_1.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Simple test for qx.ui.embed.Flash.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // Try no version required + var fo1 = new qx.ui.embed.Flash("./image/flash/fo_tester.swf"); + + // Try version 7 required + // var fo1 = new qx.ui.embed.Flash("image/flash/fo_tester.swf", "7"); + + // Try version 9 required + // var fo1 = new qx.ui.embed.Flash("image/flash/fo_tester.swf", "9"); + + // Error handling methods: + // #1: Enable Express Install: Available in Flash Players >= 6.0.65 + // fo1.setEnableExpressInstall(true); + // #2: Enable Redirect URL: Jump to an installer page + // fo1.setRedirectUrl("http://www.google.de"); + + fo1.setVariable("flashVarText", "this is passed in via FlashVars"); + fo1.setScale("noscale"); + + fo1.setLeft(20); + fo1.setRight(335); + fo1.setTop(48); + fo1.setBottom(48); + + fo1.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + fo1.setBackgroundColor("#FF6600"); + + d.add(fo1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1.html new file mode 100644 index 0000000000..40de61ea86 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1.html @@ -0,0 +1,26 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p> + Simple test of a finite state machine. This is a sufficiently simple + application that using a finite state machine really doesn't make sense, + but it is illustrative of how to use it. This FSM has two states. + </p> + </div> + + <script type="text/javascript" src="Fsm_1/main.js"></script> + <script type="text/javascript" src="Fsm_1/fsm.js"></script> + <script type="text/javascript" src="Fsm_1/gui.js"></script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/fsm.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/fsm.js new file mode 100644 index 0000000000..50cdc25ccb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/fsm.js @@ -0,0 +1,297 @@ +/* + * Initialize the finite state machine. + * + * This finite state machine has two states: Idle and AwaitRpcResult. + * + * In the Idle state, the Send button is enabled, the Abort button is + * disabled, and the three color bars are blue. In the AwaitRpcResult state, + * the Send button is disabled, the Abort button is enabled, and three color + * bars are red. All of these changes occur via automatic, table-driven + * function calls in autoActionsXXX() objects, not via explicit code. This + * demonstrates how groups of objects can all be manipulated together without + * having to write lots of code to do so. Just as these color blocks change + * color, numerous widgets could be disabled/hidden/etc., without writing code + * to futz with all of them. + */ +function initFsm() +{ + // Create a new finite state machine + var fsm = new qx.util.fsm.FiniteStateMachine("Fsm_1"); + + // For this simple example application, show all debug messages. + qx.Settings.setCustomOfClass( + "qx.util.fsm.FiniteStateMachine", + "debugFlags", + (qx.util.fsm.FiniteStateMachine.DebugFlags.EVENTS | + qx.util.fsm.FiniteStateMachine.DebugFlags.TRANSITIONS | + qx.util.fsm.FiniteStateMachine.DebugFlags.FUNCTION_DETAIL | + qx.util.fsm.FiniteStateMachine.DebugFlags.OBJECT_NOT_FOUND)); + + /* + * State: Idle + * + * Actions upon entry: + * button_send.setEnabled(true); + * button_abort.setEnabled(false); + * change background of objects in group "group_color_change" to blue + * + * Transition on: + * "execute" on button_send + */ + var state = new qx.util.fsm.State( + "State_Idle", + { + "autoActionsBeforeOnentry" : + { + // The name of a function. + "setEnabled" : + [ + { + // We want to enable the 'send' button + "parameters" : [ true ], + + // Call this.getObject("button_send").setEnabled(true) + "objects" : [ "button_send" ] + }, + + { + // We want to disable the 'abort' button + "parameters" : [ false ], + + // Call this.getObject("button_abort").setEnabled(false) + "objects" : [ "button_abort" ] + } + ], + + // The name of a function. + "setBackgroundColor" : + [ + { + // We want to change the atoms' background color to blue + "parameters" : + [ + // We want the color oject created when needed, not "now" + // Providing a function as a parameter allows the value to be + // determined later. + function (fsm) { return new qx.renderer.color.Color("blue"); } + ], + + // Call this.getObject(<object>).seBackgroundcolor("blue") on + // state entry, for each <object> in the group called + // "group_color_change". + "groups" : [ "group_color_change" ] + } + ] + }, + + "events" : + { + // If the send button is pressed, go to new state state where we + // will await the RPC result + "execute" : + { + "button_send" : + "Transition_Idle_to_AwaitRpcResult_via_button_send" + } + } + }); + fsm.addState(state); + + /* + * Transition: Idle to AwaitRpcResult + * + * Cause: "execute" on button_send + * + * Action: + * Issue RPC request with coalesced failure events + */ + var trans = new qx.util.fsm.Transition( + "Transition_Idle_to_AwaitRpcResult_via_button_send", + { + "nextState" : + "State_AwaitRpcResult", + + "ontransition" : + function(fsm, event) + { + var rpc = fsm.getObject("rpc"); + + rpc.setUrl(fsm.getObject("text_url").getValue()); + rpc.setServiceName(fsm.getObject("text_service").getValue()); + + var request = + rpc.callAsyncListeners(true, // coalesce failure events + fsm.getObject("text_method").getValue(), + fsm.getObject("text_message").getValue()); + fsm.addObject("request", request); + } + }); + state.addTransition(trans); + + + /* + * State: AwaitRpcResult + * + * Actions upon entry: + * button_send.setEnabled(false); + * button_abort.setEnabled(true); + * change background of objects in group "group_color_change" to red + * + * Transition on: + * "completed" (on RPC) + * "failed" (on RPC) + * "execute on button_abort + */ + var state = new qx.util.fsm.State( + "State_AwaitRpcResult", + { + "autoActionsBeforeOnentry" : + { + // The name of a function. + "setEnabled" : + [ + { + // We want to disable the 'send' button + "parameters" : [ false ], + + // Call this.getObject("send").setEnabled(false) + "objects" : [ "button_send" ] + }, + + { + // We want to enable the 'abort' button + "parameters" : [ true ], + + // Call this.getObject("abort").setEnabled(true) + "objects" : [ "button_abort" ] + } + ], + + // The name of a function. + "setBackgroundColor" : + [ + { + // We want to change the atoms' background color to red + "parameters" : + [ + // We want the color oject created when needed, not "now" + // Providing a function as a parameter allows the value to be + // determined later. + function (fsm) { return new qx.renderer.color.Color("red"); } + ], + + // Call this.getObject(<object>).seBackgroundcolor("red"), for + // each <object> in the group called "group_color_change". + "groups" : [ "group_color_change" ] + } + ] + }, + + "events" : + { + "execute" : + { + "button_abort" : + "Transition_AwaitRpcResult_to_AwaitRpcResult_via_button_abort" + }, + + "completed" : + "Transition_AwaitRpcResult_to_Idle_via_complete", + + "failed" : + "Transition_AwaitRpcResult_to_Idle_via_failed" + }, + + "onentry" : + function(fsm, state) + { + var message = fsm.getObject("text_result"); + message.setValue(""); + } + + }); + fsm.addState(state); + + /* + * Transition: AwaitRpcResult to AwaitRpcResult + * + * Cause: "execute" on button_abort + */ + var trans = new qx.util.fsm.Transition( + "Transition_AwaitRpcResult_to_AwaitRpcResult_via_button_abort", + { + "nextState" : + "State_AwaitRpcResult", + + "ontransition" : + function(fsm, event) + { + // Get the request object + var request = fsm.getObject("request"); + + // Issue an abort for the pending request + request.abort(); + + var message = fsm.getObject("text_result"); + message.setValue("Abort requested..."); + } + }); + state.addTransition(trans); + + /* + * Transition: AwaitRpcResult to Idle + * + * Cause: "complete" (on RPC) + */ + var trans = new qx.util.fsm.Transition( + "Transition_AwaitRpcResult_to_Idle_via_complete", + { + "nextState" : + "State_Idle", + + "ontransition" : + function(fsm, event) + { + var message = fsm.getObject("text_result"); + message.setValue("Got result: " + event.getData()); + + // The request has completed, so remove the object reference + fsm.removeObject("request"); + } + }); + state.addTransition(trans); + + /* + * Transition: AwaitRpcResult to Idle + * + * Cause: "failed" (on RPC) + */ + var trans = new qx.util.fsm.Transition( + "Transition_AwaitRpcResult_to_Idle_via_failed", + { + "nextState" : + "State_Idle", + + "ontransition" : + function(fsm, event) + { + var message = fsm.getObject("text_result"); + message.setValue("Got failure: " + event.getData()); + + // The request has completed, so remove the object reference + fsm.removeObject("request"); + } + }); + state.addTransition(trans); + + // Allocate an RPC object + o = new qx.io.remote.Rpc(); + o.setTimeout(10000); + o.addEventListener("completed", fsm.eventListener, fsm); + o.addEventListener("failed", fsm.eventListener, fsm); + o.addEventListener("timeout", fsm.eventListener, fsm); + o.addEventListener("aborted", fsm.eventListener, fsm); + fsm.addObject("rpc", o); + + return fsm; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/gui.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/gui.js new file mode 100644 index 0000000000..0ba443a629 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/gui.js @@ -0,0 +1,95 @@ +function initGui(fsm) +{ + var o; + var d = qx.ui.core.ClientDocument.getInstance(); + + var vLayout = new qx.ui.layout.VerticalBoxLayout(); + vLayout.setTop(40); + vLayout.setLeft(20); + vLayout.setSpacing(4); + + vLayout.add(new qx.ui.basic.Label("URL:")); + var defaultURL = qx.io.remote.Rpc.makeServerURL(); + if (defaultURL == null) + { + defaultURL = "/services/"; + } + o = new qx.ui.form.TextField(defaultURL); + vLayout.add(o); + fsm.addObject("text_url", o); + + vLayout.add(new qx.ui.basic.Label("Service:")); + o = new qx.ui.form.TextField("qooxdoo.test"); + vLayout.add(o); + fsm.addObject("text_service", o); + + vLayout.add(new qx.ui.basic.Label("Method:")); + o = new qx.ui.form.TextField("sleep"); + vLayout.add(o); + fsm.addObject("text_method", o); + + var hLayout = new qx.ui.layout.HorizontalBoxLayout(); + hLayout.setHeight("auto"); + hLayout.setVerticalChildrenAlign("middle"); + hLayout.setSpacing(4); + + o = new qx.ui.form.TextField("2"); + o.setWidth(200); + hLayout.add(o); + fsm.addObject("text_message", o); + + o = new qx.ui.form.Button("Send to server"); + o.addEventListener("execute", fsm.eventListener, fsm); + hLayout.add(o); + fsm.addObject("button_send", o); + + o = new qx.ui.form.Button("Abort"); + o.setEnabled(false); + o.addEventListener("execute", fsm.eventListener, fsm); + hLayout.add(o); + fsm.addObject("button_abort", o); + + vLayout.add(hLayout); + + vLayout.add(new qx.ui.basic.Label("Result:")); + o = new qx.ui.form.TextField(""); + o.setWidth(600); + vLayout.add(o); + fsm.addObject("text_result", o); + + var hLayout = new qx.ui.layout.HorizontalBoxLayout(); + hLayout.setHeight("auto"); + hLayout.setVerticalChildrenAlign("middle"); + hLayout.setSpacing(4); + + var o = new qx.ui.basic.Atom("Idle=blue, RPC=red"); + o.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + o.setColor(new qx.renderer.color.Color("white")); + o.setWidth(200); + o.setHeight(30); + o.setPadding(4); + hLayout.add(o); + fsm.addObject("atom_1", o, "group_color_change"); + + var o = new qx.ui.basic.Atom("Idle=blue, RPC=red"); + o.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + o.setColor(new qx.renderer.color.Color("white")); + o.setWidth(200); + o.setHeight(30); + o.setPadding(4); + hLayout.add(o); + fsm.addObject("atom_2", o, "group_color_change"); + + var o = new qx.ui.basic.Atom("Idle=blue, RPC=red"); + o.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + o.setColor(new qx.renderer.color.Color("white")); + o.setWidth(200); + o.setHeight(30); + o.setPadding(4); + hLayout.add(o); + fsm.addObject("atom_3", o, "group_color_change"); + + vLayout.add(hLayout); + + d.add(vLayout); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/main.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/main.js new file mode 100644 index 0000000000..56a53ac484 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Fsm_1/main.js @@ -0,0 +1,11 @@ +qx.core.Init.getInstance().defineMain(function() +{ + // Initialize the finite state machine + fsm = initFsm(); + + // Initialize the GUI + initGui(fsm); + + // Start the finite state machine + fsm.start(); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GalleryList_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GalleryList_1.html new file mode 100644 index 0000000000..1122ffb702 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GalleryList_1.html @@ -0,0 +1,129 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + + <style type="text/css"> +.qx_ui_embed_GalleryList{ + position: absolute; + visibility: visible; +} + +.qx_ui_embed_GalleryList .galleryFrame{ + padding: 2px; +} + +.qx_ui_embed_GalleryList .galleryCell{ + margin: 2px; + padding-bottom: 2px; + border: 1px solid #EEE; + + background: #fff; + overflow: hidden; + white-space: normal; + + font-family: Tahoma, Verdana, sans-serif; + font-size: 12px; + + cursor: default; + + -moz-user-select: none; + user-select: none; + + position: relative; +} + +.qx_ui_embed_GalleryList .galleryCell img{ + vertical-align: bottom; + display: block; +} + +.qx_ui_embed_GalleryList .galleryNumber{ + width: 45px; + padding: 4px; + + position: absolute; + top: 0px; + left: 0px; +} + +.qx_ui_embed_GalleryList .galleryImageContainer{ + position: absolute; + top: 0px; + left: 50px; +} + +.qx_ui_embed_GalleryList .galleryText{ + padding: 4px; + position: absolute; + top: 0px; + left: 130px; +} + +.qx_ui_embed_GalleryList .galleryNumber, +.qx_ui_embed_GalleryList .galleryText h3{ + font-weight: bold; + font-size: 11px; +} + +.qx_ui_embed_GalleryList .galleryText p{ + font-size: 10px; +} + +.qx_ui_embed_GalleryList .galleryCell-Selected{ + background: #9BBCFF; + border-color: #3B7CFF; +} + </style> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>ListSort implementation</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var imgPath = qx.manager.object.AliasManager.getInstance().resolvePath("icon/48/apps/graphics-snapshot.png"); + + var galleryData = []; + + for (var i=0; i<100; i++) + { + galleryData.push({ + display : "bmzN9ci5", + width : 350, + height : 350, + thumbWidth : 48, + thumbHeight : 48, + title : "gohome.png", + timestamp : Math.random().toString(), + comment : "Cool Comment sadas asd dsa asdas dasd asd asdas dasdasdasd sadasdas dsds as", + id : "7686191121780974-10682", + src : imgPath, + number : "#" + i + }); + }; + + var galleryList = new qx.ui.embed.GalleryList(galleryData); + + galleryList.setWidth(400); + galleryList.setTop(48); + galleryList.setBottom(48); + galleryList.setLeft(250); + + galleryList.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + galleryList.setBackgroundColor("white"); + + qx.ui.core.ClientDocument.getInstance().add(galleryList); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Gallery_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Gallery_1.html new file mode 100644 index 0000000000..a7965f0f13 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Gallery_1.html @@ -0,0 +1,116 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + + <style type="text/css"> +.qx_ui_embed_Gallery .galleryFrame{ + padding: 2px; +} + +.qx_ui_embed_Gallery .galleryCell{ + border: 1px solid #444; + background: #fff; + margin: 2px; + float: left; + overflow: hidden; + + font-family: Tahoma, Verdana, sans-serif; + font-size: 10px; + + cursor: default; + + -moz-user-select: none; + user-select: none; +} + +.qx_ui_embed_Gallery .galleryCell img{ + vertical-align: bottom; + display: block; +} + +.qx_ui_embed_Gallery .galleryCell .galleryTitle, +.qx_ui_embed_Gallery .galleryCell .galleryComment{ + background: #eee; + padding: 3px 6px; + text-align: center; + cursor: default; + overflow: hidden; + white-space: nowrap; +} + +.qx_ui_embed_Gallery .galleryCell .galleryTitle{ + border-bottom: 1px solid #aaa; +} + +.qx_ui_embed_Gallery .galleryCell .galleryComment{ + border-top: 1px solid #aaa; +} + +.qx_ui_embed_Gallery .galleryCell-Selected{ + background: #DCE8F6; + border: 1px solid #2760A1; +} + +.qx_ui_embed_Gallery .galleryCell-Selected .galleryTitle, +.qx_ui_embed_Gallery .galleryCell-Selected .galleryComment{ + background: #9BBFE7; +} + +.qx_ui_embed_Gallery .galleryCell-Selected .galleryTitle{ + border-bottom: 1px dotted #2760A1; +} + +.qx_ui_embed_Gallery .galleryCell-Selected .galleryComment{ + border-top: 1px dotted #2760A1; +} + </style> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test file for qx.ui.embed.Gallery</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var imgPath = qx.manager.object.AliasManager.getInstance().resolvePath("icon/64/apps/office-organizer.png"); + + var galleryList = []; + + for (var i=0; i<100; i++) + { + galleryList.push({ + display : "bmzN9ci5", + width : 350, + height : 350, + thumbWidth : 64, + thumbHeight : 64, + title : "gohome.png", + timestamp : Math.random().toString(), + comment : "Cool Comment", + id : "7686191121780974-10682", + src : imgPath + }); + }; + + var gallery = new qx.ui.embed.Gallery(galleryList); + + gallery.setLeft(20); + gallery.setRight(335); + gallery.setTop(48); + gallery.setBottom(48); + gallery.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + + qx.ui.core.ClientDocument.getInstance().add(gallery); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_1.html new file mode 100644 index 0000000000..079291d36a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_1.html @@ -0,0 +1,107 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Introducing qx.ui.groupbox.GroupBox.</p> + </div> + + <fieldset style="position:absolute; top:48px; left:400px; width:200px; height:100px"><legend>builtin</legend>content content content content content content content content content content content content content content content</fieldset> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var fs = new qx.ui.groupbox.GroupBox("My first Fieldset"); + + with(fs) + { + setWidth("40%"); + setBottom(48); + setTop(48); + setLeft(20); + + setMaxWidth(350); + setMinWidth(250); + }; + + + + var a1 = new qx.ui.basic.Atom("TextField 1"); + with(a1) + { + setTop(3); + setLeft(0); + setWidth("35%"); + setHorizontalChildrenAlign("left"); + }; + + var i1 = new qx.ui.form.TextField(); + with(i1) + { + setTop(0); + setRight(0); + setWidth("60%"); + }; + fs.add(a1, i1); + + + + var a2 = new qx.ui.basic.Atom("TextField 2", "icon/16/apps/preferences-desktop-wallpaper.png"); + with(a2) + { + setTop(33); + setLeft(0); + setWidth("35%"); + setHorizontalChildrenAlign("left"); + }; + fs.add(a2); + + var i2 = new qx.ui.form.TextField(); + with(i2) + { + setTop(30); + setRight(0); + setWidth("60%"); + }; + fs.add(i2); + + + + var a3 = new qx.ui.basic.Atom("TextField 3"); + with(a3) + { + setTop(63); + setLeft(0); + setWidth("35%"); + setHorizontalChildrenAlign("left"); + }; + fs.add(a3); + + var i3 = new qx.ui.form.TextField(); + with(i3) + { + setTop(60); + setRight(0); + setWidth("60%"); + }; + fs.add(i3); + + + + d.add(fs); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_2.html new file mode 100644 index 0000000000..06456bd71d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_2.html @@ -0,0 +1,153 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.groupbox.CheckGroupBox</p> + </div> + + <fieldset style="position:absolute; top:48px; left:400px; width:200px; height:100px"><legend>builtin</legend>content content content content content content content content content content content content content content content</fieldset> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var fs = new qx.ui.groupbox.CheckGroupBox("CheckBox FieldSet"); + + with(fs) + { + setWidth("40%"); + setBottom(48); + setTop(48); + setLeft(20); + + setMaxWidth(350); + setMinWidth("auto"); + }; + + d.add(fs); + + + + + var fsl = new qx.ui.layout.VerticalBoxLayout; + fsl.setLeft(0); + fsl.setRight(0); + fsl.setHeight("auto"); + fsl.setSpacing(4); + fs.add(fsl); + + + + + var r1 = new qx.ui.layout.HorizontalBoxLayout; + r1.setLeft(0); + r1.setWidth("100%"); + r1.setHeight("auto"); + r1.setVerticalChildrenAlign("middle"); + fsl.add(r1); + + var a1 = new qx.ui.basic.Atom("TextField 1"); + with(a1) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i1 = new qx.ui.form.TextField; + with(i1) + { + setRight(0); + setWidth("60%"); + }; + + r1.add(a1, i1); + + + + + + var r2 = new qx.ui.layout.HorizontalBoxLayout; + r2.setLeft(0); + r2.setWidth("100%"); + r2.setHeight("auto"); + r2.setVerticalChildrenAlign("middle"); + fsl.add(r2); + + var a2 = new qx.ui.basic.Atom("TextField 2", "icon/16/apps/preferences-desktop-wallpaper.png"); + with(a2) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i2 = new qx.ui.form.TextField; + with(i2) + { + setRight(0); + setWidth("60%"); + }; + + r2.add(a2, i2); + + + + + + + var r3 = new qx.ui.layout.HorizontalBoxLayout; + r3.setLeft(0); + r3.setWidth("100%"); + r3.setHeight("auto"); + r3.setVerticalChildrenAlign("middle"); + fsl.add(r3); + + var a3 = new qx.ui.basic.Atom("TextField 3"); + with(a3) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i3 = new qx.ui.form.TextField; + with(i3) + { + setRight(0); + setWidth("60%"); + }; + + r3.add(a3, i3); + + + + + + fs.getLegendObject().addEventListener("changeChecked", function(e) { + i1.setEnabled(e.getData()); + i2.setEnabled(e.getData()); + i3.setEnabled(e.getData()); + + a1.setEnabled(e.getData()); + a2.setEnabled(e.getData()); + a3.setEnabled(e.getData()); + }); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_3.html new file mode 100644 index 0000000000..72ce8f7a87 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/GroupBox_3.html @@ -0,0 +1,160 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.groupbox.RadioGroupBox</p> + </div> + + <fieldset style="position:absolute; top:48px; left:400px; width:200px; height:100px"><legend>builtin</legend>content content content content content content content content content content content content content content content</fieldset> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var fsr = new qx.ui.form.RadioButton("Simple configuration"); + + fsr.setLocation(27, 48); + d.add(fsr); + + var fs = new qx.ui.groupbox.RadioGroupBox("RadioButton FieldSet"); + + with(fs) + { + setWidth("40%"); + setBottom(48); + setTop(72); + setLeft(20); + + setMaxWidth(350); + setMinWidth("auto"); + }; + + d.add(fs); + + var fag = new qx.manager.selection.RadioManager("fscontrol", [ fsr, fs.getLegendObject() ]); + + + + + var fsl = new qx.ui.layout.VerticalBoxLayout; + fsl.setLeft(0); + fsl.setRight(0); + fsl.setHeight("auto"); + fsl.setSpacing(4); + fs.add(fsl); + + + + + var r1 = new qx.ui.layout.HorizontalBoxLayout; + r1.setLeft(0); + r1.setWidth("100%"); + r1.setHeight("auto"); + r1.setVerticalChildrenAlign("middle"); + fsl.add(r1); + + var a1 = new qx.ui.basic.Atom("TextField 1"); + with(a1) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i1 = new qx.ui.form.TextField; + with(i1) + { + setRight(0); + setWidth("60%"); + }; + + r1.add(a1, i1); + + + + + + var r2 = new qx.ui.layout.HorizontalBoxLayout; + r2.setLeft(0); + r2.setWidth("100%"); + r2.setHeight("auto"); + r2.setVerticalChildrenAlign("middle"); + fsl.add(r2); + + var a2 = new qx.ui.basic.Atom("TextField 2", "icon/16/apps/preferences-desktop-wallpaper.png"); + with(a2) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i2 = new qx.ui.form.TextField; + with(i2) + { + setRight(0); + setWidth("60%"); + }; + + r2.add(a2, i2); + + + + + + + var r3 = new qx.ui.layout.HorizontalBoxLayout; + r3.setLeft(0); + r3.setWidth("100%"); + r3.setHeight("auto"); + r3.setVerticalChildrenAlign("middle"); + fsl.add(r3); + + var a3 = new qx.ui.basic.Atom("TextField 3"); + with(a3) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i3 = new qx.ui.form.TextField; + with(i3) + { + setRight(0); + setWidth("60%"); + }; + + r3.add(a3, i3); + + + + + + fs.getLegendObject().addEventListener("changeChecked", function(e) { + i1.setEnabled(e.getData()); + i2.setEnabled(e.getData()); + i3.setEnabled(e.getData()); + + a1.setEnabled(e.getData()); + a2.setEnabled(e.getData()); + a3.setEnabled(e.getData()); + }); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Iframe_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Iframe_1.html new file mode 100644 index 0000000000..8d7adf7990 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Iframe_1.html @@ -0,0 +1,71 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Iframe implementation. Elastic.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + //---------- + // qx.ui.embed.Iframe + //---------- + + w1 = new qx.ui.embed.Iframe(); + + w1.addEventListener("load", function(e) { + this.debug("Loaded: " + this.getSource()); + }); + + // elastic + w1.set( { left: 20, top: 96, right: 335, bottom: 48 } ); + w1.setSource("http://www.google.com"); + + d.add(w1); + + + function changeURL(e) { + + this.setSource(e.getData()); + }; + + // make qx.ui.embed.Iframe react to event "surfTo" via function changeURL() + d.addEventListener("surfTo", changeURL, w1); + + + //------------- + // radio group + //------------- + + var rd1 = new qx.ui.form.RadioButton("Google", "http://www.google.com"); + var rd2 = new qx.ui.form.RadioButton("Yahoo", "http://www.yahoo.com"); + + rd1.set( { left: 20, top: 48, checked: true } ); + rd2.set( { left: 120, top: 48 } ); + + var rbm = new qx.manager.selection.RadioManager( name, [rd1, rd2]); + + // elements of radio group fire event "surfTo" + rbm.addEventListener("changeSelected", function(e) + { + d.dispatchEvent( new qx.event.type.DataEvent("surfTo", e.getData().getValue() ) ); + }); + + d.add(rd1, rd2); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Inline_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Inline_1.html new file mode 100644 index 0000000000..c1cfee4e8d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Inline_1.html @@ -0,0 +1,260 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Inline widget.</p><p>Application layout is disabled by using qx.core.Settings. Scrollbars appear, if the content is bigger than the window.</p> + </div> + + <div id="iframe1" class="manualFrame" style="overflow:hidden;position:static;margin-top:38px;margin-left:10px"> + Inline Frame #1 + </div> + + <div id="iframe2" class="manualFrame" style="overflow:hidden;position:static;margin-top:20px;margin-left:10px"> + Inline Frame #2 + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var inlineWidget = new qx.ui.basic.Inline("iframe1"); + + inlineWidget.setHeight("auto"); + inlineWidget.setWidth("auto"); + + var fieldSet = new qx.ui.groupbox.GroupBox("My first inline fieldset"); + + with(fieldSet) + { + // setWidth("auto"); + // setWidth("100%"); + + setLeft(0); + setRight(0); + + setHeight("auto"); + }; + + inlineWidget.add(fieldSet); + + d.add(inlineWidget); + + + + var atom1 = new qx.ui.basic.Atom("Name"); + var textfield1 = new qx.ui.form.TextField; + + with(atom1) + { + setLeft(0); + setTop(3); + }; + + with(textfield1) + { + setLeft(80); + setRight(0); + setTop(0); + }; + + fieldSet.add(atom1, textfield1); + + + + var atom2 = new qx.ui.basic.Atom("First Name"); + var textfield2 = new qx.ui.form.TextField; + + with(atom2) + { + setLeft(0); + setTop(33); + }; + + with(textfield2) + { + setLeft(80); + setRight(0); + setTop(30); + }; + + fieldSet.add(atom2, textfield2); + + + + var atom3 = new qx.ui.basic.Atom("City"); + var textfield3 = new qx.ui.form.TextField; + + with(atom3) + { + setLeft(0); + setTop(63); + }; + + with(textfield3) + { + setLeft(80); + setRight(0); + setTop(60); + }; + + fieldSet.add(atom3, textfield3); + + + + /* + Menu + */ + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("New"); + var mb1_02 = new qx.ui.menu.Button("Open"); + var mb1_03 = new qx.ui.menu.Button("Save"); + var mb1_04 = new qx.ui.menu.Button("Save as"); + var mb1_05 = new qx.ui.menu.Button("Close"); + var mb1_06 = new qx.ui.menu.Button("Restore last saved"); + + m1.add(mb1_01, mb1_02, mb1_03, mb1_04, mb1_05, mb1_06); + + + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("Undo"); + var mb2_02 = new qx.ui.menu.Button("Redo"); + var mb2_b1 = new qx.ui.menu.Separator(); + var mb2_03 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png"); + var mb2_04 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png"); + var mb2_05 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png"); + var mb2_06 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png"); + var mb2_b2 = new qx.ui.menu.Separator(); + var mb2_07 = new qx.ui.menu.Button("Select All"); + var mb2_08 = new qx.ui.menu.Button("Find"); + var mb2_09 = new qx.ui.menu.Button("Find Again"); + + + + + mb2_05.setEnabled(false); + mb2_06.setEnabled(false); + mb2_09.setEnabled(false); + + m2.add(mb2_01, mb2_02, mb2_b1, mb2_03, mb2_04, mb2_05, mb2_06, mb2_b2, mb2_07, mb2_08, mb2_09); + + + var m3 = new qx.ui.menu.Menu; + var m3_suba = new qx.ui.menu.Menu; + var m3_subb = new qx.ui.menu.Menu; + var m3_subc = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.CheckBox("File List", null, false); + var mb3_02 = new qx.ui.menu.CheckBox("Syntax Highlighting", null, true); + var mb3_03 = new qx.ui.menu.CheckBox("Statusbar", null, true); + var mb3_b1 = new qx.ui.menu.Separator(); + var mb3_04 = new qx.ui.menu.Button("Printer Font", null, null, m3_suba); + var mb3_05 = new qx.ui.menu.Button("Editor Font", null, null, m3_subb); + var mb3_06 = new qx.ui.menu.Button("Export Font", null, null, m3_subc); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_b1, mb3_04, mb3_05, mb3_06); + + var mb3_suba_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_suba_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_suba_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_suba_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_suba_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + + m3_suba.add(mb3_suba_01, mb3_suba_02, mb3_suba_03, mb3_suba_04, mb3_suba_05); + + var mb3_subb_01 = new qx.ui.menu.Button("Verdana, 11pt"); + var mb3_subb_02 = new qx.ui.menu.Button("Verdana, 12pt"); + var mb3_subb_03 = new qx.ui.menu.Button("Verdana, 13pt"); + var mb3_subb_04 = new qx.ui.menu.Button("Verdana, 14pt"); + var mb3_subb_05 = new qx.ui.menu.Button("Verdana, 15pt"); + + m3_subb.add(mb3_subb_01, mb3_subb_02, mb3_subb_03, mb3_subb_04, mb3_subb_05); + + var mb3_subc_01 = new qx.ui.menu.Button("Courier, 11pt"); + var mb3_subc_02 = new qx.ui.menu.Button("Courier, 12pt"); + var mb3_subc_03 = new qx.ui.menu.Button("Courier, 13pt"); + var mb3_subc_04 = new qx.ui.menu.Button("Courier, 14pt"); + var mb3_subc_05 = new qx.ui.menu.Button("Courier, 15pt"); + + m3_subc.add(mb3_subc_01, mb3_subc_02, mb3_subc_03, mb3_subc_04, mb3_subc_05); + + + + var m4 = new qx.ui.menu.Menu; + + var m4_suba = new qx.ui.menu.Menu; + + var mb4_01 = new qx.ui.menu.Button("View", null, null, m4_suba); + var mb4_b1 = new qx.ui.menu.Separator(); + var mb4_02 = new qx.ui.menu.Button("Editor Preferences..."); + var mb4_03 = new qx.ui.menu.Button("Editor Extensions"); + var mb4_04 = new qx.ui.menu.Button("Framework Preferences"); + + m4.add(mb4_01, mb4_b1, mb4_02, mb4_03, mb4_04); + + var mb4_suba_01 = new qx.ui.menu.Button("New Window"); + var mb4_suba_b1 = new qx.ui.menu.Separator(); + var mb4_suba_02 = new qx.ui.menu.RadioButton("Overlapping", null, true); + var mb4_suba_03 = new qx.ui.menu.RadioButton("Split Horizontally", null); + var mb4_suba_04 = new qx.ui.menu.RadioButton("Split Vertically", null); + var mb4_suba_b2 = new qx.ui.menu.Separator(); + var mb4_suba_05 = new qx.ui.menu.Button("Next Window"); + var mb4_suba_06 = new qx.ui.menu.Button("Previous Window"); + + m4_suba.add(mb4_suba_01, mb4_suba_b1, mb4_suba_02, mb4_suba_03, mb4_suba_04, mb4_suba_b2, mb4_suba_05, mb4_suba_06); + + var mb4_manager = new qx.manager.selection.RadioManager("windowMode", [ mb4_suba_02, mb4_suba_03, mb4_suba_04 ]); + + + var m5 = new qx.ui.menu.Menu; + + var mb5_01 = new qx.ui.menu.Button("Help"); + var mb5_02 = new qx.ui.menu.Button("About"); + + m5.add(mb5_01, mb5_02); + + d.add(m1, m2, m3, m3_suba, m3_subb, m3_subc, m4, m4_suba, m5); + + + var inline2 = new qx.ui.basic.Inline("iframe2"); + + inline2.setHeight("auto"); + inline2.setWidth("auto"); + + + var mb1 = new qx.ui.toolbar.ToolBar; + + var mbb1 = new qx.ui.toolbar.MenuButton("File", m1); + var mbb2 = new qx.ui.toolbar.MenuButton("Edit", m2); + var mbb3 = new qx.ui.toolbar.MenuButton("View", m3); + var mbb4 = new qx.ui.toolbar.MenuButton("Options", m4); + var mbb5 = new qx.ui.toolbar.MenuButton("Help", m5); + + mb1.add(mbb1, mbb2, mbb3, mbb4, mbb5); + + with(mb1) + { + setWidth(400); + setHeight("auto"); + }; + + inline2.add(mb1); + + d.add(inline2); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_1.html new file mode 100644 index 0000000000..24e845ab97 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_1.html @@ -0,0 +1,67 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>Testing of column alignment, resizeable prohibition for columns and live resizing.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : 100, type : "text" }, + size: { label : "Size", width : 50, type : "text", align : "right", resizable : false }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + // Prohibit resizing of columns completly + // lv.setResizable(false); + + qx.ui.core.ClientDocument.getInstance().add(lv); + + + + + var chk1 = new qx.ui.form.CheckBox("Enable Live Resize"); + chk1.setLocation(20, 420); + qx.ui.core.ClientDocument.getInstance().add(chk1); + + chk1.addEventListener("changeChecked", function(e) { + lv.setLiveResize(e.getData()); + }); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_2.html new file mode 100644 index 0000000000..eff805d2c0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_2.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells and an additional icon.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + var li = [ "apps/preferences-desktop-theme.png", "actions/edit.png", "apps/graphics-image-viewer.png", "apps/preferences-desktop-wallpaper.png", "actions/document-new.png" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ icon : { source : "icon/16/" + li[t] }, name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + icon : { label : "", width: 24, type : "image" }, + name : { label : "Name", width : 100, type : "text" }, + size: { label : "Size", width : 50, type : "text", align : "right" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_3.html new file mode 100644 index 0000000000..d726c26d63 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_3.html @@ -0,0 +1,51 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with iconHtml cells.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { html : "E-Mail " + i, icon : "icon/16/apps/internet-email-client.png", iconWidth : 16, iconHeight : 16 }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }, open : { uri : "http://www.google.com/search?q=" + i, html : "Open " + i }}); + }; + + var lc = + { + name : { label : "Name", width : 120, type : "iconHtml" }, + size: { label : "Size", width : 50, type : "text", align : "right" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_4.html new file mode 100644 index 0000000000..6072187c89 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ListView_4.html @@ -0,0 +1,58 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>Added some sort handling stuff.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : 100, type : "text", sortable : true, sortProp : "text" }, + size: { label : "Size", width : 50, type : "text", sortable : true, sortProp : "text", sortMethod : qx.util.Compare.byIntegerString, align : "right" }, + type : { label : "Type", width : 80, type : "text", sortable : true, sortProp : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(qx.ui.core.ClientDocument.getInstance(), 20, 448); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/List_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/List_1.html new file mode 100644 index 0000000000..843ce723ba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/List_1.html @@ -0,0 +1,127 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>List implementation</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var l1 = new qx.ui.form.List; + + l1.set({ top : 48, left: 20, height: 200, width: 150, overflow : "scrollY" }); + + var item; + for( var i=1; i<=35; i++ ) + { + // item = new qx.ui.form.ListItem("Item No " + i); + item = new qx.ui.form.ListItem("Item No " + i, "icon/" + ((i % 4) ? "16" : "48") + "/places/folder.png"); + + !(i % 9) && (item.setEnabled(false)); + + l1.add(item); + }; + + d.add(l1); + + var l2 = new qx.ui.form.List; + + l2.set({ top : 48, left: 400, height: 200, width: 150 }); + l2.getManager().setMultiSelection(false); + //l2.setOverflow("scrollY"); + l2.setHeight("auto"); + + var l2l = [ "red", "violett", "rose", "blue", "green", "cyan", "magenta", "yellow", "brown", "orange", "black", "white", "grey", "gray", "brown" ]; + + for (var i=0; i<l2l.length; i++) { + l2.add(new qx.ui.form.ListItem(l2l[i])); + }; + + d.add(l2); + + + + + var c1 = new qx.ui.form.CheckBox("Enable Multi-Selection"); + var c2 = new qx.ui.form.CheckBox("Enable Drag-Selection"); + var c3 = new qx.ui.form.CheckBox("Allow Deselection"); + var c4 = new qx.ui.form.CheckBox("Enable Inline Find"); + + c1.setLocation(180, 48); + c2.setLocation(180, 68); + c3.setLocation(180, 88); + c4.setLocation(180, 108); + + d.add(c1, c2, c3, c4); + + c1.setChecked(true); + c2.setChecked(true); + c3.setChecked(true); + c4.setChecked(true); + + c1.addEventListener("changeChecked", function(e) { + l1.getManager().setMultiSelection(e.getData()); + }); + + c2.addEventListener("changeChecked", function(e) { + l1.getManager().setDragSelection(e.getData()); + }); + + c3.addEventListener("changeChecked", function(e) { + l1.getManager().setCanDeselect(e.getData()); + }); + + c4.addEventListener("changeChecked", function(e) { + l1.setEnableInlineFind(e.getData()); + }); + + + + + + var rd1 = new qx.ui.form.RadioButton("Show Label", "label"); + var rd2 = new qx.ui.form.RadioButton("Show Icon", "icon"); + var rd3 = new qx.ui.form.RadioButton("Show Both", "both"); + + rd1.set( { left: 180, top: 128 } ); + rd2.set( { left: 180, top: 148 } ); + rd3.set( { left: 180, top: 168 } ); + + d.add(rd1, rd2, rd3); + + rd3.setChecked(true); + + var rbm = new qx.manager.selection.RadioManager( name, [rd1, rd2, rd3]); + + rbm.addEventListener("changeSelected", function(e) + { + for( var i=0; i<l1.getChildrenLength(); i++ ) { + l1.getChildren()[i].setShow(e.getData().getValue()); + } + }); + + + + + // Icon Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 400); + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 200, 400); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Menu_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Menu_1.html new file mode 100644 index 0000000000..7c3b1310ea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Menu_1.html @@ -0,0 +1,193 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.menu.Menu Implementation.</p> + <p>Added qx.client.Command support tests.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var q1 = new qx.client.Command("Ctrl+Z"); + q1.addEventListener("execute", function(e) { + alert("Undo"); + }); + + var q2 = new qx.client.Command("Ctrl+Y"); + q2.addEventListener("execute", function(e) { + alert("Redo"); + }); + + var q3 = new qx.client.Command("Ctrl+X"); + q3.addEventListener("execute", function(e) { + alert("Cut"); + }); + + var q4 = new qx.client.Command("Ctrl+C"); + q4.addEventListener("execute", function(e) { + alert("Copy"); + }); + + var q5 = new qx.client.Command("Ctrl+V"); + q5.addEventListener("execute", function(e) { + alert("Paste"); + }); + + var q6 = new qx.client.Command("Del"); + q6.addEventListener("execute", function(e) { + alert("Delete"); + }); + + var q7 = new qx.client.Command("Ctrl+A"); + q7.addEventListener("execute", function(e) { + alert("Select All"); + }); + + var q8 = new qx.client.Command("Ctrl+F"); + q8.addEventListener("execute", function(e) { + alert("Search"); + }); + + var q9 = new qx.client.Command("Ctrl+G"); + q9.addEventListener("execute", function(e) { + alert("Search Again"); + }); + + var q10 = new qx.client.Command(); + q10.addEventListener("execute", function(e) { + alert("Syntax Highlighting"); + }); + + var q11 = new qx.client.Command("Esc"); + q11.addEventListener("execute", function(e) { + alert("Escape"); + }); + + var q12 = new qx.client.Command("Space"); + q12.addEventListener("execute", function(e) { + alert("Space"); + }); + + + + + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("New Window"); + var mb2_02 = new qx.ui.menu.Button("Overlapping"); + var mb2_03 = new qx.ui.menu.Button("Split Vertical"); + var mb2_04 = new qx.ui.menu.Button("Split Horizontal"); + var mb2_05 = new qx.ui.menu.Button("Next Window"); + var mb2_06 = new qx.ui.menu.Button("Previous Window"); + + m2.add(mb2_01, mb2_02, mb2_03, mb2_04, mb2_05, mb2_06); + + + + + var m3 = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_04, mb3_05); + + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("View/Lists", null, q12); + var mb1_02 = new qx.ui.menu.Button("Syntax Highlighting", null, q10); + var ms1 = new qx.ui.menu.Separator(); + var mb1_03 = new qx.ui.menu.Button("Window Font", null, q11); + var mb1_04 = new qx.ui.menu.Button("Printer Font", null, null, m3); + var ms2 = new qx.ui.menu.Separator(); + var mb1_05 = new qx.ui.menu.Button("Undo", null, q1); + var mb1_06 = new qx.ui.menu.Button("Redo", null, q2); + var ms3 = new qx.ui.menu.Separator(); + var mb1_07 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", q3); + var mb1_08 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", q4); + var mb1_09 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", q5); + var mb1_10 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", q6); + var mb1_11 = new qx.ui.menu.Button("Select All", null, q7); + var ms4 = new qx.ui.menu.Separator(); + var mb1_12 = new qx.ui.menu.Button("Search", null, q8); + var mb1_13 = new qx.ui.menu.Button("Search Again", null, q9); + var ms5 = new qx.ui.menu.Separator(); + var mb1_14 = new qx.ui.menu.Button("View", null, null, m2); + var mb1_15 = new qx.ui.menu.Button("Editor Settings..."); + var mb1_16 = new qx.ui.menu.Button("Editor Plugins"); + var mb1_17 = new qx.ui.menu.Button("Framework Settings"); + + m1.add(mb1_01, mb1_02, ms1, mb1_03, mb1_04, ms2, mb1_05, mb1_06, ms3, mb1_07, mb1_08, mb1_09, mb1_10, mb1_11, ms4, mb1_12, mb1_13, ms5, mb1_14, mb1_15, mb1_16, mb1_17); + + + d.add(m1, m2, m3); + + + + + + var w1 = new qx.ui.form.Button("Open"); + + w1.setTop(48); + w1.setLeft(20); + + w1.addEventListener("click", function(e) + { + if (m1.isSeeable()) + { + m1.hide(); + } + else + { + var el = this.getElement(); + + m1.setLeft(qx.html.Location.getPageBoxLeft(el)); + m1.setTop(qx.html.Location.getPageBoxBottom(el)); + + m1.show(); + }; + + e.setPropagationStopped(true); + }); + + w1.addEventListener("mousedown", function(e) + { + e.setPropagationStopped(true); + }); + + + d.add(w1); + + + + + + + // Icon Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 180, 48); + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 380, 48); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/NativeWindow_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/NativeWindow_1.html new file mode 100644 index 0000000000..55fab71439 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/NativeWindow_1.html @@ -0,0 +1,198 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Native Windows. Could be understood as an enhanced window.open with some additional options like to create modal windows.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var w1 = new qx.client.NativeWindow("http://www.google.com"); + + w1.setDimension(600, 400); + + + w1.addEventListener("load", function(e) { + this.debug("Content loaded: " + this.isLoaded()); + }); + + w1.addEventListener("close", function(e) { + this.debug("Window closed: " + this.isClosed()); + }); + + + + + var d = qx.ui.core.ClientDocument.getInstance(); + + var btn1 = new qx.ui.form.Button("Open Native Window", "icon/16/apps/preferences-desktop-wallpaper.png"); + with(btn1) + { + setTop(48); + setLeft(20); + + addEventListener("click", function() { w1.open(); } ); + }; + + d.add(btn1); + + + + + + var l = new qx.ui.layout.VerticalBoxLayout; + l.setLocation(20, 96); + l.setWidth("auto"); + l.setHeight("auto"); + d.add(l); + + var fs1 = new qx.ui.groupbox.GroupBox("Initial Settings"); + fs1.setHeight("auto"); + l.add(fs1); + + + var chk1 = new qx.ui.form.CheckBox("Resizeable"); + chk1.setLocation(0, 0); + chk1.setChecked(true); + chk1.addEventListener("changeChecked", function(e) { + w1.setResizeable(e.getData()); + }); + + var chk2 = new qx.ui.form.CheckBox("Show Statusbar"); + chk2.setLocation(0, 20); + chk2.setChecked(false); + chk2.addEventListener("changeChecked", function(e) { + w1.setShowStatusbar(e.getData()); + }); + + var chk3 = new qx.ui.form.CheckBox("Show Menubar"); + chk3.setLocation(0, 40); + chk3.setChecked(false); + chk3.addEventListener("changeChecked", function(e) { + w1.setShowMenubar(e.getData()); + }); + + var chk4 = new qx.ui.form.CheckBox("Show Location"); + chk4.setLocation(0, 60); + chk4.setChecked(false); + chk4.addEventListener("changeChecked", function(e) { + w1.setShowLocation(e.getData()); + }); + + var chk5 = new qx.ui.form.CheckBox("Show Toolbar"); + chk5.setLocation(0, 80); + chk5.setChecked(false); + chk5.addEventListener("changeChecked", function(e) { + w1.setShowToolbar(e.getData()); + }); + + var chk6 = new qx.ui.form.CheckBox("Allow Scrollbars"); + chk6.setLocation(0, 100); + chk6.setChecked(true); + chk6.addEventListener("changeChecked", function(e) { + w1.setAllowScrollbars(e.getData()); + }); + + var chk7 = new qx.ui.form.CheckBox("Modal"); + chk7.setLocation(0, 120); + chk7.setChecked(false); + chk7.addEventListener("changeChecked", function(e) { + w1.setModal(e.getData()); + }); + + var chk8 = new qx.ui.form.CheckBox("Dependent"); + chk8.setLocation(0, 140); + chk8.setChecked(true); + chk8.addEventListener("changeChecked", function(e) { + w1.setDependent(e.getData()); + }); + + fs1.add(chk1, chk2, chk3, chk4, chk5, chk6, chk7, chk8); + + + + + + + + + var fs2 = new qx.ui.groupbox.GroupBox("Runtime Settings"); + fs2.setHeight("auto"); + l.add(fs2); + + + + var tf1 = new qx.ui.form.TextField("http://www.google.com"); + tf1.setLocation(0, 2); + tf1.setWidth(150); + + var btn1 = new qx.ui.form.Button("Set Url", "icon/16/actions/dialog-ok.png"); + btn1.setLocation(155, 0); + btn1.addEventListener("click", function() { + w1.setUrl(tf1.getValue()); + }); + + + + + var tf2 = new qx.ui.form.TextField("600"); + tf2.setLocation(0, 42); + tf2.setWidth(50); + + var btn2 = new qx.ui.form.Button("Set Width", "icon/16/actions/dialog-ok.png"); + btn2.setLocation(55, 40); + btn2.addEventListener("click", function() { + w1.setWidth(parseInt(tf2.getValue())); + }); + + + + + var tf3 = new qx.ui.form.TextField("400"); + tf3.setLocation(0, 72); + tf3.setWidth(50); + + var btn3 = new qx.ui.form.Button("Set Height", "icon/16/actions/dialog-ok.png"); + btn3.setLocation(55, 70); + btn3.addEventListener("click", function() { + w1.setHeight(parseInt(tf3.getValue())); + }); + + + + var btn4 = new qx.ui.form.Button("Center to screen", "icon/16/apps/graphics-image-viewer.png"); + btn4.setLocation(0, 110); + btn4.addEventListener("click", function() { + w1.centerToScreen() + }); + + var btn5 = new qx.ui.form.Button("Center to screen area", "icon/16/apps/graphics-image-viewer.png"); + btn5.setLocation(0, 140); + btn5.addEventListener("click", function() { + w1.centerToScreenArea() + }); + + var btn6 = new qx.ui.form.Button("Center to opener", "icon/16/apps/graphics-image-viewer.png"); + btn6.setLocation(0, 170); + btn6.addEventListener("click", function() { + w1.centerToOpener() + }); + + + + fs2.add(tf1, btn1, tf2, btn2, tf3, btn3, btn4, btn5, btn6); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RadioButton_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RadioButton_1.html new file mode 100644 index 0000000000..05d558e800 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RadioButton_1.html @@ -0,0 +1,114 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for qx.ui.form.RadioButton. qx.ui.form.RadioButton extends qx.ui.basic.Atom and so it inherits all the options and properties defined there.</p> + <p>To group multiple QxRadioButtons you must define a instance of qx.manager.selection.RadioManager and add them to this new instance. All QxRadioButtons assigned to the same group make sure that only one of them is checked at the same time.</p> + <p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var rb1 = new qx.ui.form.RadioButton("Option #1", "rb1"); + with(rb1) + { + setTop(80); + setLeft(20); + }; + d.add(rb1); + + var rb2 = new qx.ui.form.RadioButton("Option #2", "rb2"); + with(rb2) + { + setTop(110); + setLeft(20); + }; + d.add(rb2); + rb2.setChecked(true); + + + var rb3 = new qx.ui.form.RadioButton("Top RadioButton", "rb3"); + with(rb3) + { + setTop(160); + setLeft(20); + setIconPosition("top"); + }; + d.add(rb3); + + var rb4 = new qx.ui.form.RadioButton("Bottom RadioButton", "rb4"); + with(rb4) + { + setTop(160); + setLeft(160); + setIconPosition("bottom"); + }; + d.add(rb4); + + + var rb5 = new qx.ui.form.RadioButton("Left RadioButton", "rb5"); + with(rb5) + { + setTop(220); + setLeft(20); + setIconPosition("left"); + }; + d.add(rb5); + + var rb6 = new qx.ui.form.RadioButton("Right RadioButton", "rb6"); + with(rb6) + { + setTop(220); + setLeft(160); + setIconPosition("right"); + }; + d.add(rb6); + + var rb7 = new qx.ui.form.RadioButton(null, "rb7"); + with(rb7) + { + setTop(280); + setLeft(20); + }; + d.add(rb7); + + + var rg1 = new qx.manager.selection.RadioManager("mygroup", [rb1, rb2, rb3, rb4, rb5, rb6, rb7]); + + + + + + var linfo = new qx.ui.basic.Atom("Current Value: \"" + rg1.getSelected().getLabel() + "\" (" + rg1.getSelected().getValue() + ")", "icon/16/actions/go-next.png"); + + with(linfo) + { + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setPadding(2, 4); + setBackgroundColor("white"); + setTop(48); + setLeft(20); + }; + + rg1.addEventListener("changeSelected", function(e) { + linfo.setLabel("Current Value: \"" + e.getData().getLabel() + "\" (" + e.getData().getValue() + ")"); + }); + + d.add(linfo); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RepeatButton_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RepeatButton_1.html new file mode 100644 index 0000000000..e0281c273a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RepeatButton_1.html @@ -0,0 +1,73 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test the qx.ui.form.RepeatButton constructor. qx.ui.form.RepeatButton is based on qx.ui.form.Button but adds some interval handled event mechanism.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function buttonExecute() { this.debug("Executed: " + this.getLabel()); }; + + var btn1 = new qx.ui.form.RepeatButton("Repeat Button No #1"); + with(btn1) + { + setTop(48); + setLeft(20); + addEventListener("execute", buttonExecute); + }; + + d.add(btn1); + + + + var btn2 = new qx.ui.form.RepeatButton("Repeat Button No #2"); + with(btn2) + { + setTop(48); + setLeft(160); + addEventListener("execute", buttonExecute); + setEnabled(false); + }; + + d.add(btn2); + + + + var btn3 = new qx.ui.form.RepeatButton("Repeat Button No #3"); + with(btn3) + { + setTop(48); + setLeft(300); + addEventListener("execute", buttonExecute); + }; + + d.add(btn3); + + + var btn4 = new qx.ui.form.RepeatButton("Repeat Button No #4", "icon/16/actions/go-next.png"); + with(btn4) + { + setTop(148); + setLeft(20); + addEventListener("execute", buttonExecute); + }; + + d.add(btn4); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Resizer_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Resizer_1.html new file mode 100755 index 0000000000..b71aa774d0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Resizer_1.html @@ -0,0 +1,63 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.resizer.Rezizer.</p> + <p> + The Resizer widget acts as a wrapper of another widget. It allows the child widget to be resized by the end user. + </p> + </div> + + <script type="text/javascript"> + function newResizer() { + var tArea = new qx.ui.form.TextArea; + tArea.setValue("Resize me\nI'm resizable"); + tArea.set({ + minWidth: 100, + minHeight: 50, + width: 200, + height: 100 + }); + return new qx.ui.resizer.Resizer(tArea); + } + + function newHBox() { + var hBox = new qx.ui.layout.BoxLayout; + hBox.set({ + spacing: 10 + }); + hBox.auto(); + hBox.add(newResizer(), newResizer()); + return hBox; + } + + qx.core.Init.getInstance().defineMain(function() { + var vBox = new qx.ui.layout.VerticalBoxLayout; + var list = new qx.ui.form.List; + list.set({width: 100, height: 200, minWidth: 50, minHeight: 100, overflow: 'auto'}); + for (var i = 0; i < 100; i++) { + list.add(new qx.ui.form.ListItem('Option number '+i)); + } + vBox.add(new qx.ui.resizer.Resizer(list)); + vBox.set({ + spacing: 10, + top: 50, + left: 30 + }); + vBox.auto(); + vBox.add(newHBox(), newHBox()); + vBox.addToDocument(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RpcTreeFullControl_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RpcTreeFullControl_1.html new file mode 100644 index 0000000000..dbbc46fedf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/RpcTreeFullControl_1.html @@ -0,0 +1,194 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link + type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + + <div id="demoDescription"> + <p><strong>Only works together with a RPC backend!</strong></p> + <p> + Shows a tree which listens for tree events. This script communicates via + JSON-RPC to a backend server. Each time a new tree node is opened, the + children are requested from the server. See the server-side functions + at backend/php/services/qooxdoo/fs.php. + </p> + </div> + +<script type="text/javascript"> +qx.core.Init.getInstance().defineMain( + function() + { + var addChildren = function(parent, children) + { + var t; + var trs; + var child; + + for (i = 0; i < children.length; i++) + { + child = children[i]; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().newRow(); + + // Here's our indentation and tree-lines + trs.addIndent(); + + // If not a file or directory, change the icon + var bIsDirectory = ((child.mode & 0040000) != 0); + var bIsFile = ((child.mode & 0100000) != 0); + if (! bIsDirectory && ! bIsFile) + { + trs.addIcon("icon/16/places/user-desktop.png", + "icon/16/apps/accessories-dictionary.png"); + } + else + { + trs.addIcon(); + } + + // The label + trs.addLabel(child.name); + + // All else should be right justified + obj = new qx.ui.basic.HorizontalSpacer; + trs.addObject(obj, true); + + // Add the permissions + mode = ""; + mode = ((child.mode & 0001) ? "x" : "-") + mode; + mode = ((child.mode & 0002) ? "w" : "-") + mode; + mode = ((child.mode & 0004) ? "r" : "-") + mode; + mode = ((child.mode & 0010) ? "x" : "-") + mode; + mode = ((child.mode & 0020) ? "w" : "-") + mode; + mode = ((child.mode & 0040) ? "r" : "-") + mode; + mode = ((child.mode & 0100) ? "x" : "-") + mode; + mode = ((child.mode & 0200) ? "w" : "-") + mode; + mode = ((child.mode & 0400) ? "r" : "-") + mode; + obj = new qx.ui.basic.Label(mode); + obj.setWidth(80); + obj.setStyleProperty("fontFamily", "monospace"); + trs.addObject(obj, true); + + // Add a file size, date and mode + obj = new qx.ui.basic.Label(child.size + ""); + obj.setWidth(50); + obj.setStyleProperty("fontFamily", "monospace"); + trs.addObject(obj, true); + + var d = new Date(); + d.setTime(child.mtime * 1000); + obj = new qx.ui.basic.Label(d.toString().slice(0,33)); + obj.setWidth(200); + obj.setStyleProperty("fontFamily", "monospace"); + trs.addObject(obj, true); + + if (bIsDirectory) + { + t = new qx.ui.treefullcontrol.TreeFolder(trs); + } + else + { + t = new qx.ui.treefullcontrol.TreeFile(trs); + } + parent.add(t); + } + } + + /* + * Reset the default of always showing the plus/minus symbol. The + * default is 'false'. We want to always display it for each folder + * (and then stop displaying it if we determine upon open that there + * are no contents). + */ + var constructor = qx.OO.classes["qx.ui.treefullcontrol.TreeFolder"]; + qx.Proto = constructor.prototype; + qx.OO.changeProperty({ + name : "alwaysShowPlusMinusSymbol", + type : "boolean", + defaultValue : true }); + + var rpc = new qx.io.remote.Rpc(); + rpc.setTimeout(10000); + rpc.setUrl("/services/"); + rpc.setServiceName("qooxdoo.fs"); + rpc.setCrossDomain(false); + + var mycall = null; + + var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Root"); + var t = new qx.ui.treefullcontrol.Tree(trs); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(700); + setBottom(48); + + setHideNode(true); // hide the root node + setUseTreeLines(true); // display tree lines + }; + + /* + * All subtrees will use this root node's event listeners. Create an + * event listener for an open while empty. + */ + t.addEventListener( + "treeOpenWhileEmpty", + function(e) + { + var parent = e.getData(); + var hierarchy = parent.getHierarchy(new Array()); + + parent.debug("Requesting children..."); + + // Strip off the root node + hierarchy.shift(); + + mycall = rpc.callAsync( + function(result, ex, id) + { + mycall = null; + if (ex == null) { + parent.debug("Children obtained. Rendering..."); + addChildren(parent, result); + parent.debug("Rendering complete."); + } else { + alert("Async(" + id + ") exception: " + ex); + } + }, + "readDirEntries", + hierarchy, + true); + }); + + qx.ui.core.ClientDocument.getInstance().add(t); + + var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Sandbox"); + var tf = new qx.ui.treefullcontrol.TreeFolder(trs); + t.add(tf); + }); +/* + * Local Variables: + * mode: java + * End: + */ +</script> + +</body> +</html> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Spinner_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Spinner_1.html new file mode 100644 index 0000000000..bdeb65cb10 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Spinner_1.html @@ -0,0 +1,107 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.form.Spinner.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + var s1 = new qx.ui.form.Spinner; + + with(s1) + { + setLeft(20); + setTop(64); + }; + + d.add(s1); + + d.add( (new qx.ui.basic.Label("100").set({left:20, top:48})) ); + d.add( (new qx.ui.basic.Label("0").set({left:20, top:90})) ); + + var s2 = new qx.ui.form.Spinner; + + with(s2) + { + setLeft(100); + setTop(64); + setValue(30); + setMin(-30); + setMax(30); + }; + + d.add(s2); + + d.add( (new qx.ui.basic.Label("30").set({left:100, top:48})) ); + d.add( (new qx.ui.basic.Label("-30").set({left:100, top:90})) ); + + var s3 = new qx.ui.form.Spinner; + + with(s3) + { + setLeft(180); + setTop(64); + setValue(0); + setMin(-3000); + setMax(3000); + setIncrementAmount(5); + }; + + d.add(s3); + + d.add( (new qx.ui.basic.Label("3000").set({left:180, top:48})) ); + d.add( (new qx.ui.basic.Label("-3000").set({left:180, top:90})) ); + + /* + s3._manager.addEventListener("changeValue", function(e) { + this.debug("Value: " + e.getData()); + }); + */ + + var s4 = new qx.ui.form.Spinner; + + with(s4) + { + setLeft(260); + setTop(64); + setValue(0); + setMin(100); + setMax(200); + }; + + d.add(s4); + + d.add( (new qx.ui.basic.Label("200").set({left:260, top:48})) ); + d.add( (new qx.ui.basic.Label("100").set({left:260, top:90})) ); + + + var s5 = new qx.ui.form.Spinner( -200, null, -100); + + with(s5) + { + setLeft(340); + setTop(64); + }; + + d.add(s5); + + d.add( (new qx.ui.basic.Label("-100").set({left:340, top:48})) ); + d.add( (new qx.ui.basic.Label("-200").set({left:340, top:90})) ); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/SplitPane_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/SplitPane_1.html new file mode 100644 index 0000000000..fbeed10a36 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/SplitPane_1.html @@ -0,0 +1,72 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for normal width Splitpane, no holding knobs, live resize enabled.</p> + </div> + + <script type="text/javascript"> + + qx.core.Init.getInstance().defineMain(function() + { + var frame = new qx.ui.layout.CanvasLayout; + frame.setLocation(20, 48); + frame.setBottom(48); + frame.setRight(300); + frame.setBackgroundColor("#134275"); + frame.setPadding(20); + frame.addToDocument(); + + // the splitpane itself + var splitpane = new qx.ui.splitpane.HorizontalSplitPane("1*", "2*"); + splitpane.setEdge(0); + splitpane.setLiveResize(true); + frame.add(splitpane); + + // left Widget + var leftWidget = new qx.ui.form.TextArea("LeftWidget"); + leftWidget.setWrap(true); + leftWidget.setBackgroundColor(new qx.renderer.color.Color("white")); + leftWidget.setWidth("100%"); + leftWidget.setHeight("100%"); + + // rightWidget (another splitpane) + var rightWidget = new qx.ui.splitpane.VerticalSplitPane; + rightWidget.setHeight("100%"); + rightWidget.setWidth("100%"); + rightWidget.setLiveResize(true); + + // add widgets to splitpane + splitpane.addLeft(leftWidget); + splitpane.addRight(rightWidget); + + + + // right top widget + var topWidget = new qx.ui.form.TextArea("Right Top Widget"); + topWidget.setBackgroundColor(new qx.renderer.color.Color("white")); + topWidget.setHeight("100%"); + topWidget.setWidth("100%"); + + // right bottom widget + var bottomWidget = new qx.ui.embed.Iframe("http://www.qooxdoo.org"); + bottomWidget.setHeight("100%"); + bottomWidget.setWidth("100%"); + + // add widgets to right splitpane + rightWidget.addTop(topWidget); + rightWidget.addBottom(bottomWidget); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/SplitPane_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/SplitPane_2.html new file mode 100644 index 0000000000..5041e62928 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/SplitPane_2.html @@ -0,0 +1,75 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for extra slim Splitpane, with holding knobs.</p> + </div> + + <script type="text/javascript"> + + qx.core.Init.getInstance().defineMain(function() + { + var frame = new qx.ui.layout.CanvasLayout; + frame.setLocation(20, 48); + frame.setBottom(48); + frame.setRight(300); + frame.setBackgroundColor("#134275"); + frame.setPadding(20); + frame.addToDocument(); + + // the splitpane itself + var splitpane = new qx.ui.splitpane.HorizontalSplitPane("1*", "2*"); + splitpane.setEdge(0); + splitpane.setSplitterSize(1); + splitpane.setShowKnob(true); + frame.add(splitpane); + + // left Widget + var leftWidget = new qx.ui.form.TextArea("LeftWidget"); + leftWidget.setWrap(true); + leftWidget.setBackgroundColor(new qx.renderer.color.Color("white")); + leftWidget.setWidth("100%"); + leftWidget.setHeight("100%"); + + // rightWidget (another splitpane) + var rightWidget = new qx.ui.splitpane.VerticalSplitPane; + rightWidget.setHeight("100%"); + rightWidget.setWidth("100%"); + rightWidget.setSplitterSize(1); + rightWidget.setShowKnob(true); + + + // add widgets to splitpane + splitpane.addLeft(leftWidget); + splitpane.addRight(rightWidget); + + + + // right top widget + var topWidget = new qx.ui.form.TextArea("Right Top Widget"); + topWidget.setBackgroundColor(new qx.renderer.color.Color("white")); + topWidget.setHeight("100%"); + topWidget.setWidth("100%"); + + // right bottom widget + var bottomWidget = new qx.ui.embed.Iframe("http://www.qooxdoo.org"); + bottomWidget.setHeight("100%"); + bottomWidget.setWidth("100%"); + + // add widgets to right splitpane + rightWidget.addTop(topWidget); + rightWidget.addBottom(bottomWidget); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TabView_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TabView_1.html new file mode 100644 index 0000000000..caaf10d027 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TabView_1.html @@ -0,0 +1,156 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tabbar implementation.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var tf1 = new qx.ui.pageview.tabview.TabView; + tf1.set({ left: 20, top: 48, right: 335, bottom: 48 }); + + var t1_1 = new qx.ui.pageview.tabview.Button("Edit"); + var t1_2 = new qx.ui.pageview.tabview.Button("Find"); + var t1_3 = new qx.ui.pageview.tabview.Button("Backup"); + + + t1_2.setChecked(true); + + tf1.getBar().add(t1_1, t1_2, t1_3); + + var p1_1 = new qx.ui.pageview.tabview.Page(t1_1); + var p1_2 = new qx.ui.pageview.tabview.Page(t1_2); + var p1_3 = new qx.ui.pageview.tabview.Page(t1_3); + + tf1.getPane().add(p1_1, p1_2, p1_3); + + var f2 = new qx.ui.form.TextField("Find Anywhere"); + var f3 = new qx.ui.form.TextField("Backup Input"); + + p1_2.add(f2); + p1_3.add(f3); + + var c1 = new qx.ui.form.CheckBox("Place bar on top"); + var c2 = new qx.ui.form.CheckBox("Align tabs to left"); + + c1.setTop(0); + c1.setChecked(true); + + c2.setTop(20); + c2.setChecked(true); + + p1_1.add(c1, c2); + + c1.addEventListener("changeChecked", function(e) { + tf1.setPlaceBarOnTop(e.getData()); + }); + + c2.addEventListener("changeChecked", function(e) { + tf1.setAlignTabsToLeft(e.getData()); + }); + + + + + var tf2 = new qx.ui.pageview.tabview.TabView; + + tf2.set({ left: 0, top: 50, right: 0, bottom: 0 }); + + + + var t2_1 = new qx.ui.pageview.tabview.Button("Search for Files", "icon/16/actions/document-open.png"); + var t2_2 = new qx.ui.pageview.tabview.Button("Search the Web", "icon/16/categories/applications-internet.png"); + var t2_3 = new qx.ui.pageview.tabview.Button("Search for Text", "icon/16/categories/applications.png"); + var t2_4 = new qx.ui.pageview.tabview.Button("Search for Persons", "icon/16/apps/accessories-archiver.png"); + var t2_5 = new qx.ui.pageview.tabview.Button("Search in Mails", "icon/16/apps/internet-email-client.png"); + + t2_1.setChecked(true); + + tf2.getBar().add(t2_1, t2_2, t2_3, t2_4, t2_5); + + var p2_1 = new qx.ui.pageview.tabview.Page(t2_1); + var p2_2 = new qx.ui.pageview.tabview.Page(t2_2); + var p2_3 = new qx.ui.pageview.tabview.Page(t2_3); + var p2_4 = new qx.ui.pageview.tabview.Page(t2_4); + var p2_5 = new qx.ui.pageview.tabview.Page(t2_5); + + tf2.getPane().add(p2_1, p2_2, p2_3, p2_4, p2_5); + + var t2_1 = new qx.ui.form.TextField("Files..."); + var t2_2 = new qx.ui.form.TextField("Web..."); + var t2_3 = new qx.ui.form.TextField("Printers..."); + var t2_4 = new qx.ui.form.TextField("Persons..."); + var t2_5 = new qx.ui.form.TextField("Mails..."); + + t2_1.set({ top: 2, left: 0, width: 140 }); + t2_2.set({ top: 2, left: 0, width: 140 }); + t2_3.set({ top: 2, left: 0, width: 140 }); + t2_4.set({ top: 2, left: 0, width: 140 }); + t2_5.set({ top: 2, left: 0, width: 140 }); + + p2_1.add(t2_1); + p2_2.add(t2_2); + p2_3.add(t2_3); + p2_4.add(t2_4); + p2_5.add(t2_5); + + var b2_1 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + var b2_2 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + var b2_3 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + var b2_4 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + var b2_5 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + + b2_1.set({ top: 0, left: 150 }); + b2_2.set({ top: 0, left: 150 }); + b2_3.set({ top: 0, left: 150 }); + b2_4.set({ top: 0, left: 150 }); + b2_5.set({ top: 0, left: 150 }); + + p2_1.add(b2_1); + p2_2.add(b2_2); + p2_3.add(b2_3); + p2_4.add(b2_4); + p2_5.add(b2_5); + + function dosearch(e) { + alert("Searching..."); + }; + + b2_1.addEventListener("click", dosearch); + b2_2.addEventListener("click", dosearch); + b2_3.addEventListener("click", dosearch); + b2_4.addEventListener("click", dosearch); + b2_5.addEventListener("click", dosearch); + + + + + p1_2.add(tf2); + + + + + + + d.add(tf1); + + + t1_1.setEnabled(false); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TabView_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TabView_2.html new file mode 100644 index 0000000000..2e1fea67cb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TabView_2.html @@ -0,0 +1,127 @@ +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + </head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tabbar implementation.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var tf1 = new qx.ui.pageview.tabview.TabView; + tf1.set({ left: 20, top: 48, right: 335, bottom: 48 }); + + var t1_1 = new qx.ui.pageview.tabview.Button("Edit"); + var t1_2 = new qx.ui.pageview.tabview.Button("Find"); + var t1_3 = new qx.ui.pageview.tabview.Button("Backup"); + var t1_4 = new qx.ui.pageview.tabview.Button("System"); + var t1_5 = new qx.ui.pageview.tabview.Button("Tools"); + var t1_6 = new qx.ui.pageview.tabview.Button("Infos"); + + // set tab 1 active + t1_1.setChecked(true); + + // add close images to tab + t1_1.setShowCloseButton(true); + t1_2.setShowCloseButton(true); + t1_3.setShowCloseButton(true); + t1_4.setShowCloseButton(true); + t1_5.setShowCloseButton(true); + t1_6.setShowCloseButton(true); + + + // modify the default images + t1_2.setCloseButtonImage("icon/16/status/dialog-error.png"); + t1_4.setCloseButtonImage("icon/16/actions/dialog-ok.png"); + + // add an eventlistener on the buttons + t1_1.addEventListener("closetab", _ontabclose); + t1_2.addEventListener("closetab", _ontabclose); + t1_3.addEventListener("closetab", _ontabclose); + t1_4.addEventListener("closetab", _ontabclose); + t1_5.addEventListener("closetab", _ontabclose); + t1_6.addEventListener("closetab", _ontabclose); + + + + // this handler gets called if a tab-button fires a "closetab" event + function _ontabclose(e){ + var btn = e.getData(); + + var pagesArray = tf1.getPane().getChildren(); + var pageSearched = null; + + for(var i = 0, l = pagesArray.length; i < l; i++){ + var tmpPage = pagesArray[i]; + if(tmpPage.getButton() === btn){ + pageSearched = tmpPage; + } + } + if(pageSearched){ + + var itemsList = tf1.getBar().getChildren(); + var lengthList = itemsList.length; + var btnIndex = itemsList.indexOf(btn); + + // never remove the last tab + if( lengthList > 1 ) { + + // Select another tab + if (btnIndex < lengthList-1 ){ + itemsList[btnIndex+1].setChecked(true); + } + else { + itemsList[btnIndex-1].setChecked(true); + } + + btn.getManager().remove(btn); + tf1.getBar().remove(btn); + + tf1.getPane().remove(pageSearched); + + pageSearched.dispose(); + btn.dispose(); + } else { + alert("Last Tab won't be removed!"); + } + } + + e.stopPropagation(); + } + + tf1.getBar().add(t1_1, t1_2, t1_3, t1_4, t1_5, t1_6); + + var p1_1 = new qx.ui.pageview.tabview.Page(t1_1); + var p1_2 = new qx.ui.pageview.tabview.Page(t1_2); + var p1_3 = new qx.ui.pageview.tabview.Page(t1_3); + var p1_4 = new qx.ui.pageview.tabview.Page(t1_4); + var p1_5 = new qx.ui.pageview.tabview.Page(t1_5); + var p1_6 = new qx.ui.pageview.tabview.Page(t1_6); + + p1_1.setBackgroundColor("green"); + p1_2.setBackgroundColor("red"); + p1_3.setBackgroundColor("blue"); + p1_4.setBackgroundColor("black"); + p1_5.setBackgroundColor("yellow"); + p1_6.setBackgroundColor("orange"); + + tf1.getPane().add(p1_1, p1_2, p1_3, p1_4, p1_5, p1_6); + + d.add(tf1); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Table_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Table_1.html new file mode 100644 index 0000000000..3accffc630 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Table_1.html @@ -0,0 +1,107 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A table with virtual scrolling, model-view-controller, renderers, + editing, sorting, column resizing, column reordering, + column hiding.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var main = new qx.ui.layout.VerticalBoxLayout(); + main.set({ left:10, top:30, right:300, bottom:30, spacing:5 }); + + var nextId = 0; + var createRandomRows = function(rowCount) { + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < rowCount; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ nextId++, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + return rowData; + }; + + // Create the initial data + var rowData = createRandomRows(50); + + // Add some encoding relevant stuff + rowData[15][1] = "<b>A html & entities escaping test</b>"; + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ width:"100%", height:"1*", border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + setColumnWidth(0, 80); + setColumnWidth(1, 200); + setColumnWidth(2, 150); + }; + main.add(table); + + var buttonBar = new qx.ui.layout.HorizontalBoxLayout(); + buttonBar.set({ width:"100%", height:"auto", spacing:5 }); + main.add(buttonBar); + + var button = new qx.ui.form.Button("Change row with ID 10"); + button.addEventListener("execute", function(evt) { + var rowData = createRandomRows(1); + for (var i = 1; i < tableModel.getColumnCount(); i++) { + tableModel.setValue(i, 10, rowData[0][i]); + } + this.info("Row 10 changed"); + }); + buttonBar.add(button); + + var button = new qx.ui.form.Button("Add 10 rows"); + button.addEventListener("execute", function(evt) { + var rowData = createRandomRows(10); + tableModel.addRows(rowData); + this.info("10 rows added"); + }); + buttonBar.add(button); + + var button = new qx.ui.form.Button("Remove 5 rows"); + button.addEventListener("execute", function(evt) { + var rowCount = tableModel.getRowCount(); + tableModel.removeRows(rowCount-5, 5); + this.info("5 rows removed"); + }); + buttonBar.add(button); + + var checkBox = new qx.ui.form.CheckBox("keepFirstVisibleRowComplete", null, null, table.getKeepFirstVisibleRowComplete()); + checkBox.setToolTip(new qx.ui.popup.ToolTip("Whether the the first visible row should be rendered completely when scrolling.")); + checkBox.addEventListener("changeChecked", function(evt) { + table.setKeepFirstVisibleRowComplete(checkBox.getChecked()); + this.info("Set keepFirstVisibleRowComplete to: " + checkBox.getChecked()); + }); + buttonBar.add(checkBox); + + d.add(main); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Table_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Table_2.html new file mode 100644 index 0000000000..372648cd8f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Table_2.html @@ -0,0 +1,50 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A table with fixed columns.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 100; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ left:10, top:30, width:350, height:300, border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + }; + + d.add(table); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_1.html new file mode 100644 index 0000000000..a44c023c34 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_1.html @@ -0,0 +1,252 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Introduce all classes needed for creating real qx.ui.toolbar.ToolBars. This includes qx.ui.toolbar.ToolBars, + qx.ui.toolbar.ToolBarParts, qx.ui.toolbar.Separator and qx.ui.toolbar.ToolBarButtons.</p> + + <p>The qx.ui.toolbar.ToolBarButtons and QxRadioButtons in this example are beautifully + decoupled by "global" qx.event.type.DataEvent.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var tb = new qx.ui.toolbar.ToolBar; + with(tb) + { + setTop(48); + setLeft(20); + setRight(335); + + // setWidth("auto"); + }; + + var btns1 = [ + { type : "button", icon : "document-new", text : "New" }, + { type : "separator" }, + { type : "button", icon : "edit-copy", text : "Copy" }, + { type : "button", icon : "edit-cut", text : "Cut" }, + { type : "button", icon : "edit-paste", text : "Paste" } + ]; + + var btns2 = [ + { type : "button", icon : "go-up", text : "Upload" }, + { type : "button", icon : "go-down", text : "Download" } + ]; + + var btns3 = [ + { type : "button", icon : "help-about", text : "Help" } + ]; + + var bars = [ btns1, btns2, btns3 ]; + + function changeLayout(e) { + this.setShow(e.getData()); + }; + + function changeSize(e) { + var v = e.getData(); + var o = v == 22 ? 32 : 22; + + this.setIcon(this.getIcon().replace(o, v)); + }; + + function buttonExecute() { this.debug("Executed: " + this.getLabel()); }; + + var useParts = true; + + + for (var j=0; j<bars.length; j++) + { + var btns = bars[j]; + + if (useParts) { + var tbp = new qx.ui.toolbar.Part; + }; + + for (var i=0; i<btns.length; i++) + { + var btn = btns[i]; + + switch(btn.type) + { + case "separator": + var o = new qx.ui.toolbar.Separator; + break; + + case "button": + var o = new qx.ui.toolbar.Button(btn.text, "icon/22/actions/" + btn.icon + ".png"); + + // beautiful decoupling: toolbar buttons don't know about radio boxes + + d.addEventListener("changeLayout", changeLayout, o); + d.addEventListener("changeSize", changeSize, o); + + o.addEventListener("execute", buttonExecute); + break; + }; + + if (useParts) + { + tbp.add(o); + } + else + { + tb.add(o); + }; + }; + + if (useParts) { + tb.add(tbp); + }; + }; + + d.add(tb); + + + + + + + var rd1 = new qx.ui.form.RadioButton("Show Icons and Label", "both"); + var rd2 = new qx.ui.form.RadioButton("Show Icons", "icon"); + var rd3 = new qx.ui.form.RadioButton("Show Label", "label"); + + with(rd1) + { + setTop(140); + setLeft(20); + setChecked(true); + }; + + with(rd2) + { + setTop(160); + setLeft(20); + }; + + with(rd3) + { + setTop(180); + setLeft(20); + }; + + + var rbm = new qx.manager.selection.RadioManager(); + + rbm.add(rd1); + rbm.add(rd2); + rbm.add(rd3); + + + // beautiful decoupling: radio boxes don't know about toolbar buttons + rbm.addEventListener("changeSelected", function(e) { + d.dispatchEvent( new qx.event.type.DataEvent("changeLayout", e.getData().getValue() ) ); + }); + + d.add(rd1, rd2, rd3); + + + + // Alignment + var ra1 = new qx.ui.form.RadioButton("Left Aligned", "left"); + var ra2 = new qx.ui.form.RadioButton("Centered", "center"); + var ra3 = new qx.ui.form.RadioButton("Right Aligned", "right"); + + with(ra1) + { + setTop(140); + setLeft(220); + setChecked(true); + }; + + with(ra2) + { + setTop(160); + setLeft(220); + }; + + with(ra3) + { + setTop(180); + setLeft(220); + }; + + + var ram = new qx.manager.selection.RadioManager(); + + ram.add(ra1); + ram.add(ra2); + ram.add(ra3); + + d.add(ra1, ra2, ra3); + + ram.addEventListener("changeSelected", function(e) { + tb.setHorizontalChildrenAlign(e.getData().getValue()); + }); + + + + + // Icon Sizes + var b3 = new qx.ui.form.Button("Icons: 22 Pixel", "icon/16/actions/format-color.png"); + + with(b3) + { + setTop(140); + setLeft(420); + setHorizontalAlign("center"); + }; + + b3.addEventListener("execute", function(e) { + d.dispatchEvent(new qx.event.type.DataEvent("changeSize", 22)); + }); + + var b4 = new qx.ui.form.Button("Icons: 32 Pixel", "icon/16/actions/format-color.png"); + + with(b4) + { + setTop(170); + setLeft(420); + setHorizontalAlign("center"); + }; + + b4.addEventListener("execute", function(e) { + d.dispatchEvent(new qx.event.type.DataEvent("changeSize", 32)); + }); + + d.add(b3, b4); + + + + + + // Icon & Color Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 248); + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 248); + + + + /* + Test for cloning support + + tb2 = tb.clone(true); + tb2.setTop(400); + */ + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_2.html new file mode 100644 index 0000000000..9e060ebc68 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_2.html @@ -0,0 +1,269 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Introducing qx.ui.toolbar.CheckBox and qx.ui.toolbar.RadioButton.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function changeLayout(e) { + this.setShow(e.getData()); + }; + + function changeSize(e) { + var v = e.getData(); + var o = v == 22 ? 32 : 22; + + this.setIcon(this.getIcon().replace(o, v)); + }; + + var tb = new qx.ui.toolbar.ToolBar; + with(tb) + { + setTop(48); + setLeft(20); + setRight(335); + setParent(d); + }; + + + var tbp1 = new qx.ui.toolbar.Part; + tb.add(tbp1); + + var tbp2 = new qx.ui.toolbar.Part; + tb.add(tbp2); + + var tbp3 = new qx.ui.toolbar.Part; + tb.add(tbp3); + + var tbp4 = new qx.ui.toolbar.Part; + tb.add(tbp4); + + + + // Default + var tbd1 = new qx.ui.toolbar.Button("Default", "icon/22/actions/document-new.png"); + tbp1.add(tbd1); + d.addEventListener("changeLayout", changeLayout, tbd1); + d.addEventListener("changeSize", changeSize, tbd1); + + tbd1._marker = true; + + tbp1.setDisplay(false); + tbd1.setDisplay(false); + + + + // Checkbox + var tbc1 = new qx.ui.toolbar.CheckBox("Check", "icon/22/apps/preferences.png", true); + tbp2.add(tbc1); + d.addEventListener("changeLayout", changeLayout, tbc1); + d.addEventListener("changeSize", changeSize, tbc1); + + + + // Radio + var tbr1 = new qx.ui.toolbar.RadioButton("Radio1", "icon/22/actions/system-run.png"); + tbp3.add(tbr1); + d.addEventListener("changeLayout", changeLayout, tbr1); + d.addEventListener("changeSize", changeSize, tbr1); + + var tbr2 = new qx.ui.toolbar.RadioButton("Radio2", "icon/22/actions/view-pane-detailed.png", true); + tbp3.add(tbr2); + d.addEventListener("changeLayout", changeLayout, tbr2); + d.addEventListener("changeSize", changeSize, tbr2); + + var tbr3 = new qx.ui.toolbar.RadioButton("Radio3", "icon/22/actions/view-pane-icon.png"); + tbp3.add(tbr3); + d.addEventListener("changeLayout", changeLayout, tbr3); + d.addEventListener("changeSize", changeSize, tbr3); + + // Radio Mananger + var tbr_manager = new qx.manager.selection.RadioManager(null, [tbr1, tbr2, tbr3]); + + + + + // Radio + var tbs1 = new qx.ui.toolbar.RadioButton("Radio1", "icon/22/actions/view-pane-tree.png"); + tbp4.add(tbs1); + tbs1.setDisableUncheck(true); + d.addEventListener("changeLayout", changeLayout, tbs1); + d.addEventListener("changeSize", changeSize, tbs1); + + var tbs2 = new qx.ui.toolbar.RadioButton("Radio2", "icon/22/actions/view-pane-detailed.png", true); + tbp4.add(tbs2); + tbs2.setDisableUncheck(true); + d.addEventListener("changeLayout", changeLayout, tbs2); + d.addEventListener("changeSize", changeSize, tbs2); + + var tbs3 = new qx.ui.toolbar.RadioButton("Radio3", "icon/22/actions/view-pane-icon.png"); + tbp4.add(tbs3); + tbs3.setDisableUncheck(true); + d.addEventListener("changeLayout", changeLayout, tbs3); + d.addEventListener("changeSize", changeSize, tbs3); + + // Radio Mananger + var tbs_manager = new qx.manager.selection.RadioManager(null, [tbs1, tbs2, tbs3]); + + + + + var rd1 = new qx.ui.form.RadioButton("Show Icons and Label", "both"); + var rd2 = new qx.ui.form.RadioButton("Show Icons", "icon"); + var rd3 = new qx.ui.form.RadioButton("Show Label", "label"); + + with(rd1) + { + setTop(140); + setLeft(20); + }; + + with(rd2) + { + setTop(160); + setLeft(20); + }; + + with(rd3) + { + setTop(180); + setLeft(20); + }; + + + var rbm = new qx.manager.selection.RadioManager(); + + rbm.add(rd1); + rbm.add(rd2); + rbm.add(rd3); + + // beautiful decoupling: radio boxes don't know about toolbar buttons + rbm.addEventListener("changeSelected", function(e) + { + d.dispatchEvent( new qx.event.type.DataEvent("changeLayout", e.getData().getValue() ) ); + }); + + d.add(rd1, rd2, rd3); + + + // apply default layout + rd1.setChecked(true); + + + + + + // Alignment + var ra1 = new qx.ui.form.RadioButton("Left Aligned", "left"); + var ra2 = new qx.ui.form.RadioButton("Centered", "center"); + var ra3 = new qx.ui.form.RadioButton("Right Aligned", "right"); + + with(ra1) + { + setTop(140); + setLeft(220); + setChecked(true); + }; + + with(ra2) + { + setTop(160); + setLeft(220); + }; + + with(ra3) + { + setTop(180); + setLeft(220); + }; + + + var ram = new qx.manager.selection.RadioManager(); + + ram.add(ra1); + ram.add(ra2); + ram.add(ra3); + + d.add(ra1, ra2, ra3); + + ram.addEventListener("changeSelected", function(e) { + tb.setHorizontalChildrenAlign(e.getData().getValue()); + }); + + + + + // Icon Sizes + var b3 = new qx.ui.form.Button("Icons: 22 Pixel", "icon/16/actions/format-color.png"); + + with(b3) + { + setTop(140); + setLeft(420); + setHorizontalAlign("center"); + }; + + b3.addEventListener("execute", function(e) { + d.dispatchEvent(new qx.event.type.DataEvent("changeSize", 22)); + }); + + var b4 = new qx.ui.form.Button("Icons: 32 Pixel", "icon/16/actions/format-color.png"); + + with(b4) + { + setTop(170); + setLeft(420); + setHorizontalAlign("center"); + }; + + b4.addEventListener("execute", function(e) { + d.dispatchEvent(new qx.event.type.DataEvent("changeSize", 32)); + }); + + d.add(b3, b4); + + + + + + + var chkShowBtn1 = new qx.ui.form.CheckBox("Show First Button"); + + chkShowBtn1.setLocation(20, 500); + chkShowBtn1.addEventListener("changeChecked", function(e) { + tbd1.setDisplay(e.getData()); + }); + + var chkShowPart1 = new qx.ui.form.CheckBox("Show First Part"); + + chkShowPart1.setLocation(220, 500); + chkShowPart1.addEventListener("changeChecked", function(e) { + tbp1.setDisplay(e.getData()); + }); + + d.add(chkShowBtn1, chkShowPart1); + + + + // Icon & Color Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 248); + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 248); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_3.html new file mode 100644 index 0000000000..2cd007f6db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_3.html @@ -0,0 +1,184 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Again a nice example which shows how to use qx.ui.toolbar.ToolBar as a menubar system.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.client.Command(); + c1.addEventListener("execute", function(e) { + this.debug("Execute: " + e.getData().getLabel()); + }); + + + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("New", "icon/16/actions/document-new.png", c1); + var mb1_02 = new qx.ui.menu.Button("Open", "icon/16/actions/document-open.png", c1); + var mb1_03 = new qx.ui.menu.Button("Save", "icon/16/actions/document-save.png", c1); + var mb1_04 = new qx.ui.menu.Button("Save as", "icon/16/actions/document-save-as.png", c1); + var mb1_05 = new qx.ui.menu.Button("Close", "icon/16/actions/document-close.png", c1); + var mb1_06 = new qx.ui.menu.Button("Restore last saved", null, c1); + + m1.add(mb1_01, mb1_02, mb1_03, mb1_04, mb1_05, mb1_06); + + + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("Undo", null, c1); + var mb2_02 = new qx.ui.menu.Button("Redo", null, c1); + var mb2_b1 = new qx.ui.menu.Separator(); + var mb2_03 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", c1); + var mb2_04 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", c1); + var mb2_05 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", c1); + var mb2_06 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", c1); + var mb2_b2 = new qx.ui.menu.Separator(); + var mb2_07 = new qx.ui.menu.Button("Select All", null, c1); + var mb2_08 = new qx.ui.menu.Button("Find", null, c1); + var mb2_09 = new qx.ui.menu.Button("Find Again", null, c1); + + + + + mb2_05.setEnabled(false); + mb2_06.setEnabled(false); + mb2_09.setEnabled(false); + + m2.add(mb2_01, mb2_02, mb2_b1, mb2_03, mb2_04, mb2_05, mb2_06, mb2_b2, mb2_07, mb2_08, mb2_09); + + + var m3 = new qx.ui.menu.Menu; + var m3_suba = new qx.ui.menu.Menu; + var m3_subb = new qx.ui.menu.Menu; + var m3_subc = new qx.ui.menu.Menu; + var m3_subd = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.CheckBox("File List", c1, false); + var mb3_02 = new qx.ui.menu.CheckBox("Syntax Highlighting", c1, true); + var mb3_03 = new qx.ui.menu.CheckBox("Statusbar", c1, true); + var mb3_b1 = new qx.ui.menu.Separator(); + var mb3_04 = new qx.ui.menu.Button("Printer Font", null, null, m3_suba); + var mb3_05 = new qx.ui.menu.Button("Editor Font", null, null, m3_subb); + var mb3_06 = new qx.ui.menu.Button("Export Font", null, null, m3_subc); + var mb3_b2 = new qx.ui.menu.Separator(); + var mb3_07 = new qx.ui.menu.Button("Advanced", null, null, m3_subd); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_b1, mb3_04, mb3_05, mb3_06, mb3_b2, mb3_07); + + var mb3_suba_01 = new qx.ui.menu.Button("Tahoma, 11pt", null, c1); + var mb3_suba_02 = new qx.ui.menu.Button("Tahoma, 12pt", null, c1); + var mb3_suba_03 = new qx.ui.menu.Button("Tahoma, 13pt", null, c1); + var mb3_suba_04 = new qx.ui.menu.Button("Tahoma, 14pt", null, c1); + var mb3_suba_05 = new qx.ui.menu.Button("Tahoma, 15pt", null, c1); + + m3_suba.add(mb3_suba_01, mb3_suba_02, mb3_suba_03, mb3_suba_04, mb3_suba_05); + + var mb3_subb_01 = new qx.ui.menu.Button("Verdana, 11pt", null, c1); + var mb3_subb_02 = new qx.ui.menu.Button("Verdana, 12pt", null, c1); + var mb3_subb_03 = new qx.ui.menu.Button("Verdana, 13pt", null, c1); + var mb3_subb_04 = new qx.ui.menu.Button("Verdana, 14pt", null, c1); + var mb3_subb_05 = new qx.ui.menu.Button("Verdana, 15pt", null, c1); + + m3_subb.add(mb3_subb_01, mb3_subb_02, mb3_subb_03, mb3_subb_04, mb3_subb_05); + + var mb3_subc_01 = new qx.ui.menu.Button("Courier, 11pt", null, c1); + var mb3_subc_02 = new qx.ui.menu.Button("Courier, 12pt", null, c1); + var mb3_subc_03 = new qx.ui.menu.Button("Courier, 13pt", null, c1); + var mb3_subc_04 = new qx.ui.menu.Button("Courier, 14pt", null, c1); + var mb3_subc_05 = new qx.ui.menu.Button("Courier, 15pt", null, c1); + + m3_subc.add(mb3_subc_01, mb3_subc_02, mb3_subc_03, mb3_subc_04, mb3_subc_05); + + var mb3_subd_02_suba = new qx.ui.menu.Menu(); + + var mb3_subd_02_suba_01 = new qx.ui.menu.Button("First", null, c1); + var mb3_subd_02_suba_02 = new qx.ui.menu.Button("Second", null, c1); + var mb3_subd_02_suba_03 = new qx.ui.menu.Button("Third", null, c1); + + mb3_subd_02_suba.add(mb3_subd_02_suba_01, mb3_subd_02_suba_02, mb3_subd_02_suba_03); + + var mb3_subd_01 = new qx.ui.menu.Button("First", null, c1); + var mb3_subd_02 = new qx.ui.menu.Button("Second", null, c1, mb3_subd_02_suba); + var mb3_subd_03 = new qx.ui.menu.Button("Third", null, c1); + + m3_subd.add(mb3_subd_01, mb3_subd_02, mb3_subd_03); + + var m4 = new qx.ui.menu.Menu; + + var m4_suba = new qx.ui.menu.Menu; + + var mb4_01 = new qx.ui.menu.Button("View", null, c1, m4_suba); + var mb4_b1 = new qx.ui.menu.Separator(); + var mb4_02 = new qx.ui.menu.Button("Editor Preferences...", null, c1); + var mb4_03 = new qx.ui.menu.Button("Editor Extensions", null, c1); + var mb4_04 = new qx.ui.menu.Button("Framework Preferences", null, c1); + + m4.add(mb4_01, mb4_b1, mb4_02, mb4_03, mb4_04); + + var mb4_suba_01 = new qx.ui.menu.Button("New Window", null, c1); + var mb4_suba_b1 = new qx.ui.menu.Separator(); + var mb4_suba_02 = new qx.ui.menu.RadioButton("Overlapping", c1, true); + var mb4_suba_03 = new qx.ui.menu.RadioButton("Split Horizontally", c1); + var mb4_suba_04 = new qx.ui.menu.RadioButton("Split Vertically", c1); + var mb4_suba_b2 = new qx.ui.menu.Separator(); + var mb4_suba_05 = new qx.ui.menu.Button("Next Window", null, c1); + var mb4_suba_06 = new qx.ui.menu.Button("Previous Window", null, c1); + + m4_suba.add(mb4_suba_01, mb4_suba_b1, mb4_suba_02, mb4_suba_03, mb4_suba_04, mb4_suba_b2, mb4_suba_05, mb4_suba_06); + + var mb4_manager = new qx.manager.selection.RadioManager("windowMode", [ mb4_suba_02, mb4_suba_03, mb4_suba_04 ]); + + + var m5 = new qx.ui.menu.Menu; + + var mb5_01 = new qx.ui.menu.Button("Help", null, c1); + var mb5_02 = new qx.ui.menu.Button("About", null, c1); + + m5.add(mb5_01, mb5_02); + + d.add(m1, m2, m3, m3_suba, m3_subb, m3_subc, m3_subd, mb3_subd_02_suba, m4, m4_suba, m5); + + + var mb1 = new qx.ui.toolbar.ToolBar; + + mb1.setTop(48); + mb1.setRight(335); + mb1.setLeft(20); + + var mbb1 = new qx.ui.toolbar.MenuButton("File", m1); + var mbb2 = new qx.ui.toolbar.MenuButton("Edit", m2); + var mbb3 = new qx.ui.toolbar.MenuButton("View", m3); + var mbb4 = new qx.ui.toolbar.MenuButton("Options", m4); + var mbb5 = new qx.ui.toolbar.MenuButton("Help", m5); + + mb1.add(mbb1, mbb2, mbb3, mbb4, mbb5); + + d.add(mb1); + + + + + // Icon & Color Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 348); + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 348); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_4.html new file mode 100644 index 0000000000..69d91c125b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolBar_4.html @@ -0,0 +1,196 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Again a nice example which shows how to use qx.ui.toolbar.ToolBar as a menubar system.</p> + <p>Added some parts and a new flex zone which aligns the help button to the right edge</p> + <p>Added some image and a qx.ui.toolbar.CheckBox, you can event combine all these features as you can easily see here.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.client.Command(); + c1.addEventListener("execute", function(e) { + this.debug("Execute: " + e.getData().getLabel()); + }); + + + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("New", null, c1); + var mb1_02 = new qx.ui.menu.Button("Open", null, c1); + var mb1_03 = new qx.ui.menu.Button("Save", null, c1); + var mb1_04 = new qx.ui.menu.Button("Save as", null, c1); + var mb1_05 = new qx.ui.menu.Button("Close", null, c1); + var mb1_06 = new qx.ui.menu.Button("Restore last saved", null, c1); + + m1.add(mb1_01, mb1_02, mb1_03, mb1_04, mb1_05, mb1_06); + + + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("Undo", null, c1); + var mb2_02 = new qx.ui.menu.Button("Redo", null, c1); + var mb2_b1 = new qx.ui.menu.Separator(); + var mb2_03 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", c1); + var mb2_04 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", c1); + var mb2_05 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", c1); + var mb2_06 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", c1); + var mb2_b2 = new qx.ui.menu.Separator(); + var mb2_07 = new qx.ui.menu.Button("Select All", null, c1); + var mb2_08 = new qx.ui.menu.Button("Find", null, c1); + var mb2_09 = new qx.ui.menu.Button("Find Again", null, c1); + + + + + mb2_05.setEnabled(false); + mb2_06.setEnabled(false); + mb2_09.setEnabled(false); + + m2.add(mb2_01, mb2_02, mb2_b1, mb2_03, mb2_04, mb2_05, mb2_06, mb2_b2, mb2_07, mb2_08, mb2_09); + + + var m3 = new qx.ui.menu.Menu; + var m3_suba = new qx.ui.menu.Menu; + var m3_subb = new qx.ui.menu.Menu; + var m3_subc = new qx.ui.menu.Menu; + var m3_subd = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.CheckBox("File List", c1, false); + var mb3_02 = new qx.ui.menu.CheckBox("Syntax Highlighting", c1, true); + var mb3_03 = new qx.ui.menu.CheckBox("Statusbar", c1, true); + var mb3_b1 = new qx.ui.menu.Separator(); + var mb3_04 = new qx.ui.menu.Button("Printer Font", null, null, m3_suba); + var mb3_05 = new qx.ui.menu.Button("Editor Font", null, null, m3_subb); + var mb3_06 = new qx.ui.menu.Button("Export Font", null, null, m3_subc); + var mb3_b2 = new qx.ui.menu.Separator(); + var mb3_07 = new qx.ui.menu.Button("Advanced", null, null, m3_subd); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_b1, mb3_04, mb3_05, mb3_06, mb3_b2, mb3_07); + + var mb3_suba_01 = new qx.ui.menu.Button("Tahoma, 11pt", null, c1); + var mb3_suba_02 = new qx.ui.menu.Button("Tahoma, 12pt", null, c1); + var mb3_suba_03 = new qx.ui.menu.Button("Tahoma, 13pt", null, c1); + var mb3_suba_04 = new qx.ui.menu.Button("Tahoma, 14pt", null, c1); + var mb3_suba_05 = new qx.ui.menu.Button("Tahoma, 15pt", null, c1); + + m3_suba.add(mb3_suba_01, mb3_suba_02, mb3_suba_03, mb3_suba_04, mb3_suba_05); + + var mb3_subb_01 = new qx.ui.menu.Button("Verdana, 11pt", null, c1); + var mb3_subb_02 = new qx.ui.menu.Button("Verdana, 12pt", null, c1); + var mb3_subb_03 = new qx.ui.menu.Button("Verdana, 13pt", null, c1); + var mb3_subb_04 = new qx.ui.menu.Button("Verdana, 14pt", null, c1); + var mb3_subb_05 = new qx.ui.menu.Button("Verdana, 15pt", null, c1); + + m3_subb.add(mb3_subb_01, mb3_subb_02, mb3_subb_03, mb3_subb_04, mb3_subb_05); + + var mb3_subc_01 = new qx.ui.menu.Button("Courier, 11pt", null, c1); + var mb3_subc_02 = new qx.ui.menu.Button("Courier, 12pt", null, c1); + var mb3_subc_03 = new qx.ui.menu.Button("Courier, 13pt", null, c1); + var mb3_subc_04 = new qx.ui.menu.Button("Courier, 14pt", null, c1); + var mb3_subc_05 = new qx.ui.menu.Button("Courier, 15pt", null, c1); + + m3_subc.add(mb3_subc_01, mb3_subc_02, mb3_subc_03, mb3_subc_04, mb3_subc_05); + + var mb3_subd_02_suba = new qx.ui.menu.Menu(); + + var mb3_subd_02_suba_01 = new qx.ui.menu.Button("First", null, c1); + var mb3_subd_02_suba_02 = new qx.ui.menu.Button("Second", null, c1); + var mb3_subd_02_suba_03 = new qx.ui.menu.Button("Third", null, c1); + + mb3_subd_02_suba.add(mb3_subd_02_suba_01, mb3_subd_02_suba_02, mb3_subd_02_suba_03); + + var mb3_subd_01 = new qx.ui.menu.Button("First", null, c1); + var mb3_subd_02 = new qx.ui.menu.Button("Second", null, c1, mb3_subd_02_suba); + var mb3_subd_03 = new qx.ui.menu.Button("Third", null, c1); + + m3_subd.add(mb3_subd_01, mb3_subd_02, mb3_subd_03); + + var m4 = new qx.ui.menu.Menu; + + var m4_suba = new qx.ui.menu.Menu; + + var mb4_01 = new qx.ui.menu.Button("View", null, c1, m4_suba); + var mb4_b1 = new qx.ui.menu.Separator(); + var mb4_02 = new qx.ui.menu.Button("Editor Preferences...", null, c1); + var mb4_03 = new qx.ui.menu.Button("Editor Extensions", null, c1); + var mb4_04 = new qx.ui.menu.Button("Framework Preferences", null, c1); + + m4.add(mb4_01, mb4_b1, mb4_02, mb4_03, mb4_04); + + var mb4_suba_01 = new qx.ui.menu.Button("New Window", null, c1); + var mb4_suba_b1 = new qx.ui.menu.Separator(); + var mb4_suba_02 = new qx.ui.menu.RadioButton("Overlapping", c1, true); + var mb4_suba_03 = new qx.ui.menu.RadioButton("Split Horizontally", c1); + var mb4_suba_04 = new qx.ui.menu.RadioButton("Split Vertically", c1); + var mb4_suba_b2 = new qx.ui.menu.Separator(); + var mb4_suba_05 = new qx.ui.menu.Button("Next Window", null, c1); + var mb4_suba_06 = new qx.ui.menu.Button("Previous Window", null, c1); + + m4_suba.add(mb4_suba_01, mb4_suba_b1, mb4_suba_02, mb4_suba_03, mb4_suba_04, mb4_suba_b2, mb4_suba_05, mb4_suba_06); + + var mb4_manager = new qx.manager.selection.RadioManager("windowMode", [ mb4_suba_02, mb4_suba_03, mb4_suba_04 ]); + + + var m5 = new qx.ui.menu.Menu; + + var mb5_01 = new qx.ui.menu.Button("Help", null, c1); + var mb5_02 = new qx.ui.menu.Button("About", null, c1); + + m5.add(mb5_01, mb5_02); + + d.add(m1, m2, m3, m3_suba, m3_subb, m3_subc, m3_subd, mb3_subd_02_suba, m4, m4_suba, m5); + + + var mb1 = new qx.ui.toolbar.ToolBar; + + mb1.setTop(48); + mb1.setRight(335); + mb1.setLeft(20); + + var mp1 = new qx.ui.toolbar.Part; + var mp2 = new qx.ui.toolbar.Part; + var mp3 = new qx.ui.toolbar.Part; + + mb1.add(mp1, mp2, new qx.ui.basic.HorizontalSpacer, mp3); + + var mbb1 = new qx.ui.toolbar.MenuButton("File", m1, "icon/16/actions/document-new.png"); + var mbb2 = new qx.ui.toolbar.MenuButton("Edit", m2, "icon/16/actions/edit.png"); + var mbb3 = new qx.ui.toolbar.MenuButton("View", m3, "icon/16/apps/preferences-desktop-wallpaper.png"); + var mbb4 = new qx.ui.toolbar.MenuButton("Options", m4, "icon/16/apps/system-software-update.png"); + var mbb5 = new qx.ui.toolbar.MenuButton("Help", m5, "icon/16/actions/help-about.png"); + + var tbb1 = new qx.ui.toolbar.CheckBox("Checkbox", "icon/16/apps/office-organizer.png", true); + + mp1.add(mbb1, mbb2); + mp2.add(mbb3, mbb4, tbb1); + mp3.add(mbb5); + + d.add(mb1); + + + + + // Icon & Color Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 348); + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 348); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolTip_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolTip_1.html new file mode 100644 index 0000000000..8cbf4b9855 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/ToolTip_1.html @@ -0,0 +1,111 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for QxToolTips. Each qx.ui.popup.ToolTip could be assigned to any + instance of qx.ui.core.Widget. You could also use one qx.ui.popup.ToolTip instance + for multiple QxWidgets (to show the same tooltip any multiple items).</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.basic.Atom("Hover me"); + with(c1) + { + setTop(48); + setLeft(20); + setBackgroundColor(new qx.renderer.color.Color("#BDD2EF")); + setWidth(100); + setHeight(100); + setTabIndex(1); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + }; + d.add(c1); + + + + var c2 = new qx.ui.basic.Atom("Hover me"); + with(c2) + { + setTop(48); + setLeft(140); + setBackgroundColor(new qx.renderer.color.Color("#D1DFAD")); + setWidth(100); + setHeight(100); + setTabIndex(1); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + }; + d.add(c2); + + + var c3 = new qx.ui.basic.Atom("Hover me"); + with(c3) + { + setTop(48); + setLeft(260); + setBackgroundColor(new qx.renderer.color.Color("#D1A4AD")); + setWidth(100); + setHeight(100); + setTabIndex(1); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + }; + d.add(c3); + + + var c4 = new qx.ui.basic.Atom("Hover me"); + with(c4) + { + setTop(48); + setLeft(380); + setBackgroundColor(new qx.renderer.color.Color("#F5E0BB")); + setWidth(100); + setHeight(100); + setTabIndex(1); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + }; + d.add(c4); + + + var c5 = new qx.ui.basic.Atom("Hover me", "icon/32/actions/format-color.png"); + with(c5) + { + setTop(248); + setLeft(20); + setBackgroundColor(new qx.renderer.color.Color("#F5E0BB")); + setTabIndex(1); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + setPadding(4); + }; + d.add(c5); + + + var tt1 = new qx.ui.popup.ToolTip("Hello World #1"); + c1.setToolTip(tt1); + c2.setToolTip(tt1); + + var tt2 = new qx.ui.popup.ToolTip(null, "icon/16/actions/help-about.png"); + c3.setToolTip(tt2); + + var tt3 = new qx.ui.popup.ToolTip("Hello World #3", "icon/16/actions/help-about.png"); + c4.setToolTip(tt3); + + var tt4 = new qx.ui.popup.ToolTip("Such a great tooltip with a<br/>(show) timeout of 50ms.", "icon/32/apps/graphics-snapshot.png"); + c5.setToolTip(tt4); + tt4.setShowInterval(50); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_1.html new file mode 100644 index 0000000000..ac037d7711 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_1.html @@ -0,0 +1,235 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Shows a tree, with user-defined icons for some nodes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Root"); + var t = new qx.ui.treefullcontrol.Tree(trs); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + // One icon for selected and one for unselected states + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Desktop", "icon/16/places/user-desktop.png", "icon/16/apps/accessories-dictionary.png"); + var te1 = new qx.ui.treefullcontrol.TreeFolder(trs); + t.add(te1); + + desktop = te1; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Files"); + var te1_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Workspace"); + var te1_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Network"); + var te1_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Trash"); + var te1_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + // One icon specified, and used for both selected unselected states + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Windows (C:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_1 = new qx.ui.treefullcontrol.TreeFile(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Documents (D:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_2 = new qx.ui.treefullcontrol.TreeFile(trs); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Inbox"); + var te2 = new qx.ui.treefullcontrol.TreeFolder(trs); + posteingang = te2; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Presets"); + var te2_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Sent"); + var te2_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Trash", "icon/16/places/user-trash.png"); + var te2_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Data"); + var te2_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Edit"); + var te2_5 = new qx.ui.treefullcontrol.TreeFolder(trs); + + editieren = te2_5; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Chat"); + var te2_5_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Pustefix"); + var te2_5_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("TINC"); + var te2_5_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Announce"); + var te2_5_3_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Devel"); + var te2_5_3_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Lists"); + var te2_6 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Relations"); + var te2_6_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Company"); + var te2_6_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Questions"); + var te2_6_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Internal"); + var te2_6_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Products"); + var te2_6_5 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Press"); + var te2_6_6 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Development"); + var te2_6_7 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Competition"); + var te2_6_8 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Personal"); + var te2_7 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Bugs"); + var te2_7_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Family"); + var te2_7_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Projects"); + var te2_7_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Holiday"); + var te2_7_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Big"); + var te2_8 = new qx.ui.treefullcontrol.TreeFolder(trs); + + for (var i=0;i<50; i++) { + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Item " + i); + te2_8.add(new qx.ui.treefullcontrol.TreeFolder(trs)); + }; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Spam"); + var te2_9 = new qx.ui.treefullcontrol.TreeFolder(trs); + spam = te2_9; + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_2.html new file mode 100644 index 0000000000..1bddc43cf0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_2.html @@ -0,0 +1,270 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> +<p>Shows a tree, with user-defined extra fields. In this example, the extra +fields include a left-justified icon, a checkbox between the node icon and the +label, and a whole series of right-justified fields. Additionally, the root node may be hidden. </p> + </div> + + <script type="text/javascript"> + var treeRowStructure; + + function stuff(vLabel, vIcon, vIconSelected) + { + treeRowStructure = qx.ui.treefullcontrol.TreeRowStructure.getInstance().newRow(); + + // A left-justified icon + if (Math.floor(Math.random() * 4) == 0) + { + obj = new qx.ui.basic.Image("icon/16/apps/accessories-alarm.png", 16); + } + else + { + obj = new qx.ui.basic.Image(null, 16); + } + treeRowStructure.addObject(obj, true); + + // Here's our indentation and tree-lines + treeRowStructure.addIndent(); + + // The standard tree icon follows + treeRowStructure.addIcon( + arguments.length >= 2 ? vIcon : "icon/16/places/user-desktop.png", + arguments.length >= 3 ? vIconSelected : "icon/16/apps/accessories-dictionary.png"); + + // A checkbox comes right after the tree icon + obj = new qx.ui.form.CheckBox( + null, "23", null, Math.floor(Math.random() * 2) == 0 ? false : true); + obj.setPadding(0, 0); + treeRowStructure.addObject(obj, true); + + // The label + treeRowStructure.addLabel(vLabel); + + // All else should be right justified + obj = new qx.ui.basic.HorizontalSpacer; + treeRowStructure.addObject(obj, true); + + // Add a file size, date and mode + obj = new qx.ui.basic.Label(Math.round(Math.random() * 100) + "kb"); + obj.setWidth(50); + treeRowStructure.addObject(obj, true); + obj = new qx.ui.basic.Label( + "May " + Math.round(Math.random() * 30 + 1) + " 2005"); + obj.setWidth(150); + treeRowStructure.addObject(obj, true); + obj = new qx.ui.basic.Label("-rw-r--r--"); + obj.setWidth(80); + treeRowStructure.addObject(obj, true); + + return treeRowStructure; + } + + qx.core.Init.getInstance().defineMain(function() + { + var x = new qx.ui.basic.Atom("Test #1", "icon/16/actions/view-refresh.png", 16, 16); + x.debug("In main"); + + var t = new qx.ui.treefullcontrol.Tree(stuff("Root")); + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(600); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + // One icon for selected and one for unselected states + var te1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Desktop")); + t.add(te1); + + desktop = te1; + + var te1_1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Files")); + var te1_2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Workspace")); + var te1_3 = new qx.ui.treefullcontrol.TreeFolder(stuff("Network")); + var te1_4 = new qx.ui.treefullcontrol.TreeFolder(stuff("Trash")); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + // One icon specified, and used for both selected unselected states + var te1_2_1 = new qx.ui.treefullcontrol.TreeFile(stuff("Windows (C:)", "icon/16/devices/drive-harddisk.png")); + var te1_2_2 = new qx.ui.treefullcontrol.TreeFile(stuff("Documents (D:)", "icon/16/devices/drive-harddisk.png")); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + var te2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Inbox")); + posteingang = te2; + + var te2_1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Presets")); + var te2_2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Sent")); + var te2_3 = new qx.ui.treefullcontrol.TreeFolder(stuff("Trash", "icon/16/places/user-trash.png")); + var te2_4 = new qx.ui.treefullcontrol.TreeFolder(stuff("Data")); + var te2_5 = new qx.ui.treefullcontrol.TreeFolder(stuff("Edit")); + + editieren = te2_5; + + var te2_5_1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Chat")); + var te2_5_2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Pustefix")); + var te2_5_3 = new qx.ui.treefullcontrol.TreeFolder(stuff("TINC")); + + var te2_5_3_1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Announce")); + var te2_5_3_2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Devel")); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + var te2_6 = new qx.ui.treefullcontrol.TreeFolder(stuff("Lists")); + + var te2_6_1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Relations")); + var te2_6_2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Company")); + var te2_6_3 = new qx.ui.treefullcontrol.TreeFolder(stuff("Questions")); + var te2_6_4 = new qx.ui.treefullcontrol.TreeFolder(stuff("Internal")); + var te2_6_5 = new qx.ui.treefullcontrol.TreeFolder(stuff("Products")); + var te2_6_6 = new qx.ui.treefullcontrol.TreeFolder(stuff("Press")); + var te2_6_7 = new qx.ui.treefullcontrol.TreeFolder(stuff("Development")); + var te2_6_8 = new qx.ui.treefullcontrol.TreeFolder(stuff("Competition")); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + var te2_7 = new qx.ui.treefullcontrol.TreeFolder(stuff("Personal")); + + var te2_7_1 = new qx.ui.treefullcontrol.TreeFolder(stuff("Bugs")); + var te2_7_2 = new qx.ui.treefullcontrol.TreeFolder(stuff("Family")); + var te2_7_3 = new qx.ui.treefullcontrol.TreeFolder(stuff("Projects")); + var te2_7_4 = new qx.ui.treefullcontrol.TreeFolder(stuff("Holiday")); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + var te2_8 = new qx.ui.treefullcontrol.TreeFolder(stuff("Big")); + + for (var i=0;i<50; i++) { + te2_8.add(new qx.ui.treefullcontrol.TreeFolder(stuff("Item " + i))); + }; + + var te2_9 = new qx.ui.treefullcontrol.TreeFolder(stuff("Spam")); + spam = te2_9; + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(650); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + + + var tHideNode = new qx.ui.form.CheckBox("Hide the root node?"); + + with(tHideNode) { + setTop(100); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tHideNode); + + tHideNode.addEventListener("changeChecked", function(e) { t.setHideNode(e.getData()); }); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_3.html new file mode 100644 index 0000000000..4dc1894826 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_3.html @@ -0,0 +1,298 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Shows a tree, with user-defined icons for some nodes. This tests + listening for tree events. A separate alert is generated upon opening a + folder that has contents; when opening a folder that has no contents; and + closing a folder.</p><p>We also demonstrate changing the default value of + 'allowShowPlusMinusSymbol' so that all folders initially have a plus/minus + symbol. Then, upon opening an empty folder, we remove that + icon.</p><p>Lastly, we demonstrate in the alert presented by tree events, + use of the getHierarchy() method to obtain a full "path" for a tree + node.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + /* + * Reset the default of always showing the plus/minus symbol. The + * default is 'false'. We want to always display it for each folder + * (and then stop displaying it if we determine upon open that there are + * no contents). + * + * The changeProperty() function assumes that it is being called + * shortly after defineClass() is called. We therefore need to kludge + * qx.Proto to point to the right place. + * + * TODO: There should be a mechanism to change a property attribute + * without having to jump through these hoops. + */ + var constructor = qx.OO.classes["qx.ui.treefullcontrol.TreeFolder"]; + qx.Proto = constructor.prototype; + qx.OO.changeProperty({ name : "alwaysShowPlusMinusSymbol", type : "boolean", defaultValue : true }); + + + var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Root"); + var t = new qx.ui.treefullcontrol.Tree(trs); + + /* + * All subtrees will use this root node's event listeners. Create event + * listeners for each of the possible events. + */ + t.addEventListener("treeOpenWithContent", function(e) { + alert('treeOpenWithContent ' + e.getData().getHierarchy(new Array()).join("/")); + }); + + t.addEventListener("treeClose", function(e) { + alert('treeClose ' + e.getData().getHierarchy(new Array()).join("/")); + }); + + /* + * We handle opening an empty folder specially. We demonstrate how to + * disable the plus/minus sign once we've determined there's nothing in + * it. This feature might be used to dynamically retrieve the contents + * of the folder, and if nothing is available, indicate it by removing + * the plus/minus sign. + */ + t.addEventListener("treeOpenWhileEmpty", function(e) { + alert('treeOpenWhileEmpty ' + e.getData().getHierarchy(new Array()).join("/")); + e.getData().setAlwaysShowPlusMinusSymbol(false); + }); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + // One icon for selected and one for unselected states + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Desktop", "icon/16/places/user-desktop.png", "icon/16/apps/accessories-dictionary.png"); + var te1 = new qx.ui.treefullcontrol.TreeFolder(trs); + t.add(te1); + + desktop = te1; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Files"); + var te1_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Workspace"); + var te1_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Network"); + var te1_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Trash"); + var te1_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + // One icon specified, and used for both selected unselected states + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Windows (C:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_1 = new qx.ui.treefullcontrol.TreeFile(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Documents (D:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_2 = new qx.ui.treefullcontrol.TreeFile(trs); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Inbox"); + var te2 = new qx.ui.treefullcontrol.TreeFolder(trs); + posteingang = te2; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Presets"); + var te2_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Sent"); + var te2_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Trash", "icon/16/places/user-trash.png"); + var te2_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Data"); + var te2_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Edit"); + var te2_5 = new qx.ui.treefullcontrol.TreeFolder(trs); + + editieren = te2_5; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Chat"); + var te2_5_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Pustefix"); + var te2_5_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("TINC"); + var te2_5_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Announce"); + var te2_5_3_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Devel"); + var te2_5_3_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Lists"); + var te2_6 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Relations"); + var te2_6_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Company"); + var te2_6_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Questions"); + var te2_6_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Internal"); + var te2_6_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Products"); + var te2_6_5 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Press"); + var te2_6_6 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Development"); + var te2_6_7 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Competition"); + var te2_6_8 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Personal"); + var te2_7 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Bugs"); + var te2_7_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Family"); + var te2_7_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Projects"); + var te2_7_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Holiday"); + var te2_7_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Big"); + var te2_8 = new qx.ui.treefullcontrol.TreeFolder(trs); + + for (var i=0;i<50; i++) { + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Item " + i); + te2_8.add(new qx.ui.treefullcontrol.TreeFolder(trs)); + }; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Spam"); + var te2_9 = new qx.ui.treefullcontrol.TreeFolder(trs); + spam = te2_9; + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + var tHideNode = new qx.ui.form.CheckBox("Hide the root node?"); + + with(tHideNode) { + setTop(100); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tHideNode); + + tHideNode.addEventListener("changeChecked", function(e) { t.setHideNode(e.getData()); }); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_4.html new file mode 100644 index 0000000000..5367c244cd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/TreeFullControl_4.html @@ -0,0 +1,384 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Shows a tree and allows playing with the settings of the Tree + properties <i>hideNode</i> and <i>rootOpenClose</i>. Also demonstrates + manipulating display (or not) of tree lines at specific indentation + levels, using the <i>excludeSpecificTreeLines</i> property.</p> + + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Root"); + var t = new qx.ui.treefullcontrol.Tree(trs); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + // One icon for selected and one for unselected states + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Desktop", "icon/16/places/user-desktop.png", "icon/16/apps/accessories-dictionary.png"); + var te1 = new qx.ui.treefullcontrol.TreeFolder(trs); + t.add(te1); + + desktop = te1; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Files"); + var te1_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Workspace"); + var te1_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Network"); + var te1_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Trash"); + var te1_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + // One icon specified, and used for both selected unselected states + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Windows (C:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_1 = new qx.ui.treefullcontrol.TreeFile(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Documents (D:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_2 = new qx.ui.treefullcontrol.TreeFile(trs); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Inbox"); + var te2 = new qx.ui.treefullcontrol.TreeFolder(trs); + posteingang = te2; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Presets"); + var te2_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Sent"); + var te2_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Trash", "icon/16/places/user-trash.png"); + var te2_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Data"); + var te2_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Edit"); + var te2_5 = new qx.ui.treefullcontrol.TreeFolder(trs); + + editieren = te2_5; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Chat"); + var te2_5_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Pustefix"); + var te2_5_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("TINC"); + var te2_5_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Announce"); + var te2_5_3_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Devel"); + var te2_5_3_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Lists"); + var te2_6 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Relations"); + var te2_6_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Company"); + var te2_6_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Questions"); + var te2_6_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Internal"); + var te2_6_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Products"); + var te2_6_5 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Press"); + var te2_6_6 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Development"); + var te2_6_7 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Competition"); + var te2_6_8 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Personal"); + var te2_7 = new qx.ui.treefullcontrol.TreeFolder(trs); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Bugs"); + var te2_7_1 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Family"); + var te2_7_2 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Projects"); + var te2_7_3 = new qx.ui.treefullcontrol.TreeFolder(trs); + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Holiday"); + var te2_7_4 = new qx.ui.treefullcontrol.TreeFolder(trs); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Big"); + var te2_8 = new qx.ui.treefullcontrol.TreeFolder(trs); + + for (var i=0;i<50; i++) { + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Item " + i); + te2_8.add(new qx.ui.treefullcontrol.TreeFolder(trs)); + }; + + trs = qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard("Spam"); + var te2_9 = new qx.ui.treefullcontrol.TreeFolder(trs); + spam = te2_9; + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + var tHideNode = new qx.ui.form.CheckBox("Hide the root node?"); + + with(tHideNode) { + setTop(100); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tHideNode); + + tHideNode.addEventListener("changeChecked", function(e) { t.setHideNode(e.getData()); }); + + var tIncludeRootOpenClose = + new qx.ui.form.CheckBox("Include root open/close button?"); + + with(tIncludeRootOpenClose) { + setTop(120); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tIncludeRootOpenClose); + + tIncludeRootOpenClose.addEventListener("changeChecked", function(e) { t.setRootOpenClose(e.getData()); }); + + tExcludeTreeLines0 = + new qx.ui.form.CheckBox("Exclude tree lines at level 0?"); + + with(tExcludeTreeLines0) { + setTop(140); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tExcludeTreeLines0); + + tExcludeTreeLines0.addEventListener( + "changeChecked", + function(e) + { + var excl = t.getExcludeSpecificTreeLines(); + if (e.getData()) { + excl[0] = true; + } else { + delete(excl[0]); + } + t.setExcludeSpecificTreeLines(excl); + }); + + tExcludeTreeLines1 = + new qx.ui.form.CheckBox("Exclude tree lines at level 1?"); + + with(tExcludeTreeLines1) { + setTop(160); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tExcludeTreeLines1); + + tExcludeTreeLines1.addEventListener( + "changeChecked", + function(e) + { + var excl = t.getExcludeSpecificTreeLines(); + if (e.getData()) { + excl[1] = true; + } else { + delete(excl[1]); + } + t.setExcludeSpecificTreeLines(excl); + }); + + tExcludeTreeLines2 = + new qx.ui.form.CheckBox("Exclude tree lines at level 2?"); + + with(tExcludeTreeLines2) { + setTop(180); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tExcludeTreeLines2); + + tExcludeTreeLines2.addEventListener( + "changeChecked", + function(e) + { + var excl = t.getExcludeSpecificTreeLines(); + if (e.getData()) { + excl[2] = true; + } else { + delete(excl[2]); + } + t.setExcludeSpecificTreeLines(excl); + }); + + tExcludeTreeLines3 = + new qx.ui.form.CheckBox("Exclude tree lines at level 3?"); + + with(tExcludeTreeLines3) { + setTop(200); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tExcludeTreeLines3); + + tExcludeTreeLines3.addEventListener( + "changeChecked", + function(e) + { + var excl = t.getExcludeSpecificTreeLines(); + if (e.getData()) { + excl[3] = true; + } else { + delete(excl[3]); + } + t.setExcludeSpecificTreeLines(excl); + }); + + tExcludeTreeLines4 = + new qx.ui.form.CheckBox("Exclude tree lines at level 4?"); + + with(tExcludeTreeLines4) { + setTop(220); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tExcludeTreeLines4); + + tExcludeTreeLines4.addEventListener( + "changeChecked", + function(e) + { + var excl = t.getExcludeSpecificTreeLines(); + if (e.getData()) { + excl[4] = true; + } else { + delete(excl[4]); + } + t.setExcludeSpecificTreeLines(excl); + }); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Tree_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Tree_1.html new file mode 100644 index 0000000000..295231bf42 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Tree_1.html @@ -0,0 +1,191 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Shows a tree, with user-defined icons for some nodes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var t = new qx.ui.tree.Tree("Root"); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + // One icon for selected and one for unselected states + var te1 = new qx.ui.tree.TreeFolder("Desktop", "icon/16/places/user-desktop.png", "icon/16/apps/accessories-dictionary.png"); + t.add(te1); + + var te1_1 = new qx.ui.tree.TreeFolder("Files"); + var te1_2 = new qx.ui.tree.TreeFolder("Workspace"); + var te1_3 = new qx.ui.tree.TreeFolder("Network"); + var te1_4 = new qx.ui.tree.TreeFolder("Trash"); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + // One icon specified, and used for both selected unselected states + var te1_2_1 = new qx.ui.tree.TreeFile("Windows (C:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_2 = new qx.ui.tree.TreeFile("Documents (D:)", "icon/16/devices/drive-harddisk.png"); + + te1_2.add(te1_2_1, te1_2_2); + + + var te2 = new qx.ui.tree.TreeFolder("Inbox"); + + var te2_1 = new qx.ui.tree.TreeFolder("Presets"); + var te2_2 = new qx.ui.tree.TreeFolder("Sent"); + var te2_3 = new qx.ui.tree.TreeFolder("Trash", "icon/16/places/user-trash.png"); + var te2_4 = new qx.ui.tree.TreeFolder("Data"); + var te2_5 = new qx.ui.tree.TreeFolder("Edit"); + + var te2_5_1 = new qx.ui.tree.TreeFolder("Chat"); + var te2_5_2 = new qx.ui.tree.TreeFolder("Pustefix"); + var te2_5_3 = new qx.ui.tree.TreeFolder("TINC"); + + var te2_5_3_1 = new qx.ui.tree.TreeFolder("Announce"); + var te2_5_3_2 = new qx.ui.tree.TreeFolder("Devel"); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + var te2_6 = new qx.ui.tree.TreeFolder("Lists"); + + var te2_6_1 = new qx.ui.tree.TreeFolder("Relations"); + var te2_6_2 = new qx.ui.tree.TreeFolder("Company"); + var te2_6_3 = new qx.ui.tree.TreeFolder("Questions"); + var te2_6_4 = new qx.ui.tree.TreeFolder("Internal"); + var te2_6_5 = new qx.ui.tree.TreeFolder("Products"); + var te2_6_6 = new qx.ui.tree.TreeFolder("Press"); + var te2_6_7 = new qx.ui.tree.TreeFolder("Development"); + var te2_6_8 = new qx.ui.tree.TreeFolder("Competition"); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + var te2_7 = new qx.ui.tree.TreeFolder("Personal"); + + var te2_7_1 = new qx.ui.tree.TreeFolder("Bugs"); + var te2_7_2 = new qx.ui.tree.TreeFolder("Family"); + var te2_7_3 = new qx.ui.tree.TreeFolder("Projects"); + var te2_7_4 = new qx.ui.tree.TreeFolder("Holiday"); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + var te2_8 = new qx.ui.tree.TreeFolder("Big"); + + for (var i=0;i<50; i++) { + te2_8.add(new qx.ui.tree.TreeFolder("Item " + i)); + }; + + var te2_9 = new qx.ui.tree.TreeFolder("Spam"); + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Window_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Window_1.html new file mode 100644 index 0000000000..54eb402afa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/Window_1.html @@ -0,0 +1,308 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>This is the qx.ui.window.Window widget. These should emulate the default look and behaviour of the application windows running under Microsoft Windows(TM).</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var w1 = new qx.ui.window.Window("First Window", "icon/16/apps/preferences-desktop-multimedia.png"); + w1.setSpace(20, 400, 48, 250); + d.add(w1); + + var w2 = new qx.ui.window.Window("Second Window", "icon/16/actions/format-color.png"); + w2.setSpace(250, "auto", 120, "auto"); + d.add(w2); + + var w3 = new qx.ui.window.Window("Third Window", "icon/16/categories/applications-internet.png"); + w3.setSpace(100, 300, 200, 300); + w3.setMaxWidth(450); + w3.setMaxHeight(400); + d.add(w3); + + var wm1 = new qx.ui.window.Window("First Modal Dialog"); + wm1.setSpace(150, 200, 150, 200); + wm1.setModal(true); + d.add(wm1); + + var wm2 = new qx.ui.window.Window("Second Modal Dialog"); + wm2.setSpace(100, 200, 100, 150); + wm2.setModal(true); + wm2.setShowClose(false); + d.add(wm2); + + + + + var a1 = new qx.ui.basic.Atom("Welcome to your first own Window.<br/>Have fun!", "icon/32/apps/office-organizer.png"); + a1.set({ top: 4, left: 4 }); + w1.add(a1); + + + + + var tf1 = new qx.ui.pageview.tabview.TabView; + tf1.set({ left: 10, top: 52, right: 10, bottom: 10 }); + + var t1_1 = new qx.ui.pageview.tabview.Button("Explore"); + var t1_2 = new qx.ui.pageview.tabview.Button("Internet"); + var t1_3 = new qx.ui.pageview.tabview.Button("Future"); + + t1_1.setChecked(true); + + tf1.getBar().add(t1_1, t1_2, t1_3); + + var p1_1 = new qx.ui.pageview.tabview.Page(t1_1); + var p1_2 = new qx.ui.pageview.tabview.Page(t1_2); + var p1_3 = new qx.ui.pageview.tabview.Page(t1_3); + + tf1.getPane().add(p1_1, p1_2, p1_3); + + w1.add(tf1); + + + + var at1 = new qx.ui.basic.Atom("Your second window", "icon/22/actions/edit-find.png"); + at1.setLocation(8, 8); + w2.add(at1); + + + + + var btn1 = new qx.ui.form.Button("Open Modal Dialog 1", "icon/16/apps/system-software-update.png"); + btn1.setLocation(4, 4); + w3.add(btn1); + + btn1.addEventListener("execute", function(e) { + wm1.open(); + }); + + + var btn2 = new qx.ui.form.Button("Open Modal Dialog 2", "icon/16/apps/system-software-update.png"); + btn2.setLocation(4, 4); + wm1.add(btn2); + + btn2.addEventListener("execute", function(e) { + wm2.open(); + }); + + + var chkm1 = new qx.ui.form.CheckBox("Modal", null, null, true); + chkm1.setLocation(4, 50); + wm1.add(chkm1); + + chkm1.addEventListener("changeChecked", function(e) { + wm1.setModal(e.getData()); + }); + + + + var fs1 = new qx.ui.groupbox.GroupBox("Settings"); + fs1.setLocation(4, 40); + fs1.setRight(4); + fs1.setBottom(4); + + + var chk1 = new qx.ui.form.CheckBox("Show Icon"); + chk1.setLocation(0, 0); + chk1.setChecked(true); + chk1.addEventListener("changeChecked", function(e) { + w2.setShowIcon(e.getData()); + }); + + var chk2 = new qx.ui.form.CheckBox("Show Caption"); + chk2.setLocation(0, 20); + chk2.setChecked(true); + chk2.addEventListener("changeChecked", function(e) { + w2.setShowCaption(e.getData()); + }); + + + + var chk3 = new qx.ui.form.CheckBox("Resizeable"); + chk3.setLocation(0, 50); + chk3.setChecked(true); + chk3.addEventListener("changeChecked", function(e) { + w2.setResizeable(e.getData()); + }); + + var chk4 = new qx.ui.form.CheckBox("Moveable"); + chk4.setLocation(0, 70); + chk4.setChecked(true); + chk4.addEventListener("changeChecked", function(e) { + w2.setMoveable(e.getData()); + }); + + + + var chk5 = new qx.ui.form.CheckBox("Show Close"); + chk5.setLocation(140, 0); + chk5.setChecked(true); + chk5.addEventListener("changeChecked", function(e) { + w2.setShowClose(e.getData()); + }); + + var chk6 = new qx.ui.form.CheckBox("Show Maximize/Restore"); + chk6.setLocation(140, 20); + chk6.setChecked(true); + chk6.addEventListener("changeChecked", function(e) { + w2.setShowMaximize(e.getData()); + }); + + var chk7 = new qx.ui.form.CheckBox("Show Minimize"); + chk7.setLocation(140, 40); + chk7.setChecked(true); + chk7.addEventListener("changeChecked", function(e) { + w2.setShowMinimize(e.getData()); + }); + + + + var chk8 = new qx.ui.form.CheckBox("Allow Close"); + chk8.setLocation(140, 70); + chk8.setChecked(true); + chk8.addEventListener("changeChecked", function(e) { + w2.setAllowClose(e.getData()); + }); + + var chk9 = new qx.ui.form.CheckBox("Allow Maximize"); + chk9.setLocation(140, 90); + chk9.setChecked(true); + chk9.addEventListener("changeChecked", function(e) { + w2.setAllowMaximize(e.getData()); + }); + + var chk10 = new qx.ui.form.CheckBox("Allow Minimize"); + chk10.setLocation(140, 110); + chk10.setChecked(true); + chk10.addEventListener("changeChecked", function(e) { + w2.setAllowMinimize(e.getData()); + }); + + + + + var l1 = new qx.ui.basic.Atom("Move Method", "icon/16/actions/system-run.png"); + l1.setLocation(0, 100); + + var rb1 = new qx.ui.form.RadioButton("Frame", "frame"); + rb1.setLocation(0, 120); + + var rb2 = new qx.ui.form.RadioButton("Opaque", "opaque"); + rb2.setLocation(0, 140); + rb2.setChecked(true); + + var rb3 = new qx.ui.form.RadioButton("Translucent", "translucent"); + rb3.setLocation(0, 160); + + var rbm1 = new qx.manager.selection.RadioManager("move", [rb1, rb2, rb3]); + + rbm1.addEventListener("changeSelected", function(e) { + w2.setMoveMethod(e.getData().getValue()); + }); + + + + + var l2 = new qx.ui.basic.Atom("Resize Method", "icon/16/actions/system-run.png"); + l2.setLocation(0, 190); + + var rb4 = new qx.ui.form.RadioButton("Frame", "frame"); + rb4.setLocation(0, 210); + rb4.setChecked(true); + + var rb5 = new qx.ui.form.RadioButton("Opaque", "opaque"); + rb5.setLocation(0, 230); + + var rb6 = new qx.ui.form.RadioButton("Lazy Opaque", "lazyopaque"); + rb6.setLocation(0, 250); + + var rb7 = new qx.ui.form.RadioButton("Translucent", "translucent"); + rb7.setLocation(0, 270); + + var rbm2 = new qx.manager.selection.RadioManager("resize", [rb4, rb5, rb6, rb7]); + + rbm2.addEventListener("changeSelected", function(e) { + w2.setResizeMethod(e.getData().getValue()); + }); + + + + + var chk11 = new qx.ui.form.CheckBox("Show Statusbar"); + chk11.setLocation(140, 140); + chk11.setChecked(false); + chk11.addEventListener("changeChecked", function(e) { + w2.setShowStatusbar(e.getData()); + }); + + + + + var btnpack = new qx.ui.form.Button("Pack Window", "icon/16/devices/media-optical.png"); + btnpack.setLocation(140, 170); + btnpack.addEventListener("execute", function(e) { + w2.pack(); + }); + + + fs1.add(chk1, chk2, chk3, chk4, chk5, chk6, chk7, chk8, chk9, chk10, l1, rb1, rb2, rb3, l2, rb4, rb5, rb6, rb7, chk11, btnpack); + w2.add(fs1); + + + var icon1 = new qx.ui.basic.Image("icon/32/status/dialog-error.png"); + var warn1 = new qx.ui.basic.Label("Do you want to<br/>fly to Rio?"); + + icon1.setTop(10); + icon1.setLeft(10); + + warn1.setTop(10); + warn1.setLeft(48); + + var btn3 = new qx.ui.form.Button("Yes", "icon/16/actions/dialog-ok.png"); + var btn4 = new qx.ui.form.Button("No", "icon/16/actions/dialog-cancel.png"); + + btn3.addEventListener("execute", function(e) { + alert("Thank you!"); + wm2.close(); + }); + + btn4.addEventListener("execute", function(e) { + alert("Sorry, please click 'Yes'!"); + }); + + btn3.set({ bottom : 10, right : 10 }); + btn4.set({ bottom : 10, left : 10 }); + + wm2.add(btn3, btn4, icon1, warn1); + + + + // Icon & Color Themes + //qx.manager.object.ImageManager.getInstance().createThemeList(w3, 20, 248); + qx.manager.object.ColorManager.getInstance().createThemeList(w3, 4, 58); + + + + + w1.open(); + w2.open(); + w3.open(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file1.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file1.swf Binary files differnew file mode 100644 index 0000000000..2e6d69a3fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file1.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file10.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file10.swf Binary files differnew file mode 100644 index 0000000000..eeafa9a8f3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file10.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file2.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file2.swf Binary files differnew file mode 100644 index 0000000000..51c8f0ff76 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file2.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file3.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file3.swf Binary files differnew file mode 100644 index 0000000000..0b6b56be85 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file3.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file4.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file4.swf Binary files differnew file mode 100644 index 0000000000..746baa8cd9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file4.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file5.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file5.swf Binary files differnew file mode 100644 index 0000000000..a3333e1c31 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file5.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file6.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file6.swf Binary files differnew file mode 100644 index 0000000000..2cad550081 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file6.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file7.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file7.swf Binary files differnew file mode 100644 index 0000000000..b5f4eb4ddf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file7.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file8.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file8.swf Binary files differnew file mode 100644 index 0000000000..54c9a11edc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file8.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file9.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file9.swf Binary files differnew file mode 100644 index 0000000000..cc41ff1c10 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/color/file9.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/fo_tester.fla b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/fo_tester.fla Binary files differnew file mode 100644 index 0000000000..afd4bb6134 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/fo_tester.fla diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/fo_tester.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/fo_tester.swf Binary files differnew file mode 100644 index 0000000000..8e0b966bca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/image/flash/fo_tester.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/index.html new file mode 100644 index 0000000000..ac16317e80 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/example/index.html @@ -0,0 +1,8 @@ +<html> + <head> + <script type="text/javascript">window.location.href="Atom_1.html";</script> + </head> + <body> + <a href="Atom1.html">Continue...</a> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ArrayCreate_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ArrayCreate_1.html new file mode 100644 index 0000000000..17b7b62a19 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ArrayCreate_1.html @@ -0,0 +1,57 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for empty Array creation performance</p> + <ol> + <li>Using "[]"</li> + <li>Using "new Array"</li> + <li>Using "new Array()"</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function ArrayCreate1(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = []; + }; + }; + + function ArrayCreate2(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Array; + }; + }; + + function ArrayCreate3(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Array(); + }; + }; + + new qx.dev.TimeTracker(ArrayCreate1, ArrayCreate2, ArrayCreate3); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ArrayCreate_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ArrayCreate_2.html new file mode 100644 index 0000000000..24dc250844 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ArrayCreate_2.html @@ -0,0 +1,47 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for filled Array creation performance</p> + <ol> + <li>Using "[ values ]"</li> + <li>Using "new Array(values)"</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function ArrayCreate1(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = [ 1, 2, 3, 4, 5 ]; + }; + }; + + function ArrayCreate2(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Array(1, 2, 3, 4, 5); + }; + }; + + new qx.dev.TimeTracker(ArrayCreate1, ArrayCreate2); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_1.html new file mode 100644 index 0000000000..438d962c89 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_1.html @@ -0,0 +1,43 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Create 10.000 new (non stored) objects inside a loop. Identical to LocalObject_1.html.</p> + + <h1>Result</h1> + <p>The performance in IE is quite good (~330ms for each loop), compared to the same stuff executed without the precreated stuff.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_2.html new file mode 100644 index 0000000000..747381ab23 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_2.html @@ -0,0 +1,51 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (globally stored). After this create 10.000 new (non stored) objects inside a loop.</p> + <p>Keep global storage over runtime.</p> + + <h1>Result</h1> + <p>The performance in IE is poor (~1150ms for each loop), compared to the same stuff executed without so much precreated objects (previous example).</p> + <p>It makes no difference if we use a global or a local variable here. It's identical to LocalObject_2.html.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + window.store = []; + + for (var i=0; i<50000; i++) { + window.store.push({}); + }; + + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_3.html new file mode 100644 index 0000000000..1e992095b1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_3.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (globally stored). After this create 10.000 new (non stored) objects inside a loop.</p> + <p>Use removeAll to clean up global storage after first loop.</p> + + <h1>Result</h1> + <p>The additional cleanup (remove all entries) of the global storage optimizes performance after the first loop. First loop is done after ~1150ms. The following loop needs ~490ms. Not bad, but poorly compared to the version, where the storage have never exist before. (See first examples, which executes in ~350ms.)</p> + <p>It makes no difference if we use a global or a local variable here. It's identical to LocalObject_3.html.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + window.store = []; + + for (var i=0; i<50000; i++) { + window.store.push({}); + }; + + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + + qx.lang.Array.removeAll(window.store); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_4.html new file mode 100644 index 0000000000..e8f766358c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/GlobalObject_4.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (globally stored). After this create 10.000 new (non stored) objects inside a loop.</p> + <p>Overwrite global storage to clean up after first loop.</p> + + <h1>Result</h1> + <p>The additional cleanup (overwrite with null) of the global storage optimizes performance after the first loop. First loop is done after ~1150ms. The following loop needs ~350ms. Quite good. The same value as in the first example, where the data have never exist.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + window.store = []; + + for (var i=0; i<50000; i++) { + window.store.push({}); + }; + + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + + window.store = null; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_1.html new file mode 100644 index 0000000000..5228d4fe23 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_1.html @@ -0,0 +1,43 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Create 10.000 new (non stored) objects inside a loop. Identical to GlobalObject_1.html.</p> + + <h1>Result</h1> + <p>The performance in IE is quite good (~330ms for each loop), compared to the same stuff executed without the precreated stuff.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_2.html new file mode 100644 index 0000000000..dca923d209 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_2.html @@ -0,0 +1,51 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (locally stored). After this create 10.000 new (not stored) objects inside a loop.</p> + <p>As the loop will be executed inside the scope of "store", the browser must keep the information about "store" with each execution of "test", even if called from the timeout.</p> + + <h1>Result</h1> + <p>The performance in IE is poor (~1150ms for each loop), compared to the same stuff executed without so much precreated objects (previous example).</p> + <p>It makes no difference if we use a global or a local variable here. It's identical to GlobalObject_2.html.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var store = []; + + for (var i=0; i<50000; i++) { + store.push({}); + }; + + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_3.html new file mode 100644 index 0000000000..cf180b4318 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_3.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (locally stored). After this create 10.000 new (not stored) objects inside a loop.</p> + + <h1>Result</h1> + <p>The additional cleanup (remove all entries) of the local storage optimizes performance after the first loop. First loop is done after ~1150ms. The following loop needs ~490ms. Not bad, but poorly compared to the version, where the storage have never exist before. (See first examples, which executes in ~350ms.)</p> + <p>It makes no difference if we use a global or a local variable here. It's identical to GlobalObject_3.html.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var store = []; + + for (var i=0; i<50000; i++) { + store.push({}); + }; + + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + + qx.lang.Array.removeAll(store); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_4.html new file mode 100644 index 0000000000..0cd346a605 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_4.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (locally stored). After this create 10.000 new (not stored) objects inside a loop.</p> + <p>The "store" variable will be resetted after the first loop with "null".</p> + + <h1>Result</h1> + <p>The additional cleanup (overwrite with null) of the global storage optimizes performance after the first loop. First loop is done after ~1150ms. The following loop needs ~350ms. Quite good. The same value as in the first example, where the data have never exist.</p> + <p>Interesting because theoratically the function implemenetation of "test" is inside the scope of "store".</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var store = []; + + for (var i=0; i<50000; i++) { + store.push({}); + }; + + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + test(); + + store = null; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_5.html new file mode 100644 index 0000000000..0c218f965a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/LocalObject_5.html @@ -0,0 +1,50 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>JS Object Storage Performance</p> + + <h1>Test Description</h1> + <p>Precreate 50.000 objects (locally stored). After this create 10.000 new (not stored) objects inside a loop.</p> + <p>The test method is implemented outside of the scope of "store".</p> + + <h1>Result</h1> + <p>We need no additional cleanup to get a good performance of the function. First loop is done after ~1150ms. The following loop needs ~350ms. Quite good. The same value as in the first example, where the data have never exist.</p> + </div> + + <script type="text/javascript"> + function test() + { + var _s = (new Date).valueOf(); + + for (var i=0; i<10000; i++) { + new Object() + }; + + window.status = "time: " + (new Date).valueOf() + " | measured: " + ((new Date).valueOf() - _s) + "ms"; + window.setTimeout(test, 1000); + } + + qx.core.Init.getInstance().defineMain(function() + { + var store = []; + + for (var i=0; i<50000; i++) { + store.push({}); + }; + + test(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/NumberCreate_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/NumberCreate_1.html new file mode 100644 index 0000000000..79c1e4096a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/NumberCreate_1.html @@ -0,0 +1,110 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for Number creation performance</p> + <ol> + <li>Using simple number</li> + <li>Using parseInt</li> + <li>Using parseFloat</li> + <li>Using new with string int</li> + <li>Using new with string float</li> + <li>Using new with simple number</li> + <li>Using new with parseInt</li> + <li>Using new with parseFloat</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var n1 = "2392"; + var n2 = "223.92"; + + function NumberCreate1(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = 2392; + }; + }; + + function NumberCreate2(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = parseInt(n1); + }; + }; + + function NumberCreate3(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = parseFloat(n2); + }; + }; + + function NumberCreate4(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Number(n1); + }; + }; + + function NumberCreate5(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Number(n2); + }; + }; + + function NumberCreate6(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Number(2392); + }; + }; + + function NumberCreate7(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Number(parseInt(n1)); + }; + }; + + function NumberCreate8(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Number(parseFloat(n2)); + }; + }; + + new qx.dev.TimeTracker(NumberCreate1, NumberCreate2, NumberCreate3, NumberCreate4, NumberCreate5, NumberCreate6, NumberCreate7, NumberCreate8); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectCreate_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectCreate_1.html new file mode 100644 index 0000000000..9e2743b78b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectCreate_1.html @@ -0,0 +1,57 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for empty Object creation performance</p> + <ol> + <li>Using "{}"</li> + <li>Using "new Object"</li> + <li>Using "new Object()"</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function ObjectCreate1(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = {}; + }; + }; + + function ObjectCreate2(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Object; + }; + }; + + function ObjectCreate3(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = new Object(); + }; + }; + + new qx.dev.TimeTracker(ObjectCreate1, ObjectCreate2, ObjectCreate3); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectCreate_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectCreate_2.html new file mode 100644 index 0000000000..2e6dac8a72 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectCreate_2.html @@ -0,0 +1,77 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for filled Object creation performance</p> + <ol> + <li>Using "{ content }"</li> + <li>Using "new Object; obj.key = value"</li> + <li>Using "new Object(); obj.key = value"</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function ObjectCreate1(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) { + foo = { + key1 : 1, + key2 : 2, + key3 : 3, + key4 : 4, + key5 : 5 + }; + }; + }; + + function ObjectCreate2(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) + { + foo = new Object; + + foo.key1 = 1; + foo.key2 = 2; + foo.key3 = 3; + foo.key4 = 4; + foo.key5 = 5; + }; + }; + + function ObjectCreate3(vLoops) + { + var foo; + + for (var i=0; i<vLoops; i++) + { + foo = new Object(); + + foo.key1 = 1; + foo.key2 = 2; + foo.key3 = 3; + foo.key4 = 4; + foo.key5 = 5; + }; + }; + + new qx.dev.TimeTracker(ObjectCreate1, ObjectCreate2, ObjectCreate3); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_1.html new file mode 100755 index 0000000000..7b5034c7e6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_1.html @@ -0,0 +1,92 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the influence of inheritance to object creation performance.</p> + <p>Result: Each inheritance level increases the negative effect.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function l1() { + this.store = true; + } + + function l2() { + l1.call(this); + } + l2.prototype = new l1; + + function l3() { + l2.call(this); + } + l3.prototype = new l2; + + function l4() { + l3.call(this); + } + l4.prototype = new l3; + + function l5() { + l4.call(this); + } + l5.prototype = new l4; + + function l6() { + l5.call(this); + } + l6.prototype = new l5; + + + function t1(vLoops) { + for (var i=0; i<vLoops; i++) { + new l1; + } + } + + function t2(vLoops) { + for (var i=0; i<vLoops; i++) { + new l2; + } + } + + function t3(vLoops) { + for (var i=0; i<vLoops; i++) { + new l3; + } + } + + function t4(vLoops) { + for (var i=0; i<vLoops; i++) { + new l4; + } + } + + function t5(vLoops) { + for (var i=0; i<vLoops; i++) { + new l5; + } + } + + function t6(vLoops) { + for (var i=0; i<vLoops; i++) { + new l6; + } + } + + new qx.dev.TimeTracker(t1, t2, t3, t4, t5, t6); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_2.html new file mode 100755 index 0000000000..90a60bb715 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_2.html @@ -0,0 +1,88 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the influence of inheritance to object creation performance.</p> + <p>Don't execute superclass constructor.</p> + <p>Result: No negative effect!</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function l1() { + this.store = true; + } + + function l2() { + } + l2.prototype = new l1; + + function l3() { + } + l3.prototype = new l2; + + function l4() { + } + l4.prototype = new l3; + + function l5() { + } + l5.prototype = new l4; + + function l6() { + } + l6.prototype = new l5; + + + function t1(vLoops) { + for (var i=0; i<vLoops; i++) { + new l1; + } + } + + function t2(vLoops) { + for (var i=0; i<vLoops; i++) { + new l2; + } + } + + function t3(vLoops) { + for (var i=0; i<vLoops; i++) { + new l3; + } + } + + function t4(vLoops) { + for (var i=0; i<vLoops; i++) { + new l4; + } + } + + function t5(vLoops) { + for (var i=0; i<vLoops; i++) { + new l5; + } + } + + function t6(vLoops) { + for (var i=0; i<vLoops; i++) { + new l6; + } + } + + new qx.dev.TimeTracker(t1, t2, t3, t4, t5, t6); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_3.html new file mode 100644 index 0000000000..88433a8558 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectLevel_3.html @@ -0,0 +1,97 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the influence of inheritance to object creation performance.</p> + <p>Result: Each inheritance level increases the negative effect.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function l1() { + this.store = true; + } + + function l2() { + this._t = l1; + this._t(); + } + l2.prototype = new l1; + + function l3() { + this._t = l2; + this._t(); + } + l3.prototype = new l2; + + function l4() { + this._t = l3; + this._t(); + } + l4.prototype = new l3; + + function l5() { + this._t = l4; + this._t(); + } + l5.prototype = new l4; + + function l6() { + this._t = l5; + this._t(); + } + l6.prototype = new l5; + + + function t1(vLoops) { + for (var i=0; i<vLoops; i++) { + new l1; + } + } + + function t2(vLoops) { + for (var i=0; i<vLoops; i++) { + new l2; + } + } + + function t3(vLoops) { + for (var i=0; i<vLoops; i++) { + new l3; + } + } + + function t4(vLoops) { + for (var i=0; i<vLoops; i++) { + new l4; + } + } + + function t5(vLoops) { + for (var i=0; i<vLoops; i++) { + new l5; + } + } + + function t6(vLoops) { + for (var i=0; i<vLoops; i++) { + new l6; + } + } + + new qx.dev.TimeTracker(t1, t2, t3, t4, t5, t6); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectSize_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectSize_1.html new file mode 100755 index 0000000000..27fd66313a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/ObjectSize_1.html @@ -0,0 +1,62 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the incluence to the performance of data using the prototype mechanism on classes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var emptyObject = function() {}; + var protoObject1 = function() {}; + var protoObject2 = function() {}; + + for (var i=0; i<1000; i++) + { + protoObject1.prototype["i" + i] = function() { + alert("Hello World: " + i); + }; + } + + for (var i=0; i<1000; i++) + { + protoObject2.prototype["i" + i] = "Hello World"; + } + + function empty(vLoops) + { + for (var i=0; i<vLoops; i++) { + new emptyObject; + } + } + + function protos1(vLoops) + { + for (var i=0; i<vLoops; i++) { + new protoObject1; + } + } + + function protos2(vLoops) + { + for (var i=0; i<vLoops; i++) { + new protoObject2; + } + } + + new qx.dev.TimeTracker(empty, protos1, protos2); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/Qooxdoo_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/Qooxdoo_1.html new file mode 100644 index 0000000000..25810becb9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/Qooxdoo_1.html @@ -0,0 +1,83 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for qooxdoo object performance</p> + <ol> + <li>qx.core.Object</li> + <li>qx.core.Target</li> + <li>qx.event.type.Event</li> + <li>qx.event.type.MouseEvent</li> + <li>qx.ui.basic.Terminator</li> + <li>qx.ui.layout.CanvasLayout</li> + <li>qx.ui.layout.BoxLayout</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function TestObject(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.core.Object; + }; + }; + + function TestTarget(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.core.Target; + }; + }; + + function TestEvent(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.event.type.Event; + }; + }; + + function TestMouseEvent(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.event.type.MouseEvent; + }; + }; + + function TestTerminator(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.ui.basic.Terminator; + }; + }; + + function TestCanvasLayout(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.ui.layout.CanvasLayout; + }; + }; + + function TestBoxLayout(vLoops) + { + for (var i=0; i<vLoops; i++) { + new qx.ui.layout.BoxLayout; + }; + }; + + new qx.dev.TimeTracker(TestObject, TestTarget, TestEvent, TestMouseEvent, TestTerminator, TestCanvasLayout, TestBoxLayout); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_1.html new file mode 100644 index 0000000000..cd2e3630d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_1.html @@ -0,0 +1,95 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for String Performance. Using new String instances for concat.</p> + <ol> + <li>Operator +=</li> + <li>Operators = and +</li> + <li>Concat function</li> + <li>Array Push</li> + <li>Array Index</li> + <li>StringBuilder Object</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function StringConcatShort(vLoops) + { + var s = ""; + + for (var i=0; i<vLoops; i++) { + s += "a"; + }; + }; + + function StringConcatShortAlt(vLoops) + { + var s = ""; + + for (var i=0; i<vLoops; i++) { + s = s + "a"; + }; + }; + + function StringConcatMethod(vLoops) + { + var s = ""; + + for (var i=0; i<vLoops; i++) { + s=s.concat("a"); + }; + }; + + function StringConcatArrayPush(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s.push("a"); + }; + + s = s.join(""); + }; + + function StringConcatArrayAdd(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s[s.length] = "a"; + }; + + s = s.join(""); + }; + + function StringConcatStringBuilder(vLoops) + { + var s = new qx.util.StringBuilder; + + for (var i=0; i<vLoops; i++) { + s.add("a"); + }; + + s = s.get(); + }; + + new qx.dev.TimeTracker(StringConcatShort, StringConcatShortAlt, + StringConcatMethod, StringConcatArrayPush, StringConcatArrayAdd, + StringConcatStringBuilder); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_2.html new file mode 100644 index 0000000000..5b17c14f7d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_2.html @@ -0,0 +1,98 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for String Performance. Using cached string instances for concat.</p> + <ol> + <li>Operator +=</li> + <li>Operators = and +</li> + <li>Concat function</li> + <li>Array Push</li> + <li>Array Index</li> + <li>StringBuilder Object</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var e = ""; + var a = "a"; + + function StringConcatShort(vLoops) + { + var s = e; + + for (var i=0; i<vLoops; i++) { + s += a; + }; + }; + + function StringConcatShortAlt(vLoops) + { + var s = e; + + for (var i=0; i<vLoops; i++) { + s = s + a; + }; + }; + + function StringConcatMethod(vLoops) + { + var s = e; + + for (var i=0; i<vLoops; i++) { + s=s.concat(a); + }; + }; + + function StringConcatArrayPush(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s.push(a); + }; + + s = s.join(e); + }; + + function StringConcatArrayAdd(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s[s.length] = a; + }; + + s = s.join(e); + }; + + function StringConcatStringBuilder(vLoops) + { + var s = new qx.util.StringBuilder; + + for (var i=0; i<vLoops; i++) { + s.add(a); + }; + + s = s.get(); + }; + + new qx.dev.TimeTracker(StringConcatShort, StringConcatShortAlt, + StringConcatMethod, StringConcatArrayPush, StringConcatArrayAdd, + StringConcatStringBuilder); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_3.html new file mode 100644 index 0000000000..e802984215 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/StringConcat_3.html @@ -0,0 +1,109 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for String Performance.</p> + <p>Getting an filled array of strings and try to combine them.</p> + + <ol> + <li>Operator +=</li> + <li>Operators = and +</li> + <li>Concat function</li> + <li>Array Push</li> + <li>Array Index</li> + <li>Array Append</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var e = ""; + var a = "a"; + + function getStringArr(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s.push(a); + }; + + return s; + }; + + function StringConcatShort(vLoops) + { + var s = e; + + for (var i=0; i<vLoops; i++) { + s += getStringArr(vLoops).join(e); + }; + }; + + function StringConcatShortAlt(vLoops) + { + var s = e; + + for (var i=0; i<vLoops; i++) { + s = s + getStringArr(vLoops).join(e); + }; + }; + + function StringConcatMethod(vLoops) + { + var s = e; + + for (var i=0; i<vLoops; i++) { + s=s.concat(getStringArr(vLoops).join(e)); + }; + }; + + function StringConcatArrayPush(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s.push(getStringArr(vLoops).join(e)); + }; + + s = s.join(e); + }; + + function StringConcatArrayAdd(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s[s.length] = getStringArr(vLoops).join(e); + }; + + s = s.join(e); + }; + + function StringConcatArrayAppend(vLoops) + { + var s = []; + + for (var i=0; i<vLoops; i++) { + s.push.apply(s, getStringArr(vLoops)); + }; + + s = s.join(e); + }; + + new qx.dev.TimeTracker(StringConcatShort, StringConcatShortAlt, StringConcatMethod, StringConcatArrayPush, StringConcatArrayAdd, StringConcatArrayAppend); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/TypeCheck_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/TypeCheck_1.html new file mode 100644 index 0000000000..5d202ecff3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/TypeCheck_1.html @@ -0,0 +1,84 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for typical value checks and their performance.</p> + <ol> + <li>Typeof with Strings</li> + <li>Typeof with Constants</li> + <li>Instanceof</li> + </ol> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var STR = "string"; + var NR = "number"; + var OBJ = "object"; + + var str = "Hello World" + var nr1 = 1000; + var nr2 = Infinity; + var nr3 = NaN; + var nr4 = 0.432; + var obj1 = {}; + var obj2 = { key1 : "hello world", key2 : "hello world", key3 : "hello world" } + + function typeCheckTypeof1(vLoops) + { + for (var i=0; i<vLoops; i++) + { + typeof str === "string"; + typeof nr1 === "number"; + typeof nr2 === "number"; + typeof nr3 === "number"; + typeof nr4 === "number"; + typeof obj1 === "object"; + typeof obj2 === "object"; + } + } + + function typeCheckTypeof2(vLoops) + { + for (var i=0; i<vLoops; i++) + { + typeof str === STR; + typeof nr1 === NR; + typeof nr2 === NR; + typeof nr3 === NR; + typeof nr4 === NR; + typeof obj1 === OBJ; + typeof obj2 === OBJ; + } + } + + function typeCheckInstanceOf(vLoops) + { + for (var i=0; i<vLoops; i++) + { + str instanceof String + nr1 instanceof Number + nr2 instanceof Number + nr3 instanceof Number + nr4 instanceof Number + obj1 instanceof Object + obj2 instanceof Object + } + } + + new qx.dev.TimeTracker(typeCheckTypeof1, typeCheckTypeof2, typeCheckInstanceOf); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/index.html new file mode 100644 index 0000000000..6634518480 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/performance/index.html @@ -0,0 +1,8 @@ +<html> + <head> + <script type="text/javascript">window.location.href="ArrayCreate_1.html";</script> + </head> + <body> + <a href="ArrayCreate_1.html">Continue...</a> + </body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_1.html new file mode 100644 index 0000000000..0511ee7034 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_1.html @@ -0,0 +1,286 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some speed tests for qx.ui.basic.Atom. Please regard, that many of things in the finished + page are modified on the already created and visible qx.ui.basic.Atom instances. This is not + a good example in scripting qooxdoo. It's always faster to configure a instance of qx.ui.core.Widget + completely, before add it to the qx.ui.core.ClientDocument or any other visible parent qx.ui.core.Widget.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + /* + ---------------------------------------------- + TEST LEVEL I + ---------------------------------------------- + */ + + var la1 = new qx.ui.basic.Atom("Test No #1", "icon/16/apps/preferences-desktop-multimedia.png"); + with(la1) + { + setTop(48); + setLeft(20); + setIconPosition("left"); + }; + d.add(la1); + + + var la2 = new qx.ui.basic.Atom("Test No #2", "icon/16/apps/preferences-desktop-multimedia.png"); + with(la2) + { + setTop(148); + setLeft(20); + setIconPosition("right"); + }; + d.add(la2); + + + var la3 = new qx.ui.basic.Atom("Test No #3", "icon/16/apps/preferences-desktop-multimedia.png"); + with(la3) + { + setTop(248); + setLeft(20); + setIconPosition("top"); + }; + d.add(la3); + + + var la4 = new qx.ui.basic.Atom("Test No #4", "icon/16/apps/preferences-desktop-multimedia.png"); + with(la4) + { + setTop(348); + setLeft(20); + setIconPosition("bottom"); + }; + d.add(la4); + + + /* + ---------------------------------------------- + TEST LEVEL II + ---------------------------------------------- + */ + + var lb1 = new qx.ui.basic.Atom("Test No #1", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lb1) + { + setTop(48); + setLeft(120); + setIconPosition("left"); + }; + d.add(lb1); + lb1.setIconPosition("right"); + + + var lb2 = new qx.ui.basic.Atom("Test No #2", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lb2) + { + setTop(148); + setLeft(120); + setIconPosition("right"); + }; + d.add(lb2); + lb2.setIconPosition("left"); + + + var lb3 = new qx.ui.basic.Atom("Test No #3", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lb3) + { + setTop(248); + setLeft(120); + setIconPosition("top"); + }; + d.add(lb3); + lb3.setIconPosition("bottom"); + + + var lb4 = new qx.ui.basic.Atom("Test No #4", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lb4) + { + setTop(348); + setLeft(120); + setIconPosition("bottom"); + }; + d.add(lb4); + lb4.setIconPosition("top"); + + + + + /* + ---------------------------------------------- + TEST LEVEL III + ---------------------------------------------- + */ + + var lc1 = new qx.ui.basic.Atom("Test No #1", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lc1) + { + setTop(48); + setLeft(220); + setIconPosition("left"); + }; + d.add(lc1); + lc1.setIconPosition("top"); + + + var lc2 = new qx.ui.basic.Atom("Test No #2", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lc2) + { + setTop(148); + setLeft(220); + setIconPosition("right"); + }; + d.add(lc2); + lc2.setIconPosition("bottom"); + + + var lc3 = new qx.ui.basic.Atom("Test No #3", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lc3) + { + setTop(248); + setLeft(220); + setIconPosition("top"); + }; + d.add(lc3); + lc3.setIconPosition("right"); + + + var lc4 = new qx.ui.basic.Atom("Test No #4", "icon/16/apps/preferences-desktop-multimedia.png"); + with(lc4) + { + setTop(348); + setLeft(220); + setIconPosition("bottom"); + }; + d.add(lc4); + lc4.setIconPosition("left"); + + + + + /* + ---------------------------------------------- + TEST LEVEL IV + ---------------------------------------------- + */ + + var ld1 = new qx.ui.basic.Atom("Test No #1", "icon/16/apps/preferences-desktop-multimedia.png"); + with(ld1) + { + setTop(48); + setLeft(320); + setIconPosition("left"); + }; + d.add(ld1); + ld1.setIconPosition("bottom"); + + + var ld2 = new qx.ui.basic.Atom("Test No #2", "icon/16/apps/preferences-desktop-multimedia.png"); + with(ld2) + { + setTop(148); + setLeft(320); + setIconPosition("right"); + }; + d.add(ld2); + ld2.setIconPosition("top"); + + + var ld3 = new qx.ui.basic.Atom("Test No #3", "icon/16/apps/preferences-desktop-multimedia.png"); + with(ld3) + { + setTop(248); + setLeft(320); + setIconPosition("top"); + }; + d.add(ld3); + ld3.setIconPosition("left"); + + + var ld4 = new qx.ui.basic.Atom("Test No #4", "icon/16/apps/preferences-desktop-multimedia.png"); + with(ld4) + { + setTop(348); + setLeft(320); + setIconPosition("bottom"); + }; + d.add(ld4); + ld4.setIconPosition("right"); + + + + + + /* + ---------------------------------------------- + TEST LEVEL V + ---------------------------------------------- + */ + + var le1 = new qx.ui.basic.Atom("Test No #1", "icon/16/apps/preferences-desktop-multimedia.png"); + with(le1) + { + setTop(48); + setLeft(420); + setIconPosition("right"); + }; + d.add(le1); + le1.setIconPosition("top"); + + + var le2 = new qx.ui.basic.Atom("Test No #2", "icon/16/apps/preferences-desktop-multimedia.png"); + with(le2) + { + setTop(148); + setLeft(420); + setIconPosition("left"); + }; + d.add(le2); + le2.setIconPosition("bottom"); + + + var le3 = new qx.ui.basic.Atom("Test No #3", "icon/16/apps/preferences-desktop-multimedia.png"); + with(le3) + { + setTop(248); + setLeft(420); + setIconPosition("top"); + }; + d.add(le3); + le3.setIconPosition("right"); + + + var le4 = new qx.ui.basic.Atom("Test No #4", "icon/16/apps/preferences-desktop-multimedia.png"); + with(le4) + { + setTop(348); + setLeft(420); + setIconPosition("bottom"); + }; + d.add(le4); + le4.setIconPosition("left"); + + + + + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_2.html new file mode 100644 index 0000000000..5dcd5af424 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_2.html @@ -0,0 +1,187 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Example to show correct calculations of qx.ui.basic.Atom sizes. Normally a qx.ui.basic.Atom has only the size of its content.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var w = qx.ui.core.ClientDocument.getInstance(); + + + function alertoff() { + alert(this.getElement().offsetWidth + "x" + this.getElement().offsetHeight); + }; + + var l1 = new qx.ui.layout.CanvasLayout(); + var l2 = new qx.ui.layout.CanvasLayout(); + + with(l1) + { + setTop(100); + setLeft(20); + setWidth(500); + setHeight(1); + setBackgroundColor("red"); + setOverflow("hidden"); + }; + + with(l2) + { + setTop(123); + setLeft(20); + setWidth(500); + setHeight(1); + setBackgroundColor("red"); + setOverflow("hidden"); + }; + + w.add(l1); + w.add(l2); + + + + var a1 = new qx.ui.basic.Atom("Pure Text", "icon/22/places/folder.png"); + var a2 = new qx.ui.basic.Atom(null, "icon/22/places/folder.png"); + + with(a1) { + setBorder(new qx.renderer.border.Border(1, "solid", "black")); + setTop(100); + setLeft(120); + }; + + with(a2) { + setBorder(new qx.renderer.border.Border(1, "solid", "black")); + setTop(100); + setLeft(300); + }; + + w.add(a1); + w.add(a2); + + a1.addEventListener("click", alertoff); + a2.addEventListener("click", alertoff); + + + + var l3 = new qx.ui.layout.CanvasLayout(); + var l4 = new qx.ui.layout.CanvasLayout(); + + with(l3) + { + setTop(200); + setLeft(20); + setWidth(500); + setHeight(1); + setBackgroundColor("red"); + setOverflow("hidden"); + }; + + with(l4) + { + setTop(233); + setLeft(20); + setWidth(500); + setHeight(1); + setBackgroundColor("red"); + setOverflow("hidden"); + }; + + w.add(l3); + w.add(l4); + + + var b1 = new qx.ui.basic.Atom("Pure Text", "icon/32/categories/applications-internet.png"); + var b2 = new qx.ui.basic.Atom(null, "icon/32/categories/applications-internet.png"); + + with(b1) { + setBorder(new qx.renderer.border.Border(1, "solid", "black")); + setTop(200); + setLeft(120); + }; + + with(b2) { + setBorder(new qx.renderer.border.Border(1, "solid", "black")); + setTop(200); + setLeft(300); + }; + + w.add(b1); + w.add(b2); + + b1.addEventListener("click", alertoff); + b2.addEventListener("click", alertoff); + + + + + + + var l5 = new qx.ui.layout.CanvasLayout(); + var l6 = new qx.ui.layout.CanvasLayout(); + + with(l5) + { + setTop(300); + setLeft(20); + setWidth(500); + setHeight(1); + setBackgroundColor("red"); + setOverflow("hidden"); + }; + + with(l6) + { + setTop(317); + setLeft(20); + setWidth(500); + setHeight(1); + setBackgroundColor("red"); + setOverflow("hidden"); + }; + + w.add(l5); + w.add(l6); + + + var c1 = new qx.ui.basic.Atom("Pure Text", "icon/16/categories/applications-internet.png"); + var c2 = new qx.ui.basic.Atom(null, "icon/16/categories/applications-internet.png"); + + with(c1) { + setBorder(new qx.renderer.border.Border(1, "solid", "black")); + setTop(300); + setLeft(120); + }; + + with(c2) { + setBorder(new qx.renderer.border.Border(1, "solid", "black")); + setTop(300); + setLeft(300); + }; + + w.add(c1); + w.add(c2); + + c1.addEventListener("click", alertoff); + c2.addEventListener("click", alertoff); + + + + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_3.html new file mode 100644 index 0000000000..49f2595ced --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_3.html @@ -0,0 +1,322 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Layout tests for qx.ui.basic.Atom reimplementation.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + var a1 = new qx.ui.basic.Atom; + a1.setLabel("hello world"); + a1.setTop(48); + a1.setLeft(20); + a1.setPadding(2, 4); + a1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(a1); + + var a2 = new qx.ui.basic.Atom; + a2.setIcon("icon/32/actions/system-run.png"); + a2.setTop(48); + a2.setLeft(120); + a2.setPadding(2, 4); + a2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(a2); + + + + + var b1 = new qx.ui.basic.Atom; + b1.setLabel("hello world"); + b1.setIcon("icon/32/actions/system-run.png"); + b1.setIconPosition("left"); + b1.setTop(100); + b1.setLeft(20); + b1.setPadding(2, 4); + b1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(b1); + + var b2 = new qx.ui.basic.Atom; + b2.setLabel("hello world"); + b2.setIcon("icon/32/actions/system-run.png"); + b2.setIconPosition("top"); + b2.setTop(100); + b2.setLeft(120); + b2.setPadding(2, 4); + b2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(b2); + + var b3 = new qx.ui.basic.Atom; + b3.setLabel("hello world"); + b3.setIcon("icon/32/actions/system-run.png"); + b3.setIconPosition("right"); + b3.setTop(100); + b3.setLeft(220); + b3.setPadding(2, 4); + b3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(b3); + + var b4 = new qx.ui.basic.Atom; + b4.setLabel("hello world"); + b4.setIcon("icon/32/actions/system-run.png"); + b4.setIconPosition("bottom"); + b4.setTop(100); + b4.setLeft(320); + b4.setPadding(2, 4); + b4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(b4); + + + + + var c1 = new qx.ui.basic.Atom; + c1.setLabel("hello world"); + c1.setIcon("icon/32/actions/system-run.png"); + c1.setShow("icon"); + c1.setTop(180); + c1.setLeft(20); + c1.setPadding(2, 4); + c1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(c1); + + var c2 = new qx.ui.basic.Atom; + c2.setLabel("hello world"); + c2.setIcon("icon/32/actions/system-run.png"); + c2.setShow("label"); + c2.setTop(180); + c2.setLeft(120); + c2.setPadding(2, 4); + c2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(c2); + + + + + + var d1 = new qx.ui.basic.Atom; + d1.setLabel("hello world"); + d1.setIcon("icon/32/actions/system-run.png"); + d1.setShow("icon"); + d1.setTop(250); + d1.setLeft(20); + d1.setPadding(2, 4); + d1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(d1); + d1.setShow("both"); + + var d2 = new qx.ui.basic.Atom; + d2.setLabel("hello world"); + d2.setIcon("icon/32/actions/system-run.png"); + d2.setShow("label"); + d2.setTop(250); + d2.setLeft(120); + d2.setPadding(2, 4); + d2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(d2); + d2.setShow("both"); + + var d3 = new qx.ui.basic.Atom; + d3.setLabel("hello world"); + d3.setIcon("icon/32/actions/system-run.png"); + d3.setShow("none"); + d3.setTop(250); + d3.setLeft(220); + d3.setPadding(2, 4); + d3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(d3); + d3.setShow("both"); + + + + + var e1 = new qx.ui.basic.Atom; + e1.setIcon("icon/32/actions/system-run.png"); + e1.setShow("none"); + e1.setTop(300); + e1.setLeft(20); + e1.setPadding(2, 4); + e1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(e1); + e1.setShow("both"); + e1.setLabel("hello world"); + + var e2 = new qx.ui.basic.Atom; + e2.setLabel("hello world"); + e2.setShow("none"); + e2.setTop(300); + e2.setLeft(120); + e2.setPadding(2, 4); + e2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(e2); + e2.setShow("both"); + e2.setIcon("icon/32/actions/system-run.png"); + + var e3 = new qx.ui.basic.Atom; + e3.setShow("none"); + e3.setTop(300); + e3.setLeft(220); + e3.setPadding(2, 4); + e3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(e3); + e3.setShow("both"); + e3.setIcon("icon/32/actions/system-run.png"); + e3.setLabel("hello world"); + + var e4 = new qx.ui.basic.Atom; + e4.setShow("none"); + e4.setTop(300); + e4.setLeft(320); + e4.setPadding(2, 4); + e4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(e4); + e4.setShow("both"); + e4.setLabel("hello world"); + e4.setIcon("icon/32/actions/system-run.png"); + + + + + var f1 = new qx.ui.basic.Atom; + f1.setLabel("hello world"); + f1.setIcon("icon/32/actions/system-run.png"); + f1.setIconPosition("left"); + f1.setTop(350); + f1.setLeft(20); + f1.setPadding(2, 4); + f1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(f1); + f1.setIconPosition("top"); + + var f2 = new qx.ui.basic.Atom; + f2.setLabel("hello world"); + f2.setIcon("icon/32/actions/system-run.png"); + f2.setIconPosition("left"); + f2.setTop(350); + f2.setLeft(120); + f2.setPadding(2, 4); + f2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(f2); + f2.setIconPosition("right"); + + var f3 = new qx.ui.basic.Atom; + f3.setLabel("hello world"); + f3.setIcon("icon/32/actions/system-run.png"); + f3.setIconPosition("left"); + f3.setTop(350); + f3.setLeft(220); + f3.setPadding(2, 4); + f3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(f3); + f3.setIconPosition("bottom"); + + + + + var g1 = new qx.ui.basic.Atom; + g1.setLabel("hello world"); + g1.setIcon("icon/32/actions/system-run.png"); + g1.setIconPosition("top"); + g1.setTop(450); + g1.setLeft(20); + g1.setPadding(2, 4); + g1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(g1); + g1.setIconPosition("right"); + + var g2 = new qx.ui.basic.Atom; + g2.setLabel("hello world"); + g2.setIcon("icon/32/actions/system-run.png"); + g2.setIconPosition("top"); + g2.setTop(450); + g2.setLeft(120); + g2.setPadding(2, 4); + g2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(g2); + g2.setIconPosition("bottom"); + + var g3 = new qx.ui.basic.Atom; + g3.setLabel("hello world"); + g3.setIcon("icon/32/actions/system-run.png"); + g3.setIconPosition("top"); + g3.setTop(450); + g3.setLeft(220); + g3.setPadding(2, 4); + g3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(g3); + g3.setIconPosition("left"); + + + + + + + var h1 = new qx.ui.basic.Atom; + h1.setLabel("hello world"); + h1.setIcon("icon/32/actions/system-run.png"); + h1.setIconPosition("left"); + h1.setTop(520); + h1.setLeft(20); + h1.setPadding(2, 4); + h1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(h1); + h1.setSpacing(20); + + + var h2 = new qx.ui.basic.Atom; + h2.setLabel("hello world"); + h2.setIcon("icon/32/actions/system-run.png"); + h2.setIconPosition("top"); + h2.setTop(520); + h2.setLeft(150); + h2.setPadding(2, 4); + h2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + d.add(h2); + h2.setSpacing(20); + + + + + + + var i1 = new qx.ui.basic.Atom; + i1.setLabel("hello world"); + i1.setIcon("icon/32/actions/system-run.png"); + i1.setIconPosition("left"); + i1.setTop(600); + i1.setLeft(20); + i1.setPadding(2, 4); + i1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + i1.setHeight(150); + i1.setWidth(150); + d.add(i1); + + var i2 = new qx.ui.basic.Atom; + i2.setLabel("hello world"); + i2.setIcon("icon/32/actions/system-run.png"); + i2.setIconPosition("top"); + i2.setTop(600); + i2.setLeft(200); + i2.setPadding(2, 4); + i2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + i2.setWidth(150); + i2.setHeight(150); + d.add(i2); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_4.html new file mode 100644 index 0000000000..8e260675e6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_4.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var icons = [ + "apps/accessories-clock", + "categories/applications-graphics", + "apps/accessories-date", + "places/folder", + "apps/accessories-tip", + "apps/preferences-desktop-accessibility" + ]; + var sizes = [ 16, 22, 32, 48, 64, 48, 32, 22, 16 ]; + + var atom; + var toppos = 48; + + for (var j=0; j<sizes.length; j++) + { + for (var i=0; i<icons.length; i++) + { + atom = new qx.ui.basic.Atom("Atom " + (i+1) + "." + (j+1), "icon/" + sizes[j] + "/" + icons[i] + ".png"); + + atom.setTop(toppos); + atom.setLeft(20 + (120 *i)); + + d.add(atom); + }; + + toppos += sizes[j] + 20; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_5.html new file mode 100644 index 0000000000..7fa55f0fdf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_5.html @@ -0,0 +1,43 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Adding many qx.ui.basic.Atom widgets without setting the icon-width and -height.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var atom; + var toppos = 48; + + for (var i=0; i<20; i++) + { + for (var j=0; j<10; j++) + { + atom = new qx.ui.basic.Atom("Date", "icon/16/apps/accessories-date.png"); + + atom.setTop(toppos); + atom.setLeft(20 + (j*50)); + + d.add(atom); + }; + + toppos += 20; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_6.html new file mode 100644 index 0000000000..e750651489 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_6.html @@ -0,0 +1,43 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Adding many qx.ui.basic.Atom widgets setting the icon-width and -height.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var atom; + var toppos = 48; + + for (var i=0; i<20; i++) + { + for (var j=0; j<10; j++) + { + atom = new qx.ui.basic.Atom("Date", "icon/16/apps/accessories-date.png", 16, 16); + + atom.setTop(toppos); + atom.setLeft(20 + (j*50)); + + d.add(atom); + }; + + toppos += 20; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_7.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_7.html new file mode 100644 index 0000000000..d720d9a032 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_7.html @@ -0,0 +1,43 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var atom; + var toppos = 48; + + for (var i=0; i<20; i++) + { + for (var j=0; j<10; j++) + { + atom = new qx.ui.basic.Atom(null, "icon/16/apps/accessories-date.png", 16, 16); + + atom.setTop(toppos); + atom.setLeft(20 + (j*50)); + + d.add(atom); + }; + + toppos += 20; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_8.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_8.html new file mode 100644 index 0000000000..211b756dda --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_8.html @@ -0,0 +1,43 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var atom; + var toppos = 48; + + for (var i=0; i<20; i++) + { + for (var j=0; j<10; j++) + { + atom = new qx.ui.basic.Atom("Date"); + + atom.setTop(toppos); + atom.setLeft(20 + (j*50)); + + d.add(atom); + }; + + toppos += 20; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_9.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_9.html new file mode 100644 index 0000000000..6eb49319e6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Atom_9.html @@ -0,0 +1,44 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + This uses qx.ui.basic.Label instead of qx.ui.basic.Atom for text only display. Stored as Atom test file + because this way we could compare it to the previous test file. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var atom; + var toppos = 48; + + for (var i=0; i<20; i++) + { + for (var j=0; j<10; j++) + { + atom = new qx.ui.basic.Label("Date"); + + atom.setTop(toppos); + atom.setLeft(20 + (j*50)); + + d.add(atom); + }; + + toppos += 20; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Border_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Border_1.html new file mode 100644 index 0000000000..173a5a05c9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Border_1.html @@ -0,0 +1,177 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.renderer.border.Border, a cross-browser advanced border engine. + Each instance of qx.renderer.border.Border allows to affect multiple QxTerminators. + When the one property of the qx.renderer.border.Border change, it informs all bounded + QxTerminators to rerender the border.</p> + + <p>The qx.renderer.border.Border constructor also allows you to convert a string + (css-like) into and qx.renderer.border.Border instance (last example).</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + + var c1 = new qx.ui.basic.Terminator; + with(c1) + { + setTop(48); + setLeft(20); + setWidth(150); + setHeight(40); + setBackgroundColor(new qx.renderer.color.Color("#fff")); + }; + d.add(c1); + + var c2 = new qx.ui.basic.Terminator; + with(c2) + { + setTop(48); + setLeft(200); + setWidth(150); + setHeight(40); + setBackgroundColor(new qx.renderer.color.Color("#fff")); + }; + d.add(c2); + + var b1 = new qx.renderer.border.Border; + + // before set border properties + c1.setBorder(b1); + + b1.setWidth(2); + b1.setStyle("solid"); + b1.setColor(new qx.renderer.color.Color("black")); + b1.setBottomStyle("dotted"); + b1.setTopColor(new qx.renderer.color.Color("blue")); + + // after set border properties + c2.setBorder(b1); + + + + + + + + + var c3 = new qx.ui.basic.Terminator; + with(c3) + { + setTop(110); + setLeft(20); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c3); + + c3.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + + var c4 = new qx.ui.basic.Terminator; + with(c4) + { + setTop(110); + setLeft(80); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c4); + + c4.setBorder(qx.renderer.border.BorderPresets.getInstance().thinOutset); + + var c5 = new qx.ui.basic.Terminator; + with(c5) + { + setTop(110); + setLeft(140); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c5); + + c5.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + + + var c6 = new qx.ui.basic.Terminator; + with(c6) + { + setTop(110); + setLeft(200); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c6); + + c6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + + + var c7 = new qx.ui.basic.Terminator; + with(c7) + { + setTop(110); + setLeft(260); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c7); + + c7.setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + + var c8 = new qx.ui.basic.Terminator; + with(c8) + { + setTop(110); + setLeft(320); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c8); + + c8.setBorder(qx.renderer.border.BorderPresets.getInstance().ridge); + + + + var c9 = new qx.ui.basic.Terminator; + with(c9) + { + setTop(110); + setLeft(380); + setWidth(40); + setHeight(40); + setBackgroundColor(new qx.renderer.color.ColorObject("threedface")); + }; + d.add(c9); + + var b2 = qx.renderer.border.Border.fromString("2px solid red"); + c9.setBorder(b2); + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 248); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/BoxLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/BoxLayout_1.html new file mode 100644 index 0000000000..b85f7224d3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/BoxLayout_1.html @@ -0,0 +1,283 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="testCommand" class="manualFrame"> + <style type="text/css"> + #testCommand{ + position: absolute; + right: 335px; + bottom: 48px; + width: 350px; + } + + .setform select{ + font-size: 11px; + min-width: 75px; + } + + .setform button{ + font-size: 11px; + } + </style> + + <table class="setform"><tbody> + + <tr> + <td> + <label for="sel_orientation">Orientation:</label> + </td> + <td> + <select id="sel_orientation"> + <option selected="selected">horizontal</option> + <option>vertical</option> + </select> + </td> + </tr> + + <tr> + <td>Width/Height:</td> + <td> + <select id="sel_width"> + <option>100</option> + <option selected="selected">250</option> + <option>500</option> + <option>auto</option> + </select> + <select id="sel_height"> + <option>100</option> + <option selected="selected">250</option> + <option>500</option> + <option>auto</option> + </select> + </td> + </tr> + + <tr> + <td>Spacing/Padding:</td> + <td> + <select id="sel_spacing"> + <option selected="selected">0</option> + <option>2</option> + <option>4</option> + <option>8</option> + </select> + <select id="sel_padding"> + <option selected="selected">0</option> + <option>2</option> + <option>4</option> + <option>8</option> + </select> + </td> + </tr> + + <tr> + <td> + <label for="sel_order">Order/Stretching:</label> + </td> + <td> + <select id="sel_order"> + <option selected="selected">default</option> + <option>reverse</option> + </select> + <select id="sel_stretch"> + <option selected="selected">enabled</option> + <option>disabled</option> + </select> + </td> + </tr> + + <tr> + <td>Horizontal/Vertical Align:</td> + <td> + <select id="sel_horalg"> + <option selected="selected">left</option> + <option>center</option> + <option>right</option> + </select> + <select id="sel_veralg"> + <option selected="selected">top</option> + <option>middle</option> + <option>bottom</option> + </select> + </td> + </tr> + + <tr> + <td> </td> + <td> + <button id="btn_save">Apply</button> + </td> + </tr> + + </tbody></table> + + <p><b>Tests</b></p> + <ul> + <li><a href="javascript:test1()">Test 1: Remove blue widget</a></li> + <li><a href="javascript:test2()">Test 2: Add blue widget</a></li> + <li><a href="javascript:test3()">Test 3: Add blue widget at position 2</a></li> + <li><a href="javascript:test4()">Test 4: Add blue widget at position 4</a></li> + <li><a href="javascript:test5()">Test 5: Add green widget at before the cdrom</a></li> + <li><a href="javascript:test6()">Test 6: Add green widget at after the color palette</a></li> + <li><a href="javascript:test7()">Test 7: Add new widget to layout</a></li> + </ul> + </div> + + <div id="demoDescription"> + <p>Now something more complex. Try to configure multiple things and then press <apply>.</p> + </div> + + <script type="text/javascript"> + + var bl, w1, w2, w3, w4, w5, w6, w7, w8; + + var _b = document.getElementById("btn_save"); + var _t = document.getElementById("sel_orientation"); + var _w = document.getElementById("sel_width"); + var _h = document.getElementById("sel_height"); + var _s = document.getElementById("sel_spacing"); + var _p = document.getElementById("sel_padding"); + var _o = document.getElementById("sel_order"); + var _r = document.getElementById("sel_stretch"); + var _l = document.getElementById("sel_horalg"); + var _v = document.getElementById("sel_veralg"); + + function save() + { + var vt = _t.options[_t.selectedIndex].firstChild.nodeValue; + var vw = _w.options[_w.selectedIndex].firstChild.nodeValue; + var vh = _h.options[_h.selectedIndex].firstChild.nodeValue; + var vs = _s.options[_s.selectedIndex].firstChild.nodeValue; + var vp = _p.options[_p.selectedIndex].firstChild.nodeValue; + var vo = _o.options[_o.selectedIndex].firstChild.nodeValue; + var vr = _r.options[_r.selectedIndex].firstChild.nodeValue; + var vl = _l.options[_l.selectedIndex].firstChild.nodeValue; + var vv = _v.options[_v.selectedIndex].firstChild.nodeValue; + + bl.setOrientation(vt); + bl.setWidth(vw == "auto" ? vw : parseInt(vw)); + bl.setHeight(vh == "auto" ? vh : parseInt(vh)); + bl.setSpacing(parseInt(vs)); + bl.setPadding(parseInt(vp)); + bl.setReverseChildrenOrder(vo == "reverse"); + bl.setStretchChildrenOrthogonalAxis(vr == "enabled"); + bl.setHorizontalChildrenAlign(vl); + bl.setVerticalChildrenAlign(vv); + }; + + if (_b.attachEvent) + _b.attachEvent("onclick", save); + else if (_b.addEventListener) + _b.addEventListener("click", save, false); + + + function test1() + { + bl.remove(w2); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test2() + { + bl.add(w2); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test3() + { + bl.addAt(w2, 2); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test4() + { + bl.addAt(w2, 4); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test5() + { + bl.addBefore(w3, w7); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test6() + { + bl.addAfter(w3, w4); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test7() + { + bl.addAt(w8, 1); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + bl = new qx.ui.layout.BoxLayout("horizontal"); + bl.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + bl.setBackgroundColor(new qx.renderer.color.Color("white")); + bl.setWidth(250); + bl.setHeight(250); + bl.setTop(48); + bl.setLeft(20); + + w1 = new qx.ui.layout.CanvasLayout; + w1.setBackgroundColor(new qx.renderer.color.Color("orange")); + w1.setMinWidth(20); + w1.setMinHeight(20); + w1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w2 = new qx.ui.layout.CanvasLayout; + w2.setBackgroundColor(new qx.renderer.color.Color("blue")); + w2.setMinWidth(20); + w2.setMinHeight(20); + w2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w3 = new qx.ui.layout.CanvasLayout; + w3.setBackgroundColor(new qx.renderer.color.Color("green")); + w3.setMinWidth(20); + w3.setMinHeight(20); + w3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w4 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + w5 = new qx.ui.layout.CanvasLayout; + w5.setBackgroundColor(new qx.renderer.color.Color("yellow")); + w5.setMinWidth(20); + w5.setMinHeight(20); + w5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w6 = new qx.ui.layout.CanvasLayout; + w6.setBackgroundColor(new qx.renderer.color.Color("red")); + w6.setMinWidth(20); + w6.setMinHeight(20); + w6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w7 = new qx.ui.basic.Image("icon/64/devices/media-optical.png"); + + w8 = new qx.ui.layout.CanvasLayout; + w8.setBackgroundColor(new qx.renderer.color.Color("fuchsia")); + w8.setMinWidth(20); + w8.setMinHeight(20); + w8.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + bl.add(w1, w2, w3, w4, w5, w6, w7); + d.add(bl); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/BoxLayout_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/BoxLayout_2.html new file mode 100644 index 0000000000..d228dc08bf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/BoxLayout_2.html @@ -0,0 +1,324 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="testCommand" class="manualFrame"> + <style type="text/css"> + #testCommand{ + position: absolute; + right: 335px; + bottom: 48px; + width: 350px; + } + + .setform select{ + font-size: 11px; + min-width: 75px; + } + + .setform button{ + font-size: 11px; + } + </style> + + <table class="setform"><tbody> + + <tr> + <td> + <label for="sel_orientation">Orientation:</label> + </td> + <td> + <select id="sel_orientation"> + <option selected="selected">horizontal</option> + <option>vertical</option> + </select> + </td> + </tr> + + <tr> + <td>Width/Height:</td> + <td> + <select id="sel_width"> + <option>100</option> + <option selected="selected">250</option> + <option>500</option> + <option>auto</option> + </select> + <select id="sel_height"> + <option>100</option> + <option selected="selected">250</option> + <option>500</option> + <option>auto</option> + </select> + </td> + </tr> + + <tr> + <td>Spacing/Padding:</td> + <td> + <select id="sel_spacing"> + <option selected="selected">0</option> + <option>2</option> + <option>4</option> + <option>8</option> + </select> + <select id="sel_padding"> + <option selected="selected">0</option> + <option>2</option> + <option>4</option> + <option>8</option> + </select> + </td> + </tr> + + <tr> + <td> + <label for="sel_order">Order/Stretching:</label> + </td> + <td> + <select id="sel_order"> + <option selected="selected">default</option> + <option>reverse</option> + </select> + <select id="sel_stretch"> + <option selected="selected">enabled</option> + <option>disabled</option> + </select> + </td> + </tr> + + <tr> + <td>Horizontal/Vertical Align:</td> + <td> + <select id="sel_horalg"> + <option selected="selected">left</option> + <option>center</option> + <option>right</option> + </select> + <select id="sel_veralg"> + <option selected="selected">top</option> + <option>middle</option> + <option>bottom</option> + </select> + </td> + </tr> + + <tr> + <td> </td> + <td> + <button id="btn_save">Apply</button> + </td> + </tr> + + </tbody></table> + + <p><b>Tests</b></p> + <ul> + <li><a href="javascript:test1()">Test 1: Remove blue widget</a></li> + <li><a href="javascript:test2()">Test 2: Add blue widget</a></li> + <li><a href="javascript:test3()">Test 3: Add blue widget at position 2</a></li> + <li><a href="javascript:test4()">Test 4: Add blue widget at position 4</a></li> + <li><a href="javascript:test5()">Test 5: Add green widget at before the cdrom</a></li> + <li><a href="javascript:test6()">Test 6: Add green widget at after the color palette</a></li> + <li><a href="javascript:test7()">Test 7: Add new widget to layout</a></li> + </ul> + </div> + + <div id="demoDescription"> + <p>Now something more complex. Try to configure multiple things and then press <apply>.</p> + <p>Added initial support for children align override: Try to click on the color palette.</p> + </div> + + <script type="text/javascript"> + + var bl, w1, w2, w3, w4, w5, w6, w7, w8; + + var _b = document.getElementById("btn_save"); + var _t = document.getElementById("sel_orientation"); + var _w = document.getElementById("sel_width"); + var _h = document.getElementById("sel_height"); + var _s = document.getElementById("sel_spacing"); + var _p = document.getElementById("sel_padding"); + var _o = document.getElementById("sel_order"); + var _r = document.getElementById("sel_stretch"); + var _l = document.getElementById("sel_horalg"); + var _v = document.getElementById("sel_veralg"); + + function save() + { + var vt = _t.options[_t.selectedIndex].firstChild.nodeValue; + var vw = _w.options[_w.selectedIndex].firstChild.nodeValue; + var vh = _h.options[_h.selectedIndex].firstChild.nodeValue; + var vs = _s.options[_s.selectedIndex].firstChild.nodeValue; + var vp = _p.options[_p.selectedIndex].firstChild.nodeValue; + var vo = _o.options[_o.selectedIndex].firstChild.nodeValue; + var vr = _r.options[_r.selectedIndex].firstChild.nodeValue; + var vl = _l.options[_l.selectedIndex].firstChild.nodeValue; + var vv = _v.options[_v.selectedIndex].firstChild.nodeValue; + + bl.setOrientation(vt); + bl.setWidth(vw == "auto" ? vw : parseInt(vw)); + bl.setHeight(vh == "auto" ? vh : parseInt(vh)); + bl.setSpacing(parseInt(vs)); + bl.setPadding(parseInt(vp)); + bl.setReverseChildrenOrder(vo == "reverse"); + bl.setStretchChildrenOrthogonalAxis(vr == "enabled"); + bl.setHorizontalChildrenAlign(vl); + bl.setVerticalChildrenAlign(vv); + }; + + if (_b.attachEvent) + _b.attachEvent("onclick", save); + else if (_b.addEventListener) + _b.addEventListener("click", save, false); + + + function test1() + { + bl.remove(w2); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test2() + { + bl.add(w2); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test3() + { + bl.addAt(w2, 2); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test4() + { + bl.addAt(w2, 4); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test5() + { + bl.addBefore(w3, w7); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test6() + { + bl.addAfter(w3, w4); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + function test7() + { + bl.addAt(w8, 3); + qx.ui.core.Widget.flushGlobalQueues(); + }; + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + bl = new qx.ui.layout.BoxLayout("horizontal"); + bl.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + bl.setBackgroundColor(new qx.renderer.color.Color("white")); + bl.setWidth(250); + bl.setHeight(250); + bl.setTop(48); + bl.setLeft(20); + + w1 = new qx.ui.layout.CanvasLayout; + w1.setBackgroundColor(new qx.renderer.color.Color("orange")); + w1.setMinWidth(20); + w1.setMinHeight(20); + w1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1.setAllowStretchX(false); + w1.setAllowStretchY(false); + w1.setVerticalAlign("middle"); + w1.setHorizontalAlign("center"); + + w2 = new qx.ui.layout.CanvasLayout; + w2.setBackgroundColor(new qx.renderer.color.Color("blue")); + w2.setMinWidth(20); + w2.setMinHeight(20); + w2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2.setAllowStretchX(false); + w2.setHorizontalAlign("center"); + + w3 = new qx.ui.layout.CanvasLayout; + w3.setBackgroundColor(new qx.renderer.color.Color("green")); + w3.setMinWidth(20); + w3.setMinHeight(20); + w3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3.setAllowStretchY(false); + w3.setVerticalAlign("middle"); + + w4 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + w4.setVerticalAlign("bottom"); + w4.setHorizontalAlign("right"); + + w5 = new qx.ui.layout.CanvasLayout; + w5.setBackgroundColor(new qx.renderer.color.Color("yellow")); + w5.setMinWidth(20); + w5.setMinHeight(20); + w5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w6 = new qx.ui.layout.CanvasLayout; + w6.setBackgroundColor(new qx.renderer.color.Color("red")); + w6.setMinWidth(20); + w6.setMinHeight(20); + w6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + w7 = new qx.ui.basic.Image("icon/64/devices/media-optical.png"); + w7.setVerticalAlign("middle"); + w7.setHorizontalAlign("center"); + + w8 = new qx.ui.layout.CanvasLayout; + w8.setBackgroundColor(new qx.renderer.color.Color("fuchsia")); + w8.setMinWidth(20); + w8.setMinHeight(20); + w8.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + + w4.addEventListener("click", function() + { + var h, v; + + switch(this.getHorizontalAlign()) + { + case "center": + h = "right"; + v = "bottom"; + break; + + case "right": + h = "left"; + v = "top"; + break; + + default: + h = "center"; + v = "middle"; + }; + + this.setHorizontalAlign(h); + this.setVerticalAlign(v); + }); + + + + bl.add(w1, w2, w3, w4, w5, w6, w7); + d.add(bl); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_1.html new file mode 100644 index 0000000000..290bb6e8b0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_1.html @@ -0,0 +1,73 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() { + new qx.util.GuiBuilder().build(qx.ui.core.ClientDocument.getInstance(), document.getElementById('widgets')); + }); + + // test delegate object + var d = { + hello : 'world', + click : function(e) { + alert(e + '\n\nclick received at delegate object\n\n' + this.hello); + } + } + + // test delegate function + var f = function(e) { + alert(e + '\n\nclick received at delegate function\n\n'); + } + </script> + <div id="demoDescription"> + <p>qx.util.GuiBuilder demo.</p> + <p>Build your web apps using qooxdooml.</p> + <p>Textarea example</p> + </div> + <textarea id='widgets' style='display:none'> + <qx.client.builder.Container> + <qx.ui.form.Button id='btn' label='Click Me!!!' location='20,50'> + + <!-- function body event listener --> + <qx.client.builder.EventListener type='click' args='event'> + btn.setLabel(btn.getLabel() + "."); + alert(event + "\n\nClicked on: " + this.getLabel()); + </qx.client.builder.EventListener> + + <!-- + global object.method delegation + when the button is clicked, d.click(event) will be called + --> + <qx.client.builder.EventListener type='click' delegate='d.click'/> + + <!-- + global function delegation + when the button is clicked, f(event) will be called + --> + <qx.client.builder.EventListener type='click' delegate='f'/> + + </qx.ui.form.Button> + <qx.ui.basic.Atom id='atom1' label='Test No #1' icon='icon/16/apps/graphics-snapshot.png' border='qx.renderer.border.BorderPresets.getInstance().black' location='20,90'/> + + <qx.ui.form.Button label='Test No #2' icon='icon/16/apps/graphics-snapshot.png' location='20,120'> + <qx.client.builder.EventListener type='click'> + atom1.setLabel(atom1.getLabel() + "."); + </qx.client.builder.EventListener> + </qx.ui.form.Button> + <qx.ui.basic.Atom label='Test No #3' icon='icon/16/apps/graphics-snapshot.png' location='20,160'/> + <qx.ui.basic.Atom label='a' icon='icon/16/apps/graphics-snapshot.png' location='20,200'/> + <qx.ui.basic.Atom label='b' icon='icon/16/apps/graphics-snapshot.png' location='20,240'/> + </qx.client.builder.Container> + </textarea> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_2.html new file mode 100644 index 0000000000..d04ddbeb96 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_2.html @@ -0,0 +1,25 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() { + new qx.util.GuiBuilder().buildFromUrl(qx.ui.core.ClientDocument.getInstance(), 'Builder_2.xml'); + }); + </script> + <div id="demoDescription"> + <p>qx.util.GuiBuilder demo.</p> + <p>Build your web apps using qooxdooml.</p> + <p>XmlHttp Example</p> + </div> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_2.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_2.xml new file mode 100644 index 0000000000..e440ac2a3b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_2.xml @@ -0,0 +1,51 @@ +<qx.client.builder.Container> + <qx.ui.form.Button id='btn' label='Click Me!!!' location='20,50'> + + <!-- function body event listener --> + <qx.client.builder.EventListener type='click' args='event'> + btn.setLabel(btn.getLabel() + "."); + alert(event + "\n\nClicked on: " + this.getLabel()); + </qx.client.builder.EventListener> + + <!-- + global object.method delegation + when the button is clicked, d.click(event) will be called + --> + <qx.client.builder.EventListener type='click' delegate='d.click'/> + + <!-- + global function delegation + when the button is clicked, f(event) will be called + --> + <qx.client.builder.EventListener type='click' delegate='f'/> + + </qx.ui.form.Button> + <qx.ui.basic.Atom id='atom1' label='Test No #1' icon='icon/16/penguin.png' border='qx.renderer.border.BorderPresets.black' location='20,90'/> + + <qx.ui.form.Button label='Test No #2' icon='icon/16/penguin.png' location='20,120'> + <qx.client.builder.EventListener type='click'> + atom1.setLabel(atom1.getLabel() + "."); + </qx.client.builder.EventListener> + </qx.ui.form.Button> + + <qx.ui.basic.Atom label='Test No #3' icon='icon/16/penguin.png' location='20,160'/> + + <qx.ui.basic.Atom label='a' icon='icon/16/penguin.png' location='20,200'/> + <qx.ui.basic.Atom label='b' icon='icon/16/penguin.png' location='20,240'/> + + + <qx.client.builder.Script> + // test delegate function + var f = function(e) { + alert(e + '\n\nclick received at delegate function\n\n'); + } + + // test delegate object + var d = { + hello : 'world', + click : function(e) { + alert(e + '\n\nclick received at delegate object\n\n' + this.hello); + } + } + </qx.client.builder.Script> +</qx.client.builder.Container> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_3.html new file mode 100644 index 0000000000..49254bf003 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_3.html @@ -0,0 +1,26 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() { + new qx.util.GuiBuilder().buildFromUrl(qx.ui.core.ClientDocument.getInstance(), 'Builder_3.xml'); + }); + </script> + <div id="demoDescription"> + <p>qx.util.GuiBuilder demo.</p> + <p>Build your web apps using qooxdooml.</p> + <p>Property Editor Example</p> + </div> +</body> +</html> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_3.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_3.xml new file mode 100644 index 0000000000..8c1e95f382 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_3.xml @@ -0,0 +1,33 @@ +<qx.client.builder.Container> + <qx.ui.menu.Menu id='m2'> + <qx.ui.menu.Button label='New Window'/> + <qx.ui.menu.Button label='Overlapping'/> + <qx.ui.menu.Button label='Split Vertical'/> + <qx.ui.menu.Button label='Split Horizontal'/> + <qx.ui.menu.Button label='Next Window'/> + <qx.ui.menu.Button label='Previous Window'/> + </qx.ui.menu.Menu> + + <qx.ui.menu.Menu id='m1'> + <qx.ui.menu.Button label='View/Lists'/> + <qx.ui.menu.Button label='Syntax Highlighting'/> + <qx.ui.menu.Separator/> + <qx.ui.menu.Button label='Window Font'/> + <qx.ui.menu.Button label='Printer Font' menu='m2'/> + </qx.ui.menu.Menu> + + <qx.ui.form.Button id='btn' label='Reference Property' location='20,48'> + <qx.client.builder.EventListener type='click' args='e'> + var el = this.getElement(); + m1.setLeft(qx.dom.Location.getPageBoxLeft(el)); + m1.setTop(qx.dom.Location.getPageBoxBottom(el)); ; + m1.show(); + e.setPropagationStopped(true); + </qx.client.builder.EventListener> + <qx.client.builder.EventListener type='mousedown' args='e'> + e.setPropagationStopped(true); + </qx.client.builder.EventListener> + </qx.ui.form.Button> + + <qx.ui.basic.Atom label='Comma Delimited Property & Eval Property ' location='140,48' backgroundColor='#BDD2EF' dimension='220,220' border='qx.renderer.border.BorderPresets.outset'/> +</qx.client.builder.Container> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_4.html new file mode 100644 index 0000000000..827129a64b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Builder_4.html @@ -0,0 +1,42 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() { + new qx.util.GuiBuilder().build(qx.ui.core.ClientDocument.getInstance(), document.getElementById('widgets')); + }); + </script> + <div id="demoDescription"> + <p>qx.util.GuiBuilder demo.</p> + <p>2 Format Example</p> + </div> + <textarea id='widgets' style='display:none'> + <qx.client.builder.Container> + <qx.ui.basic.Atom id="linfo" label="Current Value" icon="icon/16/actions/go-next.png" border="qx.renderer.border.BorderPresets.getInstance().black" padding="2,4" backgroundColor="white" top="48" left="20"/> + <qx.manager.selection.RadioManager id='_rm1' name="mygroup"> + <qx.client.builder.EventListener type='changeSelected' args='e'> + linfo.setLabel("Current Value: \"" + e.getData().getLabel() + "\" (" + e.getData().getValue() + ")"); + </qx.client.builder.EventListener> + </qx.manager.selection.RadioManager> + <qx.ui.form.RadioButton qxtype="radioButton" label="Option #1" value="rb1" location="20,80" manager="_rm1"/> + <qx.ui.form.RadioButton label="Option #2" value="rb2" location="20,110" manager="_rm1" checked="true"/> + <div qxtype="qx.ui.form.RadioButton" label="Top RadioButton" value="rb3" location="20,160" manager="_rm1" iconPosition="top"/> + <qx.ui.form.RadioButton label="Bottom RadioButton" value="rb4" location="160,160" manager="_rm1" iconPosition="bottom"/> + <qx.ui.form.RadioButton label="Left RadioButton" value="rb5" location="20,220" manager="_rm1" iconPosition="left"/> + <qx.ui.form.RadioButton label="Right RadioButton" value="rb6" location="160,220" manager="_rm1" iconPosition="right"/> + <qx.ui.form.RadioButton value="rb7" location="20,280" manager="_rm1"/> + </qx.client.builder.Container> + </textarea> +</body> +</html> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Button_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Button_1.html new file mode 100644 index 0000000000..4627769566 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Button_1.html @@ -0,0 +1,44 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the new flash support for QxButtons (inherited from qx.ui.basic.Atom).</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + var a; + + for (var i=1; i<11; i++) + { + var b = new qx.ui.form.Button("Flash Button #" + i, "icon/16/actions/view-refresh.png", 16, 16, "./image/flash/color/file" + i + ".swf"); + + b.setTop(48 + ((i-1)*30)); + b.setLeft(20); + + d.add(b); + }; + + var b = new qx.ui.form.Button("Big Rotated", "icon/48/actions/view-refresh.png", 48, 48, "./image/flash/color/file3.swf"); + + b.setTop(48); + b.setLeft(200); + b.setIconPosition("top"); + + d.add(b); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CSS_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CSS_1.html new file mode 100644 index 0000000000..fd60f55c0b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CSS_1.html @@ -0,0 +1,110 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + + <style type="text/css"> + + .box { + position: absolute; + width: 100px; + height: 100px; + left: 30px; + top: 40px; + color: white; + padding: 5px; + } + + #box1 { + background-color: red; + } + + #box2 { + background-color: blue; + top: 200px; + left: 100px; + } + + </style> + +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some tests of qx.html.StyleSheet</p> + </div> + + + <div id="box1" class="box"> + Box 1 + </div> + + <div id="box2" class="box"> + Box 2 + </div> + + <div style="display:none" id="control"> + <p> + <h3>Box 1</h3> + <a href="javascript://" onclick="qx.html.StyleSheet.addRule(sheet, '#box1', 'background-color:green !important');">qx.html.StyleSheet.addRule(style, '#box1', 'background-color:green !important')</a> <br> + <a href="javascript://" onclick="qx.html.StyleSheet.removeRule(sheet, '#box1');">qx.html.StyleSheet.removeRule(sheet, '#box1')</a> <br> + </p> + <h3>Box 1</h3> + <a href="javascript://" onclick="qx.html.StyleSheet.addRule(sheet, '#box2', 'background-color:yellow !important');">qx.html.StyleSheet.addRule(style, '#box2', 'background-color:yellow !important')</a> <br> + <a href="javascript://" onclick="qx.html.StyleSheet.removeRule(sheet, '#box2');">qx.html.StyleSheet.removeRule(sheet, '#box2')</a> <br> + <p> + <h3>All</h3> + <a href="javascript://" onclick="qx.html.StyleSheet.removeAllRules(sheet)">qx.html.StyleSheet.removeAllRules(sheet)</a> <br> + </p> + <p> + <h3>Import</h3> + add Import <br> + <a href="javascript://" onclick="qx.html.StyleSheet.addImport(sheet, 'bigFont.css')">qx.html.StyleSheet.addImport(sheet, 'bigFont.css')</a> <br> + <a href="javascript://" onclick="qx.html.StyleSheet.addImport(sheet, 'boldFont.css')">qx.html.StyleSheet.addImport(sheet, 'boldFont.css')</a> <br> + remove Import<br> + <a href="javascript://" onclick="qx.html.StyleSheet.removeImport(sheet, 'bigFont.css')">qx.html.StyleSheet.removeImport(sheet, 'bigFont.css')</a> <br> + <a href="javascript://" onclick="qx.html.StyleSheet.removeImport(sheet, 'boldFont.css')">qx.html.StyleSheet.removeImport(sheet, 'boldFont.css')</a> <br> + remove all Imports<br> + <a href="javascript://" onclick="qx.html.StyleSheet.removeAllImports(sheet)">qx.html.StyleSheet.removeAllImports(sheet)</a> <br> + </p> + + </div> + + <script type="text/javascript"> + + var sheet = qx.html.StyleSheet.createElement(); + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var ct1 = new qx.ui.basic.Label(document.getElementById("control").innerHTML); + + with(ct1) + { + setWidth(450); + setRight(335); + + setHeight(null); + setTop(48); + setBottom(48); + + setOverflow("auto"); + + setBackgroundColor(new qx.renderer.color.Color("white")); + setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + setPadding(10); + }; + + d.add(ct1); + }); + + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_1.html new file mode 100644 index 0000000000..a53950bb73 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_1.html @@ -0,0 +1,616 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var w1 = new qx.ui.layout.CanvasLayout; + + w1.setWidth(100); + w1.setHeight(100); + w1.setLeft(100); + w1.setTop(100); + w1.setBackgroundColor(new qx.renderer.color.Color("red")); + + d.add(w1); + + + + + + + var w2 = new qx.ui.layout.CanvasLayout; + + w2.setWidth("25%"); + w2.setHeight(100); + w2.setLeft(200); + w2.setTop(200); + w2.setBackgroundColor(new qx.renderer.color.Color("blue")); + + d.add(w2); + + + + var w3 = new qx.ui.layout.CanvasLayout; + + w3.setRight(400); + w3.setHeight(100); + w3.setLeft(300); + w3.setTop(300); + w3.setBackgroundColor(new qx.renderer.color.Color("green")); + + d.add(w3); + + + + + + var w4 = new qx.ui.layout.CanvasLayout; + + w4.setLeft(10); + w4.setRight(10); + w4.setTop(10); + w4.setBottom(10); + w4.setBackgroundColor(new qx.renderer.color.Color("white")); + + w2.add(w4); + + + + + + var w5 = new qx.ui.layout.CanvasLayout; + + w5.setLeft(0); + w5.setTop(0); + w5.setWidth("50%"); + w5.setHeight(50); + w5.setBackgroundColor(new qx.renderer.color.Color("white")); + + w3.add(w5); + + + + + var w6 = new qx.ui.layout.CanvasLayout; + + w6.setBottom(50); + w6.setLeft(350); + w6.setHeight("30%"); + w6.setWidth(50); + w6.setBackgroundColor(new qx.renderer.color.Color("yellow")); + w6.setZIndex(100); + w6.setMinHeight(100); + w6.setMaxHeight(150); + + d.add(w6); + + + + var w7 = new qx.ui.layout.CanvasLayout; + + w7.setTop(150); + w7.setLeft(20); + w7.setWidth(100); + w7.setHeight(100); + w7.setBackgroundColor(new qx.renderer.color.Color("aqua")); + w7.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + d.add(w7); + + + + var w8 = new qx.ui.layout.CanvasLayout; + + w8.setTop(280); + w8.setLeft(20); + w8.setWidth("auto"); + w8.setHeight("auto"); + w8.setBackgroundColor(new qx.renderer.color.Color("fuchsia")); + w8.setBorder(new qx.renderer.border.Border(5, "solid", new qx.renderer.color.Color("black"))); + w8.setPaddingTop(10); + + //w8.getBorder().setLeftWidth(20); + //w8.getBorder().setLeftWidth(0); + + // d.add(w8); + + + var w9 = new qx.ui.layout.CanvasLayout; + + w9.setTop(0); + w9.getLeft(0); + w9.setWidth(40); + w9.setHeight(20); + w9.setBackgroundColor(new qx.renderer.color.Color("white")); + + w8.add(w9); + + + + var w10 = new qx.ui.layout.CanvasLayout; + + w10.setTop(0); + w10.getLeft(0); + w10.setWidth(10); + w10.setHeight(50); + w10.setBackgroundColor(new qx.renderer.color.Color("red")); + + w8.add(w10); + + d.add(w8); + + + + + + + var w11 = new qx.ui.layout.CanvasLayout; + + w11.setTop(200); + w11.setLeft(40); + w11.setWidth("auto"); + w11.setHeight("auto"); + w11.setBackgroundColor(new qx.renderer.color.Color("green")); + w11.setDisplay(false); + w11.setBorder(qx.renderer.border.BorderPresets.getInstance().white); + w11.setPaddingLeft(20); + + d.add(w11); + + w8.addEventListener("click", function(e) { + w11.toggleDisplay(); + }); + + + /* + w11.addEventListener("show", function(e) { + this.debug("Show W11"); + }); + + w11.addEventListener("hide", function(e) { + this.debug("Hide W11"); + }); + */ + + + var w12 = new qx.ui.basic.Image("icon/64/energy.png"); + w11.add(w12); + + + + + var w12 = new qx.ui.basic.Image("icon/48/apps/accessories-clock.png"); + + w12.setTop(350); + w12.setLeft(20); + + d.add(w12); + + + var w13 = new qx.ui.basic.Image("icon/48/apps/accessories-alarm.png"); + + w13.setTop(350); + w13.setLeft(80); + + d.add(w13); + + + + + + var w14 = new qx.ui.layout.CanvasLayout; + + w14.setTop(400); + w14.setLeft(20); + w14.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + //w14.setWidth("auto"); + w14.setMinWidth("auto"); + w14.setWidth("30%"); + + w14.setHeight("auto"); + w14.setPadding(10); + w14.setBackgroundColor(new qx.renderer.color.Color("white")); + + d.add(w14); + + + var w15 = new qx.ui.basic.Image("icon/48/apps/accessories-clock.png"); + + w15.setTop(0); + w15.setLeft(20); + + w14.add(w15); + + + var w16 = new qx.ui.basic.Image("icon/128/apps/accessories-date.png"); + + w16.setTop(20); + w16.setLeft(80); + + w14.add(w16); + + + var w16a = new qx.ui.layout.CanvasLayout; + + w16a.setMarginTop(160); + w16a.setBottom(20); + w16a.setRight(20); + + w16a.setBackgroundColor(new qx.renderer.color.Color("yellow")); + + w16a.setWidth(30); + w16a.setHeight(30); + + w14.add(w16a); + + + + w16a.addEventListener("click", function(e) + { + var v16Margin = w16a.getMarginTop() + 20; + if (v16Margin > 240) { + v16Margin = 100; + }; + + w16a.setMarginTop(v16Margin); + }); + + + + + var w17_b1 = new qx.renderer.border.Border(5, "solid", new qx.renderer.color.Color("black")); + var w17_b2 = new qx.renderer.border.Border(10, "solid", new qx.renderer.color.Color("black")); + + var w17_p1 = 10; + var w17_p2 = 5; + + var w17 = new qx.ui.layout.CanvasLayout; + + w17.setBackgroundColor(new qx.renderer.color.Color("orange")); + w17.setWidth(50); + w17.setHeight(50); + w17.setTop(50); + w17.setLeft(200); + + w17.setBorder(w17_b1); + w17.setPadding(w17_p1); + + d.add(w17); + + + w17.addEventListener("click", function(e) + { + if (w17.getBorder() == w17_b1) + { + w17.setBorder(w17_b2); + w17.setPadding(w17_p2); + } + else + { + w17.setBorder(w17_b1); + w17.setPadding(w17_p1); + }; + }); + + + var w18 = new qx.ui.layout.CanvasLayout; + + w18.setBackgroundColor(new qx.renderer.color.Color("white")); + w18.setWidth("100%"); + w18.setHeight("100%"); + w18.setLeft(0); + w18.setTop(0); + + w17.add(w18); + + + + + + + + + + var w19_b1 = new qx.renderer.border.Border(5, "solid", new qx.renderer.color.Color("black")); + + var w19_p1 = 10; + var w19_p2 = 5; + + var w19 = new qx.ui.layout.CanvasLayout; + + w19.setBackgroundColor(new qx.renderer.color.Color("orange")); + w19.setWidth(50); + w19.setHeight(50); + w19.setTop(50); + w19.setLeft(270); + + w19.setBorder(w19_b1); + w19.setPadding(w19_p1); + + d.add(w19); + + + var _t22 = true; + w19.addEventListener("click", function(e) + { + if (_t22) + { + w19_b1.setWidth(10); + w19.setPadding(w19_p2); + } + else + { + w19_b1.setWidth(5); + w19.setPadding(w19_p1); + }; + + _t22 = !_t22; + }); + + + var w20 = new qx.ui.layout.CanvasLayout; + + w20.setBackgroundColor(new qx.renderer.color.Color("white")); + w20.setWidth("100%"); + w20.setHeight("100%"); + w20.setLeft(0); + w20.setTop(0); + + w19.add(w20); + + + + + + var w21_b1 = new qx.renderer.border.Border(5, "solid", new qx.renderer.color.Color("black")); + var w21_b2 = new qx.renderer.border.Border(5, "solid", new qx.renderer.color.Color("blue")); + + var w21 = new qx.ui.layout.CanvasLayout; + + w21.setBackgroundColor(new qx.renderer.color.Color("orange")); + w21.setWidth(50); + w21.setHeight(50); + w21.setTop(50); + w21.setLeft(340); + + w21.setBorder(w21_b1); + w21.setPadding(10); + + d.add(w21); + + + w21.addEventListener("click", function(e) + { + if (w21.getBorder() == w21_b1) + { + w21.setBorder(w21_b2); + } + else + { + w21.setBorder(w21_b1); + }; + }); + + + var w22 = new qx.ui.layout.CanvasLayout; + + w22.setBackgroundColor(new qx.renderer.color.Color("white")); + w22.setWidth("100%"); + w22.setHeight("100%"); + w22.setLeft(0); + w22.setTop(0); + + w21.add(w22); + + + + + + + + var w23_b1 = new qx.renderer.border.BorderObject(5, "solid", new qx.renderer.color.Color("black")); + + var w23 = new qx.ui.layout.CanvasLayout; + + w23.setBackgroundColor(new qx.renderer.color.Color("orange")); + w23.setWidth(50); + w23.setHeight(50); + w23.setTop(50); + w23.setLeft(410); + + w23.setBorder(w23_b1); + w23.setPadding(10); + + d.add(w23); + + w23.addEventListener("mouseover", function(e) + { + w23_b1.setColor(new qx.renderer.color.Color("blue")); + w23_b1.setStyle("dotted"); + }); + + w23.addEventListener("mouseout", function(e) + { + w23_b1.setColor(new qx.renderer.color.Color("black")); + w23_b1.setStyle("solid"); + }); + + var w24 = new qx.ui.layout.CanvasLayout; + + w24.setBackgroundColor(new qx.renderer.color.Color("white")); + w24.setWidth("100%"); + w24.setHeight("100%"); + w24.setLeft(0); + w24.setTop(0); + w24.setAnonymous(true); + + w23.add(w24); + + + + + + + var w25_b1 = qx.renderer.border.BorderPresets.getInstance().outset; + var w25_b2 = qx.renderer.border.BorderPresets.getInstance().inset; + + var w25_p1 = 10; + var w25_p2 = 5; + + var w25 = new qx.ui.layout.CanvasLayout; + + w25.setBackgroundColor(new qx.renderer.color.ColorObject("ThreeDFace")); + w25.setWidth(50); + w25.setHeight(50); + w25.setTop(50); + w25.setLeft(480); + + w25.setBorder(w25_b1); + w25.setPadding(w25_p1); + + d.add(w25); + + + w25.addEventListener("click", function(e) + { + if (w25.getBorder() == w25_b1) + { + w25.setBorder(w25_b2); + w25.setPadding(w25_p2); + } + else + { + w25.setBorder(w25_b1); + w25.setPadding(w25_p1); + }; + }); + + + var w26 = new qx.ui.layout.CanvasLayout; + + w26.setBackgroundColor(new qx.renderer.color.Color("white")); + w26.setWidth("100%"); + w26.setHeight("100%"); + w26.setLeft(0); + w26.setTop(0); + + w25.add(w26); + + + + + + + + var w27 = new qx.ui.layout.CanvasLayout; + + w27.setBackgroundColor(new qx.renderer.color.ColorObject("ThreeDFace")); + w27.setWidth(50); + w27.setHeight(50); + w27.setTop(50); + w27.setLeft(550); + + w27.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + w27.setPadding(10, 10, 10, 10); + + d.add(w27); + + + w27.addEventListener("click", function(e) + { + if (w27.getBorder() == qx.renderer.border.BorderPresets.getInstance().outset) + { + w27.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + w27.setPadding(12, 8, 8, 12); + } + else + { + w27.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + w27.setPadding(10, 10, 10, 10); + }; + }); + + + var w28 = new qx.ui.layout.CanvasLayout; + + w28.setBackgroundColor(new qx.renderer.color.Color("white")); + w28.setWidth("100%"); + w28.setHeight("100%"); + w28.setLeft(0); + w28.setTop(0); + + w27.add(w28); + + + + + + + + var w29_b1 = qx.renderer.border.BorderPresets.getInstance().outset; + var w29_b2 = qx.renderer.border.BorderPresets.getInstance().inset; + + var w29_p1 = 10; + var w29_p2 = 5; + + var w29 = new qx.ui.layout.CanvasLayout; + + w29.setBackgroundColor(new qx.renderer.color.ColorObject("ThreeDFace")); + w29.setWidth(50); + w29.setHeight(50); + w29.setTop(50); + w29.setLeft(620); + + w29.setBorder(w29_b1); + w29.setPadding(w29_p1); + + d.add(w29); + + + w29.addEventListener("click", function(e) + { + if (w29.getBorder() == w29_b1) + { + w29.setBorder(w29_b2); + w29.setPadding(w29_p2); + } + else + { + w29.setBorder(w29_b1); + w29.setPadding(w29_p1); + }; + }); + + + var w30 = new qx.ui.layout.CanvasLayout; + + w30.setBackgroundColor(new qx.renderer.color.Color("white")); + w30.setLeft(0); + w30.setRight(0); + w30.setTop(0); + w30.setBottom(0); + + w29.add(w30); + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_3.html new file mode 100644 index 0000000000..ae17a92964 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_3.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>This test is using multiple qx.ui.basic.Terminator</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + var w, s; + + + + for (var i=1; i<=20; i++) + { + s = new Date().valueOf(); + + for (var j=1; j<=20; j++) + { + var w = new qx.ui.basic.Terminator; + + w.setWidth(12); + w.setHeight(12); + w.setLeft(20+(12*i)); + w.setTop(48+(12*j)); + w.setBackgroundColor(new qx.renderer.color.Color(Math.round(20+(i*j)/2))); + + d.add(w); + }; + + // this.debug("Col: " + ((new Date).valueOf()-s) + "ms"); + }; + + + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_4.html new file mode 100644 index 0000000000..e3157be47f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_4.html @@ -0,0 +1,50 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>This test is using multiple div-Elements</p> + <p>Created with "createElement" and added via "appendChild" to the document.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + var w; + var v; + + for (var i=1; i<=20; i++) + { + for (var j=1; j<=20; j++) + { + var w = document.createElement("div"); + + w.className = "qx_ui_core_Widget_QxWidgetCore"; + w.id = "Auto" + i + "|" + j; + + w.style.width = "12px"; + w.style.height = "12px"; + w.style.position = "absolute"; + w.style.left = (20+(12*i)) + "px"; + w.style.top = (48+(12*j)) + "px"; + + v = Math.round(20+(i*j)/2); + w.style.backgroundColor = "rgb(" + v + "," + v + "," + v + ")"; + + document.body.appendChild(w); + }; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_5.html new file mode 100644 index 0000000000..49f66f4715 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CanvasLayout_5.html @@ -0,0 +1,45 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>This test is using multiple div-Elements</p> + <p>Added to the document using the "innerHTML" property.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + var w; + var v; + var h = []; + + for (var i=1; i<=20; i++) + { + for (var j=1; j<=20; j++) + { + h.push("<div style='width:12px;height:12px;position:absolute;"); + h.push("left:" + (20+(12*i)) + "px;"); + h.push("top:" + (48+(12*j)) + "px;"); + + v = Math.round(20+(i*j)/2); + h.push("background-color:" + "rgb(" + v + "," + v + "," + v + ")"); + h.push("' class='qx_ui_core_Widget_QxWidgetCore' id='Auto" + i + "|" + j + "'></div>"); + }; + }; + + document.body.innerHTML += h.join(""); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clipping_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clipping_1.html new file mode 100644 index 0000000000..e7d8b1afd6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clipping_1.html @@ -0,0 +1,76 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for clipping implementation</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var t1 = new qx.ui.basic.Terminator; + + t1.setBackgroundColor("red"); + t1.setLocation(20, 48); + t1.setDimension(100, 100); + t1.setBorder(2, "solid", "black"); + t1.setClipLocation(0, 0); + t1.setClipDimension(50, 50); + + d.add(t1); + + + + var t2 = new qx.ui.basic.Terminator; + + t2.setBackgroundColor("yellow"); + t2.setLocation(200, 48); + t2.setDimension(100, 100); + t2.setBorder(2, "solid", "black"); + t2.setClipLocation(25, 25); + t2.setClipDimension(50, 50); + + d.add(t2); + + + + var t3 = new qx.ui.basic.Terminator; + + t3.setBackgroundColor("blue"); + t3.setLocation(20, 248); + t3.setDimension(100, 100); + t3.setBorder(2, "solid", "black"); + t3.setClipLocation(50, 50); + t3.setClipDimension(50, 50); + + d.add(t3); + + + + + var t4 = new qx.ui.basic.Terminator; + + t4.setBackgroundColor("orange"); + t4.setLocation(200, 248); + t4.setDimension(100, 100); + t4.setBorder(2, "solid", "black"); + t4.setClip(25, 25, null, null); + + d.add(t4); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clone_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clone_1.html new file mode 100644 index 0000000000..22ee1697c9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clone_1.html @@ -0,0 +1,91 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test widget cloning.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.layout.CanvasLayout; + + with(c1) + { + setWidth(200); + + setTop(48); + setLeft(20); + + setHeight(100); + setBackgroundColor("orange"); + }; + + d.add(c1); + + + var c2 = c1.clone(); + + with(c2) + { + setLeft(30); + setTop(58); + + setBackgroundColor("green"); + }; + d.add(c2); + + var c3 = c2.clone(false, ["top","left","width","height"]); + + with(c3) + { + setLeft(40); + setTop(68); + + setBackgroundColor("blue"); + }; + d.add(c3); + + + + + + var a1 = new qx.ui.basic.Atom("First Atom", "icon/48/apps/accessories-clock.png"); + + with(a1) + { + setTop(200); + setLeft(20); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + + setPadding(5); + }; + + d.add(a1); + + + + var a2 = a1.clone(true); + + with(a2) + { + setLeft(200); + }; + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clone_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clone_2.html new file mode 100644 index 0000000000..c3f60be97b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Clone_2.html @@ -0,0 +1,108 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testfile for check cloning on QxFieldSets.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var fs = new qx.ui.groupbox.GroupBox("My first Fieldset"); + + with(fs) + { + setWidth("40%"); + setBottom(48); + setTop(48); + setLeft(20); + + setMaxWidth(350); + setMinWidth(250); + }; + + + + var a1 = new qx.ui.basic.Atom("TextField 1"); + with(a1) + { + setTop(13); + setLeft(0); + setWidth("35%"); + }; + + var i1 = new qx.ui.form.TextField(); + with(i1) + { + setTop(10); + setRight(0); + setWidth("60%"); + }; + fs.add(a1, i1); + + + + var a2 = new qx.ui.basic.Atom("TextField 2", "icon/16/apps/internet-email-client.png"); + with(a2) + { + setTop(43); + setLeft(0); + setWidth("35%"); + }; + fs.add(a2); + + var i2 = new qx.ui.form.TextField(); + with(i2) + { + setTop(40); + setRight(0); + setWidth("60%"); + }; + fs.add(i2); + + + + var a3 = new qx.ui.basic.Atom("TextField 3"); + with(a3) + { + setTop(73); + setLeft(0); + setWidth("35%"); + }; + fs.add(a3); + + var i3 = new qx.ui.form.TextField(); + with(i3) + { + setTop(70); + setRight(0); + setWidth("60%"); + }; + fs.add(i3); + + + d.add(fs); + + + fsclone = fs.clone(true); + with(fsclone) + { + setLeft(400); + setLegend("My cloned Fieldset"); + }; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_1.html new file mode 100644 index 0000000000..38b90ba19f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_1.html @@ -0,0 +1,235 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Color Theme Test</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var w1 = new qx.ui.basic.Terminator; + + w1.setWidth(100); + w1.setHeight(100); + w1.setBackgroundColor(new qx.renderer.color.Color("yellow")); + w1.setTop(48); + w1.setLeft(20); + + d.add(w1); + + + + var w2 = new qx.ui.basic.Terminator; + + w2.setWidth(100); + w2.setHeight(100); + w2.setBackgroundColor(new qx.renderer.color.ColorObject("activecaption")); + w2.setTop(48); + w2.setLeft(150); + + d.add(w2); + + + + + var w3 = new qx.ui.basic.Terminator; + + w3.setWidth(100); + w3.setHeight(100); + w3.setBackgroundColor("red"); + w3.setTop(200); + w3.setLeft(20); + + d.add(w3); + + + + var w4 = new qx.ui.basic.Terminator; + + w4.setWidth(100); + w4.setHeight(100); + w4.setBackgroundColor("red"); + w4.setTop(200); + w4.setLeft(150); + + d.add(w4); + + + + + var w5 = new qx.ui.basic.Label("Hello World"); + + w5.setTop(320); + w5.setLeft(20); + w5.setColor("red"); + + d.add(w5); + + + + + + var w6 = new qx.ui.basic.Terminator; + + w6.setWidth(100); + w6.setHeight(100); + w6.setBackgroundColor("activecaption"); + w6.setTop(400); + w6.setLeft(20); + + d.add(w6); + + + + var w7 = new qx.ui.basic.Terminator; + + w7.setWidth(100); + w7.setHeight(100); + w7.setBackgroundColor("activeCaption"); + w7.setTop(400); + w7.setLeft(150); + + d.add(w7); + + + + + var w8 = new qx.ui.basic.Label("Hello World"); + + w8.setTop(520); + w8.setLeft(20); + w8.setColor("ActiveCaption"); + + d.add(w8); + + + + + + + + var w9 = new qx.ui.basic.Atom("Super qooxdoo", "icon/48/apps/preferences-desktop-multimedia.png"); + + w9.setTop(520); + w9.setLeft(200); + w9.setBorder(new qx.renderer.border.BorderObject(2, "solid", "activeCaption")); + w9.setBackgroundColor("threedlightshadow"); + + d.add(w9); + + + + + + var w10 = new qx.ui.basic.Atom("Super qooxdoo", "icon/48/apps/preferences-desktop-multimedia.png"); + + w10.setTop(520); + w10.setLeft(400); + w10.setBorder(new qx.renderer.border.BorderObject(2, "solid", new qx.renderer.color.ColorObject("activeCaption"))); + w10.setBackgroundColor("threedlightshadow"); + + d.add(w10); + + + + + + + var w11 = new qx.ui.basic.Label("Hello World"); + + w11.setTop(600); + w11.setLeft(20); + w11.setBackgroundColor([232,102,255]); + w11.setColor(20,30,60); + w11.setBorder(1, "solid", "red"); + + d.add(w11); + + + + var w12 = new qx.ui.basic.Label("Hello World"); + + w12.setTop(600); + w12.setLeft(120); + w12.setBackgroundColor([232,102,255]); + w12.setColor(20,30,60); + w12.setBorder([1, "solid", "red"]); + + d.add(w12); + + + + var w13 = new qx.ui.basic.Label("Hello World"); + + w13.setLocation(220, 600); + w13.setBackgroundColor([232,102,255]); + w13.setColor(20,30,60); + w13.setBorder([1, "solid", "activeCaption"]); + + d.add(w13); + + + + + var myBoundedBorder1 = new qx.renderer.border.Border(1, "solid", [200,10,20]); + + + var w14 = new qx.ui.basic.Terminator; + + w14.setWidth(100); + w14.setHeight(100); + w14.setLeft(600); + w14.setTop(100); + w14.setBorder(myBoundedBorder1); + + d.add(w14); + + // should not work with qx.renderer.border.Border - use qx.renderer.border.BorderObject instead + w14.addEventListener("click", function(e) { + myBoundedBorder1.setTopColor([100,200,200]); + myBoundedBorder1.setTopWidth(10); + }); + + + + var myBoundedBorder2 = new qx.renderer.border.BorderObject(1, "solid", [200,10,20]); + + + var w15 = new qx.ui.basic.Terminator; + + w15.setWidth(100); + w15.setHeight(100); + w15.setLeft(600); + w15.setTop(210); + w15.setBorder(myBoundedBorder2); + + d.add(w15); + + w15.addEventListener("click", function(e) { + myBoundedBorder2.setTopColor([100,200,200]); + myBoundedBorder2.setTopWidth(10); + }); + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 350, 128); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_2.html new file mode 100644 index 0000000000..a76a8dc567 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_2.html @@ -0,0 +1,77 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Color Theme Test</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + // Create Default OS Color Table + var w; + var c=0; + for (var i in qx.renderer.color.Color.themedNames) + { + w = new qx.ui.basic.Label(i); + + w.setWidth(120); + w.setTop(48+(c*18)); + w.setLeft(20); + w.setPadding(1, 2); + w.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w.setStyleProperty("backgroundColor", i); + + d.add(w); + + c++; + }; + + + + // Create Default OS Color Table + var w; + var c=0; + for (var i in qx.renderer.color.Color.themedNames) + { + w = new qx.ui.basic.Label(i); + + w.setWidth(120); + w.setTop(48+(c*18)); + w.setLeft(150); + w.setPadding(1, 2); + w.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w.setBackgroundColor(new qx.renderer.color.ColorObject(i)); + + d.add(w); + + c++; + }; + + + + + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 400, 128); + }); + </script> + +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_3.html new file mode 100644 index 0000000000..5378f2f5f6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ColorTheme_3.html @@ -0,0 +1,176 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Color Theme Test for qx.renderer.border.BorderObject's</p> + <ul> + <li>First Col: qooxdoo solution for borders</li> + <li>Second Col: html solution without color value</li> + <li>Third Col: html solution with color value: white</li> + </ul> + <p>The default color Theme is: <em>OS Default</em></p> + </div> + + <div style="position: absolute; left: 120px; top: 48px; width: 50px"> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px outset"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px inset"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px ridge"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px groove"> </div> + + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 1px outset"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 1px inset"> </div> + </div> + + <div style="position: absolute; left: 180px; top: 48px; width: 50px"> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px outset white"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px inset white"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px ridge white"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 2px groove white"> </div> + + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 1px outset white"> </div> + <div style="width:50px; height: 50px; margin-bottom: 10px; border: 1px inset white"> </div> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + + var w1 = new qx.ui.basic.Terminator; + w1.setDimension(50, 50); + w1.setLocation(20, 48); + w1.setBorder(new qx.renderer.border.BorderObject(2, "outset")); + d.add(w1); + + var w2 = new qx.ui.basic.Terminator; + w2.setDimension(50, 50); + w2.setLocation(20, 108); + w2.setBorder(new qx.renderer.border.BorderObject(2, "inset")); + d.add(w2); + + var w3 = new qx.ui.basic.Terminator; + w3.setDimension(50, 50); + w3.setLocation(20, 168); + w3.setBorder(new qx.renderer.border.BorderObject(2, "ridge")); + d.add(w3); + + var w4 = new qx.ui.basic.Terminator; + w4.setDimension(50, 50); + w4.setLocation(20, 228); + w4.setBorder(new qx.renderer.border.BorderObject(2, "groove")); + d.add(w4); + + var w5 = new qx.ui.basic.Terminator; + w5.setDimension(50, 50); + w5.setLocation(20, 288); + w5.setBorder(new qx.renderer.border.BorderObject(1, "outset")); + d.add(w5); + + var w6 = new qx.ui.basic.Terminator; + w6.setDimension(50, 50); + w6.setLocation(20, 348); + w6.setBorder(new qx.renderer.border.BorderObject(1, "inset")); + d.add(w6); + + + + var border1 = new qx.renderer.border.BorderObject(2, "outset"); + var border2 = new qx.renderer.border.BorderObject(1, "outset"); + + var w7 = new qx.ui.layout.CanvasLayout; + w7.setDimension(50, 50); + w7.setLocation(20, 408); + w7.setBorder(border1); + d.add(w7); + + var w7c = new qx.ui.basic.Terminator; + w7c.setDimension("100%", "100%"); + w7c.setBackgroundColor(new qx.renderer.color.Color("red")); + w7.add(w7c); + + + + var w8 = new qx.ui.layout.CanvasLayout; + w8.setDimension(50, 50); + w8.setLocation(20, 468); + w8.setBorder(border2); + d.add(w8); + + var w8c = new qx.ui.basic.Terminator; + w8c.setDimension("100%", "100%"); + w8c.setBackgroundColor(new qx.renderer.color.Color("red")); + w8.add(w8c); + + + + + w7.addEventListener("click", function(e) { + this.setBorder(this.getBorder() == null ? border1 : this.getBorder() == border1 ? border2 : null) + }); + + w8.addEventListener("click", function(e) { + this.setBorder(this.getBorder() == null ? border1 : this.getBorder() == border1 ? border2 : null) + }); + + + + + + + var w9 = new qx.ui.layout.CanvasLayout; + + w9.setDimension(100, 100); + w9.setLocation(400, 400); + w9.setBorder(border1); + w9.setOverflow("scroll"); + + d.add(w9); + + var w9c = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + w9c.setTop(150); + w9c.setLeft(300); + + w9.add(w9c); + + + + w9.addEventListener("click", function(e) { + this.setOverflow(this.getOverflow() == "scroll" ? "scrollX" : this.getOverflow() == "scrollX" ? "scrollY" : this.getOverflow() == "scrollY" ? "" : "scroll"); + }); + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 400, 128); + + + + + + + /* + var c1 = new qx.renderer.color.Color("gray"); + this.debug("RGB-Transform I: " + c1.getRed() + "," + c1.getGreen() + "," + c1.getBlue()); + + // This could not work with the default theme "OS Default", as this does not define any rgb colors + var c2 = new qx.renderer.color.ColorObject("threedface"); + this.debug("RGB-Transform II: " + c2.getRed() + "," + c2.getGreen() + "," + c2.getBlue()); + */ + }); + </script> + +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_1.html new file mode 100644 index 0000000000..7a2a2e65bd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_1.html @@ -0,0 +1,102 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.form.ComboBox implementation.</p> + <p>Testing object creation (the list content will be filled then) on first open.</p> + </div> + + <select style="position:absolute; left:300px; top:48px; width: 120px;"> + <option>Item No 1</option> + <option>Item No 2</option> + <option>Item No 3</option> + <option>Item No 4</option> + <option>Item No 5</option> + <option>Item No 6</option> + <option>Item No 7</option> + <option>Item No 8</option> + <option>Item No 9</option> + <option disabled="true">Item No 10</option> + <option>Item No 11</option> + <option>Item No 12</option> + <option>Item No 13</option> + <option>Item No 14</option> + <option>Item No 15</option> + <option>Item No 16</option> + <option>Item No 17</option> + <option>Item No 18</option> + <option>Item No 19</option> + <option disabled="true">Item No 20</option> + <option>Item No 21</option> + <option>Item No 22</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 25</option> + <option>Item No 26</option> + <option>Item No 27</option> + <option>Item No 28</option> + <option>Item No 29</option> + <option disabled="true">Item No 30</option> + </select> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.form.ComboBox; + c1.setLocation(20, 48); + + c1.addEventListener("beforeInitialOpen", function(e) + { + var item; + + for(var i=1; i<=30; i++) + { + item = new qx.ui.form.ListItem("Item No " + i); + !(i % 10) && (item.setEnabled(false)); + c1.add(item); + }; + }); + + // this does not work here (if there is no content) + c1.setSelected(c1.getList().getFirstChild()); + + c1.addEventListener("changeValue", function(e) { + this.debug("New value: " + e.getData()); + }); + + c1.addEventListener("changeSelected", function(e) { + this.debug("New selected: " + e.getData()); + }); + + + + + var b1 = new qx.ui.form.CheckBox("Editable"); + + b1.set({ top: 50, left: 150 }); + + b1.addEventListener("changeChecked", function(e) { + c1.setEditable(e.getData()); + }); + + + + d.add(c1, b1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_2.html new file mode 100644 index 0000000000..c5a22d7ac5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_2.html @@ -0,0 +1,116 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.form.ComboBox implementation.</p> + <p>Testing object creation (the list content will be filled then) on first open.</p> + <p>Added Color Theme Buttons</p> + </div> + + <select style="position:absolute; left:300px; top:48px; width: 120px;"> + <option>Item No 1</option> + <option>Item No 2</option> + <option>Item No 3</option> + <option>Item No 4</option> + <option>Item No 5</option> + <option>Item No 6</option> + <option>Item No 7</option> + <option>Item No 8</option> + <option>Item No 9</option> + <option disabled="true">Item No 10</option> + <option>Item No 11</option> + <option>Item No 12</option> + <option>Item No 13</option> + <option>Item No 14</option> + <option>Item No 15</option> + <option>Item No 16</option> + <option>Item No 17</option> + <option>Item No 18</option> + <option>Item No 19</option> + <option disabled="true">Item No 20</option> + <option>Item No 21</option> + <option>Item No 22</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 25</option> + <option>Item No 26</option> + <option>Item No 27</option> + <option>Item No 28</option> + <option>Item No 29</option> + <option disabled="true">Item No 30</option> + </select> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.form.ComboBox; + c1.setLocation(20, 48); + + c1.addEventListener("beforeInitialOpen", function(e) + { + var item; + + for(var i=1; i<=30; i++) + { + item = new qx.ui.form.ListItem("Item No " + i); + !(i % 10) && (item.setEnabled(false)); + c1.add(item); + }; + }); + + // this does not work here (if there is no content) + c1.setSelected(c1.getList().getFirstChild()); + + c1.addEventListener("changeValue", function(e) { + this.debug("New value: " + e.getData()); + }); + + c1.addEventListener("changeSelected", function(e) { + this.debug("New selected: " + e.getData()); + }); + + + + + var b1 = new qx.ui.form.CheckBox("Editable"); + + b1.set({ top: 50, left: 150 }); + + b1.addEventListener("changeChecked", function(e) { + c1.setEditable(e.getData()); + }); + + + + d.add(c1, b1); + + + + + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 20, 248); + + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_3.html new file mode 100644 index 0000000000..8a8fbb0216 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_3.html @@ -0,0 +1,123 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.form.ComboBox implementation.</p> + <p>Testing object creation (the list content will be filled then) on first open.</p> + <p>Added Color Theme Buttons</p> + <p>Now with image inside the popup.</p> + </div> + + <select style="position:absolute; left:300px; top:48px; width: 120px;"> + <option>Item No 1</option> + <option>Item No 2</option> + <option>Item No 3</option> + <option>Item No 4</option> + <option>Item No 5</option> + <option>Item No 6</option> + <option>Item No 7</option> + <option>Item No 8</option> + <option>Item No 9</option> + <option disabled="true">Item No 10</option> + <option>Item No 11</option> + <option>Item No 12</option> + <option>Item No 13</option> + <option>Item No 14</option> + <option>Item No 15</option> + <option>Item No 16</option> + <option>Item No 17</option> + <option>Item No 18</option> + <option>Item No 19</option> + <option disabled="true">Item No 20</option> + <option>Item No 21</option> + <option>Item No 22</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 23</option> + <option>Item No 24</option> + <option>Item No 25</option> + <option>Item No 26</option> + <option>Item No 27</option> + <option>Item No 28</option> + <option>Item No 29</option> + <option disabled="true">Item No 30</option> + </select> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.form.ComboBox; + c1.setLocation(20, 48); + + // this example seems to be buggy with auto-height + // c1.getPopup().setHeight(150); + + c1.addEventListener("beforeInitialOpen", function(e) + { + var item; + var list = [ "archive", "binary", "card", "document", "html", "image", "manual", "multimedia", "pdf" ]; + + for(var i=0; i<list.length; i++) + { + item = new qx.ui.form.ListItem(list[i], "icon/48/mime-" + list[i] + ".png"); + item.setShow("icon"); + + c1.add(item); + }; + + c1.setSelected(c1.getList().getFirstChild()); + }); + + // this does not work here (if there is no content) + c1.setSelected(c1.getList().getFirstChild()); + + c1.addEventListener("changeValue", function(e) { + this.debug("New value: " + e.getData()); + }); + + c1.addEventListener("changeSelected", function(e) { + this.debug("New selected: " + e.getData()); + }); + + + + + var b1 = new qx.ui.form.CheckBox("Editable"); + + b1.set({ top: 50, left: 150 }); + + b1.addEventListener("changeChecked", function(e) { + c1.setEditable(e.getData()); + }); + + + + d.add(c1, b1); + + + + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 20, 248); + + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_4.html new file mode 100644 index 0000000000..3cc11235aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ComboBox_4.html @@ -0,0 +1,41 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.form.ComboBox behaviour when inside a container with scroll bars and the popup list goes off the screen.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() { + var box = new qx.ui.layout.BoxLayout('vertical'); + box.set({left: 5, right: 300, top: 30, bottom: 20, overflow: 'scroll', backgroundColor: '#FFE'}); + for (var row = 0; row < 8; row++) { + var rowBox = new qx.ui.layout.BoxLayout; + rowBox.set({ marginBottom: 100, width: 'auto', height: 'auto' }); + for (var col = 0; col < 8; col++) { + var cb = new qx.ui.form.ComboBox; + for (var i = 0; i < 15; i++) { + cb.add(new qx.ui.form.ListItem('Item '+i)); + } + cb.setEditable(true); + cb.setValue('Row '+row+', col '+col); + cb.setMarginRight(100); + rowBox.add(cb); + } + box.add(rowBox); + } + box.addToDocument(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CookieStorage_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CookieStorage_1.html new file mode 100644 index 0000000000..e13ba10f7d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CookieStorage_1.html @@ -0,0 +1,45 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for qx.io.local.CookieApi.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var f1 = new qx.ui.form.TextField; + f1.setLocation(20, 48); + qx.ui.core.ClientDocument.getInstance().add(f1); + + var b1 = new qx.ui.form.Button("Restore"); + b1.setLocation(20, 80); + qx.ui.core.ClientDocument.getInstance().add(b1); + + var b2 = new qx.ui.form.Button("Save"); + b2.setLocation(80, 80); + qx.ui.core.ClientDocument.getInstance().add(b2); + + + + b1.addEventListener("execute", function(e) { + f1.setValue(qx.io.local.CookieTransport.get("fieldContent")); + }); + + b2.addEventListener("execute", function(e) { + qx.io.local.CookieTransport.set("fieldContent", f1.getValue()); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CookieStorage_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CookieStorage_2.html new file mode 100644 index 0000000000..d98b6ffb19 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CookieStorage_2.html @@ -0,0 +1,67 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for qx.io.local.CookieTransport API.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var vAll = []; + var vNum = 20; + + for (var i=0; i<vNum; i++) + { + var f1 = new qx.ui.form.TextField; + f1.setLocation(20, 48+(i*22)); + qx.ui.core.ClientDocument.getInstance().add(f1); + vAll.push(f1); + }; + + var b1 = new qx.ui.form.Button("Restore"); + b1.setLocation(220, 48); + qx.ui.core.ClientDocument.getInstance().add(b1); + + var b2 = new qx.ui.form.Button("Save"); + b2.setLocation(280, 48); + qx.ui.core.ClientDocument.getInstance().add(b2); + + var b3 = new qx.ui.form.Button("Clear"); + b3.setLocation(340, 48); + qx.ui.core.ClientDocument.getInstance().add(b3); + + + + b1.addEventListener("execute", function(e) + { + for (var i=0; i<vAll.length; i++) { + var vIn = qx.io.local.CookieTransport.get("fieldContent" + i); + vAll[i].setValue(vIn); + }; + }); + + b2.addEventListener("execute", function(e) + { + for (var i=0; i<vAll.length; i++) { + qx.io.local.CookieTransport.set("fieldContent" + i, vAll[i].getValue()); + }; + }); + + b3.addEventListener("execute", function(e) { + qx.io.local.CookieTransport.delAll(); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Cookie_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Cookie_1.html new file mode 100644 index 0000000000..2f6214da09 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Cookie_1.html @@ -0,0 +1,45 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for qx.io.local.CookieApi.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var f1 = new qx.ui.form.TextField; + f1.setLocation(20, 48); + qx.ui.core.ClientDocument.getInstance().add(f1); + + var b1 = new qx.ui.form.Button("Restore"); + b1.setLocation(20, 80); + qx.ui.core.ClientDocument.getInstance().add(b1); + + var b2 = new qx.ui.form.Button("Save"); + b2.setLocation(80, 80); + qx.ui.core.ClientDocument.getInstance().add(b2); + + + + b1.addEventListener("execute", function(e) { + f1.setValue(qx.io.local.CookieApi.get("fieldContent")); + }); + + b2.addEventListener("execute", function(e) { + qx.io.local.CookieApi.set("fieldContent", f1.getValue()); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CrossBrowser_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CrossBrowser_1.html new file mode 100644 index 0000000000..1bfb3abd7b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CrossBrowser_1.html @@ -0,0 +1,166 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <fieldset style="padding:3px; background-color:#fff; text-align:right"><legend style="color:red">Outer</legend> + <span style="color:blue; font-style:italic">Margin</span> + <fieldset style="margin:3px 10px; padding:3px 10px; background-color:#bbb"><legend style="color:red">Box</legend> + <span style="color:blue; font-style:italic">Inset (Border + Scrollbar)</span> + <fieldset style="margin:3px 10px; padding:3px 10px; background-color:#999"><legend style="color:red">Area</legend> + <span style="color:blue; font-style:italic">Padding</span> + <fieldset style="margin:3px 10px; padding:3px 10px; background-color:#666"><legend style="color:red">Inner</legend> + </fieldset> + </fieldset> + </fieldset> + </fieldset> + </div> + + <div style="margin-left:200px;margin-right:400px; margin-top: 30px;"> +Mit seiner Aufnahme in die Elite war Knechts Leben auf eine andre Ebene verpflanzt, es war der erste und entscheidende Schritt in seiner Entwicklung geschehen. Es geht durchaus nicht allen Elitesch�lern so, da� die amtliche Aufnahme in die Elite mit dem innern Erlebnis der Berufung zusammenf�llt. Das ist Gnade, oder wenn man es banal ausdr�cken will: es ist ein Gl�cksfall. Wem er begegnet, dessen Leben hat ein Plus, so wie der ein Plus besitzt, dem ein Gl�cksfall besonders gl�ckliche Gaben an Leib und See le mitgegeben hat. Die meisten Elitesch�ler, ja beinahe alle, empfinden zwar ihre Wahl als ein gro�es Gl�ck, als eine Auszeichnung, auf die sie stolz sind, und sehr viele von ihnen haben sich auch diese Auszeichnung vorher gl�hend erw�nscht. Aber der �bergang von der gew�hnlichen heimatlichen Schule in die Schulen von Kastalien f�llt den meisten Auserw�hlten dann doch schwerer, als sie gedacht h�tten, und bringt manchen unerwartete Entt�uschungen. Vor allem ist der �bergang f�r alle jene Sch�ler, die in i hrem Elternhaus gl�cklich und geliebt waren, ein sehr schwerer Abschied und Verzicht, und so kommt denn auch, namentlich w�hrend der beiden ersten Elitejahre, eine nicht unbetr�chtliche Zahl von R�ckversetzungen vor, deren Grund nicht ein Mangel an Begabung und Flei�, sondern Unf�higkeit der Sch�ler ist, sich mit dem Internatsleben und vor allem mit dem Gedanken zu vers�hnen, k�nftig die Verbindung mit Familie und Heimat immer mehr zu l�sen und schlie�lich keine andre Zugeh�rigkeit mehr zu kennen und zu r espektieren als die zum Orden. Dann gibt es je und je auch Sch�ler, welchen umgekehrt gerade das Loskommen vom Vaterhaus und von einer ihnen entleideten Schule die Hauptsache bei ihrer Aufnahme in die Elite war; diese, etwa von einem strengen Vater oder einem ihnen unangenehmen Lehrer befreit, atmeten zwar eine Weile auf, hatten sich aber von dem Wechsel so gro�e und unm�gliche Ver�nderungen ihres ganzen Lebens versprochen, da� bald eine Entt�uschung kam. Auch die eigentlichen Streber und Mustersch�ler, d i! e Pedantischen, konnten sich in Kastalien nicht immer halten; nicht da� sie den Studien nicht w�ren gewachsen gewesen, aber es kam in der Elite eben nicht allein auf die Studien und Fachzeugnisse an, sondern es wurden auch erzieherische und musische Ziele angestrebt, vor welchen dieser und jener die Waffen streckte. Immerhin war in dem System der vier gro�en Eliteschulen mit ihren zahlreichen Unterabteilungen und Zweiganstalten Raum f�r vielerlei Begabungen, und ein strebsamer Mathematiker oder Philologe, wenn er wirklich das Zeug zu einem Gelehrten in sich hatte, brauchte etwa einen Mangel an musikalischer oder philosophischer Begabung nicht als Gefahr zu empfinden. Es gab zuzeiten sogar in Kastalien sehr starke Tendenzen zur Pflege der reinen, n�chternen Fachwissenschaften, und die Vork�mpfer dieser Tendenzen waren nicht nur gegen die �Phantasten�, das hei�t gegen die Musikalischen und Musischen, kritisch und spottlustig gestimmt, sondern haben zuzeiten innerhalb ihrer Kreise alles Musische, und namentl ich das Glasperlenspiel, geradezu abgeschworen und verp�nt.Da Knechts Leben, soweit es uns bekannt ist, sich ganz in Kastalien abspielte, in jenem stillsten und heitersten Bezirk unseres gebirgigen Landes, den man fr�her mit einem Ausdruck des Dichters Goethe oft auch �die p�dagogische Provinz� genannt hat, wollen wir in aller K�rze und auf die Gefahr hin, den Leser mit L�ngstgewu�tem zu langweilen, nochmals dies ber�hmte Kastalien. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var w1 = new qx.ui.basic.Terminator; + + with(w1) + { + setHeight(100); + setWidth(100); + setTop(48); + setLeft(20); + setBackgroundColor("orange"); + setStyleProperty("padding", "5px"); + setStyleProperty("margin", "10px"); + setBorder(new qx.renderer.border.Border(2, "solid", "blue")); + setOverflow("scroll"); + }; + + d.add(w1); + + w1.addEventListener("initialShow", function(e) + { + QxDebug("Properties", "getComputedMarginLeft: " + w1.getComputedMarginLeft()); + QxDebug("Properties", "getComputedMarginTop: " + w1.getComputedMarginTop()); + QxDebug("Properties", "getComputedMarginRight: " + w1.getComputedMarginRight()); + QxDebug("Properties", "getComputedMarginBottom: " + w1.getComputedMarginBottom()); + + QxDebug("Properties", "getComputedPaddingLeft: " + w1.getComputedPaddingLeft()); + QxDebug("Properties", "getComputedPaddingTop: " + w1.getComputedPaddingTop()); + QxDebug("Properties", "getComputedPaddingRight: " + w1.getComputedPaddingRight()); + QxDebug("Properties", "getComputedPaddingBottom: " + w1.getComputedPaddingBottom()); + + QxDebug("Properties", "getComputedBorderLeft: " + w1.getComputedBorderLeft()); + QxDebug("Properties", "getComputedBorderTop: " + w1.getComputedBorderTop()); + QxDebug("Properties", "getComputedBorderRight: " + w1.getComputedBorderRight()); + QxDebug("Properties", "getComputedBorderBottom: " + w1.getComputedBorderBottom()); + + QxDebug("Dimensions", "getComputedOuterWidth: " + w1.getComputedOuterWidth()); + QxDebug("Dimensions", "getComputedOuterHeight: " + w1.getComputedOuterHeight()); + + QxDebug("Dimensions", "getComputedBoxWidth: " + w1.getComputedBoxWidth()); + QxDebug("Dimensions", "getComputedBoxHeight: " + w1.getComputedBoxHeight()); + + QxDebug("Dimensions", "getComputedAreaWidth: " + w1.getComputedAreaWidth()); + QxDebug("Dimensions", "getComputedAreaHeight: " + w1.getComputedAreaHeight()); + + QxDebug("Dimensions", "getComputedInnerWidth: " + w1.getComputedInnerWidth()); + QxDebug("Dimensions", "getComputedInnerHeight: " + w1.getComputedInnerHeight()); + + QxDebug("Insets", "getComputedInsetLeft: " + w1.getComputedInsetLeft()); + QxDebug("Insets", "getComputedInsetTop: " + w1.getComputedInsetTop()); + QxDebug("Insets", "getComputedInsetRight: " + w1.getComputedInsetRight()); + QxDebug("Insets", "getComputedInsetBottom: " + w1.getComputedInsetBottom()); + + QxDebug("Scroll", "getComputedScrollBarSizeLeft: " + w1.getComputedScrollBarSizeLeft()); + QxDebug("Scroll", "getComputedScrollBarSizeTop: " + w1.getComputedScrollBarSizeTop()); + QxDebug("Scroll", "getComputedScrollBarSizeRight: " + w1.getComputedScrollBarSizeRight()); + QxDebug("Scroll", "getComputedScrollBarSizeBottom: " + w1.getComputedScrollBarSizeBottom()); + + QxDebug("Scroll", "getComputedScrollBarVisibleX: " + w1.getComputedScrollBarVisibleX()); + QxDebug("Scroll", "getComputedScrollBarVisibleY: " + w1.getComputedScrollBarVisibleY()); + + + + QxDebug("Positions->Client", "getComputedClientOuterLeft: " + w1.getComputedClientOuterLeft()); + QxDebug("Positions->Client", "getComputedClientOuterTop: " + w1.getComputedClientOuterTop()); + QxDebug("Positions->Client", "getComputedClientOuterRight: " + w1.getComputedClientOuterRight()); + QxDebug("Positions->Client", "getComputedClientOuterBottom: " + w1.getComputedClientOuterBottom()); + + QxDebug("Positions->Client", "getComputedClientBoxLeft: " + w1.getComputedClientBoxLeft()); + QxDebug("Positions->Client", "getComputedClientBoxTop: " + w1.getComputedClientBoxTop()); + QxDebug("Positions->Client", "getComputedClientBoxRight: " + w1.getComputedClientBoxRight()); + QxDebug("Positions->Client", "getComputedClientBoxBottom: " + w1.getComputedClientBoxBottom()); + + QxDebug("Positions->Client", "getComputedClientAreaLeft: " + w1.getComputedClientAreaLeft()); + QxDebug("Positions->Client", "getComputedClientAreaTop: " + w1.getComputedClientAreaTop()); + QxDebug("Positions->Client", "getComputedClientAreaRight: " + w1.getComputedClientAreaRight()); + QxDebug("Positions->Client", "getComputedClientAreaBottom: " + w1.getComputedClientAreaBottom()); + + QxDebug("Positions->Client", "getComputedClientInnerLeft: " + w1.getComputedClientInnerLeft()); + QxDebug("Positions->Client", "getComputedClientInnerTop: " + w1.getComputedClientInnerTop()); + QxDebug("Positions->Client", "getComputedClientInnerRight: " + w1.getComputedClientInnerRight()); + QxDebug("Positions->Client", "getComputedClientInnerBottom: " + w1.getComputedClientInnerBottom()); + + + + QxDebug("Positions->Page", "getComputedPageOuterLeft: " + w1.getComputedPageOuterLeft()); + QxDebug("Positions->Page", "getComputedPageOuterTop: " + w1.getComputedPageOuterTop()); + QxDebug("Positions->Page", "getComputedPageOuterRight: " + w1.getComputedPageOuterRight()); + QxDebug("Positions->Page", "getComputedPageOuterBottom: " + w1.getComputedPageOuterBottom()); + + QxDebug("Positions->Page", "getComputedPageBoxLeft: " + w1.getComputedPageBoxLeft()); + QxDebug("Positions->Page", "getComputedPageBoxTop: " + w1.getComputedPageBoxTop()); + QxDebug("Positions->Page", "getComputedPageBoxRight: " + w1.getComputedPageBoxRight()); + QxDebug("Positions->Page", "getComputedPageBoxBottom: " + w1.getComputedPageBoxBottom()); + + QxDebug("Positions->Page", "getComputedPageAreaLeft: " + w1.getComputedPageAreaLeft()); + QxDebug("Positions->Page", "getComputedPageAreaTop: " + w1.getComputedPageAreaTop()); + QxDebug("Positions->Page", "getComputedPageAreaRight: " + w1.getComputedPageAreaRight()); + QxDebug("Positions->Page", "getComputedPageAreaBottom: " + w1.getComputedPageAreaBottom()); + + QxDebug("Positions->Page", "getComputedPageInnerLeft: " + w1.getComputedPageInnerLeft()); + QxDebug("Positions->Page", "getComputedPageInnerTop: " + w1.getComputedPageInnerTop()); + QxDebug("Positions->Page", "getComputedPageInnerRight: " + w1.getComputedPageInnerRight()); + QxDebug("Positions->Page", "getComputedPageInnerBottom: " + w1.getComputedPageInnerBottom()); + + + + + QxDebug("Screen", "getComputedScreenOuterLeft: " + w1.getComputedScreenOuterLeft()); + QxDebug("Screen", "getComputedScreenOuterTop: " + w1.getComputedScreenOuterTop()); + QxDebug("Screen", "getComputedScreenOuterRight: " + w1.getComputedScreenOuterRight()); + QxDebug("Screen", "getComputedScreenOuterBottom: " + w1.getComputedScreenOuterBottom()); + + QxDebug("Screen", "getComputedScreenBoxLeft: " + w1.getComputedScreenBoxLeft()); + QxDebug("Screen", "getComputedScreenBoxTop: " + w1.getComputedScreenBoxTop()); + QxDebug("Screen", "getComputedScreenBoxRight: " + w1.getComputedScreenBoxRight()); + QxDebug("Screen", "getComputedScreenBoxBottom: " + w1.getComputedScreenBoxBottom()); + + QxDebug("Screen", "getComputedScreenAreaLeft: " + w1.getComputedScreenAreaLeft()); + QxDebug("Screen", "getComputedScreenAreaTop: " + w1.getComputedScreenAreaTop()); + QxDebug("Screen", "getComputedScreenAreaRight: " + w1.getComputedScreenAreaRight()); + QxDebug("Screen", "getComputedScreenAreaBottom: " + w1.getComputedScreenAreaBottom()); + + QxDebug("Screen", "getComputedScreenInnerLeft: " + w1.getComputedScreenInnerLeft()); + QxDebug("Screen", "getComputedScreenInnerTop: " + w1.getComputedScreenInnerTop()); + QxDebug("Screen", "getComputedScreenInnerRight: " + w1.getComputedScreenInnerRight()); + QxDebug("Screen", "getComputedScreenInnerBottom: " + w1.getComputedScreenInnerBottom()); + }); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CrossBrowser_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CrossBrowser_2.html new file mode 100644 index 0000000000..700c80a03b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/CrossBrowser_2.html @@ -0,0 +1,128 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Tests for crossbrowser offsetTop and offsetLeft properties provided by qx.dom</p> + </div> + + <style type="text/css"> + +#i{ + border: 1px solid red; +} + +#l{ + position: absolute; + + top: 100px; + left: 100px; + + width: 300px; + height: 300px; + + overflow: auto; + border: 6px solid red; + padding: 10px; +} + +#p1{ + position: static; + + width: 100px; + height: 100px; + + overflow: auto; + + border: 5px solid orange; + padding: 5px; +} + +#p2{ + position: absolute; + + top: 150px; + left: 150px; + + width: 100px; + height: 100px; + + overflow: auto; + + border: 5px solid orange; + padding: 3px; +} + +#p1 div, +#p2 div{ + border: 2px solid blue; + padding: 4px; +} + </style> + + <br/><br/><br/><br/><br/> + <p id="i">Inline</p> + + <div id="l"> + <div id="p1"> + <div id="p1a">P1-A</div> + <div id="p1b">P1-B</div> + <div id="p1c">P1-C</div> + <div id="p1d">P1-D</div> + <div id="p1e">P1-E</div> + <div id="p1f">P1-F</div> + <div id="p1g">P1-G</div> + <div id="p1h">P1-H</div> + <div id="p1j">P1-I</div> + </div> + <div id="p2"> + <div id="p2a">P2-A</div> + <div id="p2b">P2-B</div> + <div id="p2c">P2-C</div> + <div id="p2d">P2-D</div> + <div id="p2e">P2-E</div> + <div id="p2f">P2-F</div> + <div id="p2g">P2-G</div> + <div id="p2h">P2-H</div> + <div id="p2j">P2-I</div> + </div> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var i = document.getElementById("i"); + var l = document.getElementById("l"); + var p1 = document.getElementById("p1"); + var p2 = document.getElementById("p2"); + var p1a = document.getElementById("p1a"); + var p2a = document.getElementById("p2a"); + + qx.core.Init.getInstance().debug("Browser-Impl", "I: " + i.offsetLeft + "x" + i.offsetTop); + qx.core.Init.getInstance().debug("Browser-Impl", "L: " + l.offsetLeft + "x" + l.offsetTop); + qx.core.Init.getInstance().debug("Browser-Impl", "P1: " + p1.offsetLeft + "x" + p1.offsetTop); + qx.core.Init.getInstance().debug("Browser-Impl", "P2: " + p2.offsetLeft + "x" + p2.offsetTop); + qx.core.Init.getInstance().debug("Browser-Impl", "P1A: " + p1a.offsetLeft + "x" + p1a.offsetTop); + qx.core.Init.getInstance().debug("Browser-Impl", "P2A: " + p2a.offsetLeft + "x" + p2a.offsetTop); + + qx.core.Init.getInstance().debug("QxDom-Impl", "I: " + qx.html.Offset.getLeft(i) + "x" + qx.html.Offset.getTop(i)); + qx.core.Init.getInstance().debug("QxDom-Impl", "L: " + qx.html.Offset.getLeft(l) + "x" + qx.html.Offset.getTop(l)); + qx.core.Init.getInstance().debug("QxDom-Impl", "P1: " + qx.html.Offset.getLeft(p1) + "x" + qx.html.Offset.getTop(p1)); + qx.core.Init.getInstance().debug("QxDom-Impl", "P2: " + qx.html.Offset.getLeft(p2) + "x" + qx.html.Offset.getTop(p2)); + qx.core.Init.getInstance().debug("QxDom-Impl", "P1A: " + qx.html.Offset.getLeft(p1a) + "x" + qx.html.Offset.getTop(p1a)); + qx.core.Init.getInstance().debug("QxDom-Impl", "P2A: " + qx.html.Offset.getLeft(p2a) + "x" + qx.html.Offset.getTop(p2a)); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DateChooserButton_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DateChooserButton_1.html new file mode 100644 index 0000000000..a9e17cf589 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DateChooserButton_1.html @@ -0,0 +1,64 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test the date chooser button component.</p> + <p>This widget can be associated to another widget (in this case a textfield) which then + is synchronized with the selected date from the date chooser</p> + </div> + + <script type="text/javascript"> + + qx.locale.Manager.getInstance().setLocale("C"); + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function changeValue(e) { + this.debug("Text changed: " + e.getData()); + } + + var l1 = new qx.ui.basic.Label("A date field: "); l1.set({top:51, left:20}); + d.add(l1); + + var tf1 = new qx.ui.form.TextField; tf1.set({top:48,left:80,width:70}); + tf1.addEventListener("changeValue", changeValue); + d.add(tf1); + + + var dcb1 = new qx.ui.component.DateChooserButton(); + dcb1.set({top:47,left:152}); + // associate the date chooser button to the textfield tf1: + dcb1.setTargetWidget(tf1); + // change the button text + dcb1.setLabel("Please choose a date"); + // change the chooser window title + dcb1.setChooserTitle("Date choosing made simple"); + + d.add(dcb1); + + var l2 = new qx.ui.basic.Label("Date field 2: "); l2.set({top:91, left:20}); + d.add(l2); + + var tf2 = new qx.ui.form.TextField; tf2.set({top:88,left:80,width:70}); + tf2.addEventListener("changeValue", changeValue); + d.add(tf2); + + var dcb2 = new qx.ui.component.DateChooserButton(tf2); + dcb2.set({top:87,left:152}); + d.add(dcb2); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DateChooserButton_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DateChooserButton_2.html new file mode 100644 index 0000000000..024c955f5b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DateChooserButton_2.html @@ -0,0 +1,65 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test the date chooser button component.</p> + <p>This widget can be associated to another widget (in this case a textfield) which then + is synchronized with the selected date from the date chooser</p> + <p>The second demo is localized for german dates</p> + </div> + + <script type="text/javascript"> + + qx.locale.Manager.getInstance().setLocale("de_DE"); + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function changeValue(e) { + this.debug("Text changed: " + e.getData()); + } + + var l1 = new qx.ui.basic.Label("Ein Datum: "); l1.set({top:51, left:20}); + d.add(l1); + + var tf1 = new qx.ui.form.TextField; tf1.set({top:48,left:80,width:70}); + tf1.addEventListener("changeValue", changeValue); + d.add(tf1); + + + var dcb1 = new qx.ui.component.DateChooserButton(); + dcb1.set({top:47,left:152}); + // associate the date chooser button to the textfield tf1: + dcb1.setTargetWidget(tf1); + // change the button text + dcb1.setLabel("Bitte ein Datum auswählen"); + // change the chooser window title + dcb1.setChooserTitle("Einfache Datumsauswahl"); + + d.add(dcb1); + + var l2 = new qx.ui.basic.Label("Datum 2: "); l2.set({top:91, left:20}); + d.add(l2); + + var tf2 = new qx.ui.form.TextField; tf2.set({top:88,left:80,width:70}); + tf2.addEventListener("changeValue", changeValue); + d.add(tf2); + + var dcb2 = new qx.ui.component.DateChooserButton(tf2); + dcb2.set({top:87,left:152,chooserTitle:"Bitte ein Datum wählen"}); + d.add(dcb2); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_1.html new file mode 100644 index 0000000000..ff1ed23cd7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_1.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Simple Test for qx.ui.layout.DockLayout. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var dl1 = new qx.ui.layout.DockLayout; + + dl1.setTop(48); + dl1.setLeft(20); + dl1.setRight(335); + dl1.setBottom(48); + + dl1.setBorder(2, "outset"); + dl1.setBackgroundColor("white"); + + d.add(dl1); + + + + var t1 = new qx.ui.basic.Terminator; + t1.setHeight(50); + t1.setBackgroundColor("red"); + dl1.addTop(t1); + + var t2 = new qx.ui.basic.Terminator; + t2.setWidth(150); + t2.setBackgroundColor("yellow"); + dl1.addLeft(t2); + + var t3 = new qx.ui.basic.Terminator; + t3.setBackgroundColor("blue"); + dl1.add(t3); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_2.html new file mode 100644 index 0000000000..d25bcf7ebb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_2.html @@ -0,0 +1,224 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + The next generation of table-less layouts ;) + </div> + + <script type="text/javascript"> + function selfRemove() { + this.getParent().remove(this); + }; + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var dl1 = new qx.ui.layout.DockLayout; + + dl1.setTop(48); + dl1.setLeft(20); + dl1.setRight(335); + dl1.setBottom(120); + dl1.setMinWidth(400); + dl1.setMinHeight(300); + + dl1.setBorder(2, "outset"); + dl1.setBackgroundColor("white"); + + d.add(dl1); + + + + var t1 = new qx.ui.basic.Terminator; + t1.setHeight(50); + t1.setBackgroundColor("red"); + t1.setVerticalAlign("top"); + t1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t1.addEventListener("click", selfRemove); + + var t2 = new qx.ui.basic.Terminator; + // t2.setWidth(150); + t2.setWidth("20%"); + t2.setBackgroundColor("gray"); + t2.setHorizontalAlign("left"); + t2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t2.addEventListener("click", selfRemove); + + var t3 = new qx.ui.basic.Terminator; + t3.setHeight(100); + t3.setBackgroundColor("yellow"); + t3.setVerticalAlign("top"); + t3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t3.addEventListener("click", selfRemove); + + var t4 = new qx.ui.basic.Terminator; + t4.setWidth(40); + t4.setBackgroundColor("orange"); + t4.setHorizontalAlign("right"); + t4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t4.addEventListener("click", selfRemove); + + var t5 = new qx.ui.basic.Terminator; + t5.setHeight(80); + t5.setBackgroundColor("blue"); + t5.setVerticalAlign("bottom"); + t5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t5.addEventListener("click", selfRemove); + + var t6 = new qx.ui.basic.Terminator; + t6.setBackgroundColor("green"); + t6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t6.addEventListener("click", selfRemove); + + dl1.add(t1, t2, t3, t4, t5, t6); + + + + + + + + + + var l1 = new qx.ui.basic.Label("Mode:"); + l1.setWidth(50); + + var btn1_1 = new qx.ui.form.Button("Vertical", "icon/16/actions/dialog-ok.png"); + var btn1_2 = new qx.ui.form.Button("Horizontal", "icon/16/actions/dialog-ok.png"); + var btn1_3 = new qx.ui.form.Button("Ordered", "icon/16/actions/dialog-ok.png"); + + btn1_1.addEventListener("click", function(e) { + dl1.setMode("vertical"); + }); + + btn1_2.addEventListener("click", function(e) { + dl1.setMode("horizontal"); + }); + + btn1_3.addEventListener("click", function(e) { + dl1.setMode("ordered"); + }); + + var h1 = new qx.ui.layout.HorizontalBoxLayout; + h1.setVerticalChildrenAlign("middle"); + h1.add(l1, btn1_1, btn1_2, btn1_3); + h1.setBottom(78); + h1.setLeft(20); + d.add(h1); + + + + + + + + + + var l2 = new qx.ui.basic.Label("Children:"); + l2.setWidth(50); + + var btn2_1 = new qx.ui.form.Button("Remove First", "icon/16/actions/dialog-ok.png"); + var btn2_2 = new qx.ui.form.Button("Remove Last", "icon/16/actions/dialog-ok.png"); + var btn2_3 = new qx.ui.form.Button("Add Top", "icon/16/actions/dialog-ok.png"); + var btn2_4 = new qx.ui.form.Button("Add Right", "icon/16/actions/dialog-ok.png"); + var btn2_5 = new qx.ui.form.Button("Add Bottom", "icon/16/actions/dialog-ok.png"); + var btn2_6 = new qx.ui.form.Button("Add Left", "icon/16/actions/dialog-ok.png"); + var btn2_7 = new qx.ui.form.Button("Add Auto", "icon/16/actions/dialog-ok.png"); + + btn2_1.addEventListener("execute", function(e) + { + var c = dl1.getFirstChild(); + if (c) { + dl1.remove(c); + }; + }); + + btn2_2.addEventListener("execute", function(e) + { + var c = dl1.getLastChild(); + if (c) { + dl1.remove(c); + }; + }); + + btn2_3.addEventListener("execute", function(e) + { + var t = new qx.ui.basic.Terminator(); + + t.setBackgroundColor(qx.renderer.color.Color.fromRandom()); + t.setHeight(2+Math.round(Math.random()*50)); + t.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t.addEventListener("click", selfRemove); + + dl1.addTop(t); + }); + + btn2_4.addEventListener("execute", function(e) + { + var t = new qx.ui.basic.Terminator(); + + t.setBackgroundColor(qx.renderer.color.Color.fromRandom()); + t.setWidth(2+Math.round(Math.random()*50)); + t.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t.addEventListener("click", selfRemove); + + dl1.addRight(t); + }); + + btn2_5.addEventListener("execute", function(e) + { + var t = new qx.ui.basic.Terminator(); + + t.setBackgroundColor(qx.renderer.color.Color.fromRandom()); + t.setHeight(2+Math.round(Math.random()*50)); + t.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t.addEventListener("click", selfRemove); + + dl1.addBottom(t); + }); + + btn2_6.addEventListener("execute", function(e) + { + var t = new qx.ui.basic.Terminator(); + + t.setBackgroundColor(qx.renderer.color.Color.fromRandom()); + t.setWidth(2+Math.round(Math.random()*50)); + t.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t.addEventListener("click", selfRemove); + + dl1.addLeft(t); + }); + + btn2_7.addEventListener("execute", function(e) + { + var t = new qx.ui.basic.Terminator(); + + t.setBackgroundColor(qx.renderer.color.Color.fromRandom()); + t.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t.addEventListener("click", selfRemove); + + dl1.add(t); + }); + + + var h2 = new qx.ui.layout.HorizontalBoxLayout; + h2.setVerticalChildrenAlign("middle"); + h2.add(l2, btn2_1, btn2_2, btn2_3, btn2_4, btn2_5, btn2_6, btn2_7); + h2.setBottom(48); + h2.setLeft(20); + d.add(h2); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_3.html new file mode 100644 index 0000000000..c0e5dd5e99 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_3.html @@ -0,0 +1,140 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Testing Layouts inside the qx.ui.layout.DockLayout. In this example centering through qx.ui.layout.HorizontalBoxLayout. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var dl1 = new qx.ui.layout.DockLayout; + + dl1.setTop(48); + dl1.setLeft(20); + dl1.setRight(335); + dl1.setBottom(48); + + dl1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + dl1.setBackgroundColor("white"); + + d.add(dl1); + + + + var t1 = new qx.ui.layout.HorizontalBoxLayout; + t1.setHeight(50); + t1.setBackgroundColor("red"); + t1.setWidth(null); + t1.setVerticalChildrenAlign("middle"); + t1.setHorizontalChildrenAlign("center"); + t1.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addTop(t1); + + var t2 = new qx.ui.layout.HorizontalBoxLayout; + t2.setWidth(150); + t2.setBackgroundColor("yellow"); + t2.setHeight(null); + t2.setVerticalChildrenAlign("middle"); + t2.setHorizontalChildrenAlign("center"); + t2.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addLeft(t2); + + var t3 = new qx.ui.layout.HorizontalBoxLayout; + t3.setHeight(50); + t3.setBackgroundColor("blue"); + t3.setWidth(null); + t3.setVerticalChildrenAlign("middle"); + t3.setHorizontalChildrenAlign("center"); + t3.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addBottom(t3); + + var t4 = new qx.ui.layout.HorizontalBoxLayout; + t4.setWidth(150); + t4.setBackgroundColor("green"); + t4.setHeight(null); + t4.setVerticalChildrenAlign("middle"); + t4.setHorizontalChildrenAlign("center"); + t4.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addRight(t4); + + + + + var dl2 = new qx.ui.layout.DockLayout; + dl2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + dl1.add(dl2); + + + + + + + + var t5 = new qx.ui.layout.HorizontalBoxLayout; + t5.setHeight(50); + t5.setBackgroundColor("fuchsia"); + t5.setWidth(null); + t5.setVerticalChildrenAlign("middle"); + t5.setHorizontalChildrenAlign("center"); + t5.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addTop(t5); + + var t6 = new qx.ui.layout.HorizontalBoxLayout; + t6.setWidth(150); + t6.setBackgroundColor("orange"); + t6.setHeight(null); + t6.setVerticalChildrenAlign("middle"); + t6.setHorizontalChildrenAlign("center"); + t6.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addLeft(t6); + + var t7 = new qx.ui.layout.HorizontalBoxLayout; + t7.setHeight(50); + t7.setBackgroundColor("aqua"); + t7.setWidth(null); + t7.setVerticalChildrenAlign("middle"); + t7.setHorizontalChildrenAlign("center"); + t7.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addBottom(t7); + + var t8 = new qx.ui.layout.HorizontalBoxLayout; + t8.setWidth(150); + t8.setBackgroundColor("lime"); + t8.setHeight(null); + t8.setVerticalChildrenAlign("middle"); + t8.setHorizontalChildrenAlign("center"); + t8.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addRight(t8); + + + + + + var hb1 = new qx.ui.layout.HorizontalBoxLayout; + + hb1.setBackgroundColor("silver"); + hb1.setVerticalChildrenAlign("middle"); + hb1.setHorizontalChildrenAlign("center"); + hb1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + hb1.setWidth(null); + hb1.setHeight(null); + hb1.add(new qx.ui.basic.Image("icon/64/apps/accessories-clock.png")); + + dl2.add(hb1); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_4.html new file mode 100644 index 0000000000..62bc46c3ae --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_4.html @@ -0,0 +1,140 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Same as the previous one, but additional the dimensions of the qx.ui.layout.DockLayout are defined as percents here. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var dl1 = new qx.ui.layout.DockLayout; + + dl1.setTop(48); + dl1.setLeft(20); + dl1.setRight(335); + dl1.setBottom(48); + + dl1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + dl1.setBackgroundColor("white"); + + d.add(dl1); + + + + var t1 = new qx.ui.layout.HorizontalBoxLayout; + t1.setHeight("20%"); + t1.setBackgroundColor("red"); + t1.setWidth(null); + t1.setVerticalChildrenAlign("middle"); + t1.setHorizontalChildrenAlign("center"); + t1.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addTop(t1); + + var t2 = new qx.ui.layout.HorizontalBoxLayout; + t2.setWidth("20%"); + t2.setBackgroundColor("yellow"); + t2.setHeight(null); + t2.setVerticalChildrenAlign("middle"); + t2.setHorizontalChildrenAlign("center"); + t2.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addLeft(t2); + + var t3 = new qx.ui.layout.HorizontalBoxLayout; + t3.setHeight("20%"); + t3.setBackgroundColor("blue"); + t3.setWidth(null); + t3.setVerticalChildrenAlign("middle"); + t3.setHorizontalChildrenAlign("center"); + t3.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addBottom(t3); + + var t4 = new qx.ui.layout.HorizontalBoxLayout; + t4.setWidth("20%"); + t4.setBackgroundColor("green"); + t4.setHeight(null); + t4.setVerticalChildrenAlign("middle"); + t4.setHorizontalChildrenAlign("center"); + t4.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + dl1.addRight(t4); + + + + + var dl2 = new qx.ui.layout.DockLayout; + dl2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + dl1.add(dl2); + + + + + + + + var t5 = new qx.ui.layout.HorizontalBoxLayout; + t5.setHeight("20%"); + t5.setBackgroundColor("fuchsia"); + t5.setWidth(null); + t5.setVerticalChildrenAlign("middle"); + t5.setHorizontalChildrenAlign("center"); + t5.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addTop(t5); + + var t6 = new qx.ui.layout.HorizontalBoxLayout; + t6.setWidth("20%"); + t6.setBackgroundColor("orange"); + t6.setHeight(null); + t6.setVerticalChildrenAlign("middle"); + t6.setHorizontalChildrenAlign("center"); + t6.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addLeft(t6); + + var t7 = new qx.ui.layout.HorizontalBoxLayout; + t7.setHeight("20%"); + t7.setBackgroundColor("aqua"); + t7.setWidth(null); + t7.setVerticalChildrenAlign("middle"); + t7.setHorizontalChildrenAlign("center"); + t7.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addBottom(t7); + + var t8 = new qx.ui.layout.HorizontalBoxLayout; + t8.setWidth("20%"); + t8.setBackgroundColor("lime"); + t8.setHeight(null); + t8.setVerticalChildrenAlign("middle"); + t8.setHorizontalChildrenAlign("center"); + t8.add(new qx.ui.basic.Image("icon/32/apps/accessories-clock.png")); + dl2.addRight(t8); + + + + + + var hb1 = new qx.ui.layout.HorizontalBoxLayout; + + hb1.setBackgroundColor("silver"); + hb1.setVerticalChildrenAlign("middle"); + hb1.setHorizontalChildrenAlign("center"); + hb1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + hb1.setWidth(null); + hb1.setHeight(null); + hb1.add(new qx.ui.basic.Image("icon/64/apps/accessories-clock.png")); + + dl2.add(hb1); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_5.html new file mode 100644 index 0000000000..5375babd02 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_5.html @@ -0,0 +1,164 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Same as the previous one, but additional added multiple children to the box layout. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var dl1 = new qx.ui.layout.DockLayout; + + dl1.setTop(48); + dl1.setLeft(20); + dl1.setRight(335); + dl1.setBottom(48); + + dl1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + dl1.setBackgroundColor("white"); + + d.add(dl1); + + + + var t1 = new qx.ui.layout.HorizontalBoxLayout; + t1.setHeight("20%"); + t1.setBackgroundColor("red"); + t1.setWidth(null); + t1.setVerticalChildrenAlign("middle"); + t1.setHorizontalChildrenAlign("center"); + t1.setSpacing(4); + t1.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t1.add(new qx.ui.basic.Label("Hello World")); + t1.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl1.addTop(t1); + + var t2 = new qx.ui.layout.HorizontalBoxLayout; + t2.setWidth("20%"); + t2.setBackgroundColor("yellow"); + t2.setHeight(null); + t2.setVerticalChildrenAlign("middle"); + t2.setHorizontalChildrenAlign("center"); + t2.setSpacing(4); + t2.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t2.add(new qx.ui.basic.Label("Hello World")); + t2.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl1.addLeft(t2); + + var t3 = new qx.ui.layout.HorizontalBoxLayout; + t3.setHeight("20%"); + t3.setBackgroundColor("blue"); + t3.setWidth(null); + t3.setVerticalChildrenAlign("middle"); + t3.setHorizontalChildrenAlign("center"); + t3.setSpacing(4); + t3.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t3.add(new qx.ui.basic.Label("Hello World")); + t3.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl1.addBottom(t3); + + var t4 = new qx.ui.layout.HorizontalBoxLayout; + t4.setWidth("20%"); + t4.setBackgroundColor("green"); + t4.setHeight(null); + t4.setVerticalChildrenAlign("middle"); + t4.setHorizontalChildrenAlign("center"); + t4.setSpacing(4); + t4.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t4.add(new qx.ui.basic.Label("Hello World")); + t4.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl1.addRight(t4); + + + + + var dl2 = new qx.ui.layout.DockLayout; + dl2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + dl1.add(dl2); + + + + + + + + var t5 = new qx.ui.layout.HorizontalBoxLayout; + t5.setHeight("20%"); + t5.setBackgroundColor("fuchsia"); + t5.setWidth(null); + t5.setVerticalChildrenAlign("middle"); + t5.setHorizontalChildrenAlign("center"); + t5.setSpacing(4); + t5.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t5.add(new qx.ui.basic.Label("Hello World")); + t5.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl2.addTop(t5); + + var t6 = new qx.ui.layout.HorizontalBoxLayout; + t6.setWidth("20%"); + t6.setBackgroundColor("orange"); + t6.setHeight(null); + t6.setVerticalChildrenAlign("middle"); + t6.setHorizontalChildrenAlign("center"); + t6.setSpacing(4); + t6.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t6.add(new qx.ui.basic.Label("Hello World")); + t6.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl2.addLeft(t6); + + var t7 = new qx.ui.layout.HorizontalBoxLayout; + t7.setHeight("20%"); + t7.setBackgroundColor("aqua"); + t7.setWidth(null); + t7.setVerticalChildrenAlign("middle"); + t7.setHorizontalChildrenAlign("center"); + t7.setSpacing(4); + t7.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t7.add(new qx.ui.basic.Label("Hello World")); + t7.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl2.addBottom(t7); + + var t8 = new qx.ui.layout.HorizontalBoxLayout; + t8.setWidth("20%"); + t8.setBackgroundColor("lime"); + t8.setHeight(null); + t8.setVerticalChildrenAlign("middle"); + t8.setHorizontalChildrenAlign("center"); + t8.setSpacing(4); + t8.add(new qx.ui.basic.Image("icon/16/apps/accessories-clock.png")); + t8.add(new qx.ui.basic.Label("Hello World")); + t8.add(new qx.ui.basic.Image("icon/48/categories/applications-graphics.png")); + dl2.addRight(t8); + + + + + + var hb1 = new qx.ui.layout.HorizontalBoxLayout; + + hb1.setBackgroundColor("silver"); + hb1.setVerticalChildrenAlign("middle"); + hb1.setHorizontalChildrenAlign("center"); + hb1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + hb1.setWidth(null); + hb1.setHeight(null); + hb1.add(new qx.ui.basic.Image("icon/64/apps/accessories-clock.png")); + + dl2.add(hb1); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_6.html new file mode 100644 index 0000000000..9ae310189d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DockLayout_6.html @@ -0,0 +1,71 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Simple Test for qx.ui.layout.DockLayout. But with a dynamic child. Simple click on "Hello World" to see the effect. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var dl1 = new qx.ui.layout.DockLayout; + + dl1.setTop(48); + dl1.setLeft(20); + dl1.setRight(335); + dl1.setBottom(48); + + dl1.setBorder(2, "outset"); + dl1.setBackgroundColor("white"); + + d.add(dl1); + + + + var t1 = new qx.ui.basic.Terminator; + t1.setHeight(50); + t1.setBackgroundColor("white"); + t1.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + dl1.addTop(t1); + + var t2 = new qx.ui.basic.Label("Hello World"); + t2.setHeight(null); + t2.setBackgroundColor("white"); + t2.setPadding(10); + t2.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + dl1.addLeft(t2); + + var t3 = new qx.ui.layout.HorizontalBoxLayout; + + t3.setWidth(null); + t3.setHeight(null); + t3.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + t3.setBackgroundColor("white"); + t3.setHorizontalChildrenAlign("center"); + t3.setVerticalChildrenAlign("middle"); + + dl1.add(t3); + + t3.add(new qx.ui.basic.Image("icon/128/categories/applications-games.png")); + + + + t2.addEventListener("click", function(e) { + this.setHtml(this.getHtml() == "Hello World" ? "Real long text, especially to test this cool behaviour" : "Hello World"); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DragAndDropManager_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DragAndDropManager_1.html new file mode 100644 index 0000000000..1412a37315 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DragAndDropManager_1.html @@ -0,0 +1,131 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for drag&drop implementation.</p> + <p>Changing the action using the modifier keys (Shift, Alt, Control) might not work in Safari.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var a1 = new qx.ui.basic.Atom("Drag Me"); + a1.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove }); + a1.setPadding(10); + a1.setLocation(20, 48); + d.add(a1); + + + function handleDragStart(e) + { + e.addData(qx.util.Mime.TEXT, "Plain text"); + e.addData(qx.util.Mime.HTML, "Some <strong>HTML</strong>"); + + e.addAction("copy"); + e.addAction("move"); + e.addAction("alias"); + + e.startDrag(); + }; + + function handleDragDrop( e ) + { + var type = e.getDropDataTypes()[0]; + var data = e.getData(type); + + this.debug("Drag&Drop Action: " + e.getAction()); + + switch(type) + { + case qx.util.Mime.TEXT: + case qx.util.Mime.HTML: + this.setLabel(data); + break; + }; + }; + + function handleDragOver(e) { + e.getTarget().setBackgroundColor("#f2f2f2"); + }; + + function handleDragOut(e) { + e.getTarget().setBackgroundColor("#fff"); + }; + + function handleDragEnd(e) + { + // we don't need to do anything here + // If we had a succesful move action we might have removed + // the source here or something else + }; + + a1.addEventListener("dragstart", handleDragStart); + + + + + var w1 = new qx.ui.basic.Atom("Drop to me"); + w1.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 100, left: 20, horizontalAlign: "center" }); + w1.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w1.addEventListener("dragdrop", handleDragDrop); + w1.addEventListener("dragover", handleDragOver); + w1.addEventListener("dragout", handleDragOut); + + var w2 = new qx.ui.basic.Atom("Drop to me"); + w2.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 230, left: 20, horizontalAlign: "center" }); + w2.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w2.addEventListener("dragdrop", handleDragDrop); + w2.addEventListener("dragover", handleDragOver); + w2.addEventListener("dragout", handleDragOut); + + var w3 = new qx.ui.basic.Atom("Drop to me"); + w3.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 100, left: 150, horizontalAlign: "center" }); + w3.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w3.addEventListener("dragdrop", handleDragDrop); + w3.addEventListener("dragover", handleDragOver); + w3.addEventListener("dragout", handleDragOut); + + var w4 = new qx.ui.basic.Atom("Drop to me"); + w4.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 230, left: 150, horizontalAlign: "center" }); + w4.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w4.addEventListener("dragdrop", handleDragDrop); + w4.addEventListener("dragover", handleDragOver); + w4.addEventListener("dragout", handleDragOut); + + + + var f1 = new qx.ui.layout.CanvasLayout; + f1.set({ backgroundColor: "orange", width: 230, height: 120, top: 350, left: 20 }); + + var w5 = new qx.ui.basic.Atom("Drop to me"); + w5.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 10, horizontalAlign: "center" }); + w5.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w5.addEventListener("dragdrop", handleDragDrop); + w5.addEventListener("dragover", handleDragOver); + w5.addEventListener("dragout", handleDragOut); + + var w6 = new qx.ui.basic.Atom("Drop to me"); + w6.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 10, right: 0, horizontalAlign: "center" }); + w6.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w6.addEventListener("dragdrop", handleDragDrop); + w6.addEventListener("dragover", handleDragOver); + w6.addEventListener("dragout", handleDragOut); + + f1.add(w5, w6); + d.add(w1, w2, w3, w4, f1); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DragAndDropManager_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DragAndDropManager_2.html new file mode 100644 index 0000000000..31bf712a05 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/DragAndDropManager_2.html @@ -0,0 +1,135 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for drag&drop implementation.</p> + <p>Changing the action using the modifier keys (Shift, Alt, Control) might not work in Safari.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var a1 = new qx.ui.basic.Atom("Drag Me"); + a1.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove }); + a1.setPadding(10); + a1.setLocation(20, 48); + d.add(a1); + + + + + function printEvent(e) { + return "TARGET:" + (e.getTarget() ? e.getTarget().toHashCode() : "null") + " [ORIG:" + (e.getOriginalTarget() ? e.getOriginalTarget().toHashCode() : "null") + "] [REL:" + (e.getRelatedTarget() ? e.getRelatedTarget().toHashCode() : "null") + "]"; + }; + + function handleDragStart(e) + { + this.debug("Fire DragStart: " + printEvent(e)); + + e.addData(qx.util.Mime.TEXT, "Plain text"); + e.addData(qx.util.Mime.HTML, "Some <strong>HTML</strong>"); + + e.addAction("copy"); + e.addAction("move"); + e.addAction("alias"); + + if (feedbackCheckBox.isChecked()) { + var feedbackWidget = new qx.ui.basic.Atom("Some HTML", "icon/16/file-new.png"); + feedbackWidget.set({ border:new qx.renderer.border.Border(1, "dashed", "gray"), + opacity:0.7 }); + feedbackWidget.setPadding(2); + + e.setFeedbackWidget(feedbackWidget, 15, 0, true); + e.setCursorPosition(15, 25); + } + + e.startDrag(); + }; + + function handleDragDrop( e ) + { + this.debug("Fire DragDrop: " + printEvent(e)); + + var type = e.getDropDataTypes()[0]; + var data = e.getData(type); + + switch(type) + { + case qx.util.Mime.TEXT: + case qx.util.Mime.HTML: + this.setLabel(data); + break; + }; + }; + + function handleDragOver(e) + { + this.debug("Fire DragOver: " + printEvent(e)); + e.getTarget().setBackgroundColor("#f2f2f2"); + }; + + function handleDragOut(e) + { + this.debug("Fire DragOut: " + printEvent(e)); + e.getTarget().setBackgroundColor("#fff"); + }; + + function handleDragEnd(e) { + this.debug("Fire DragEnd: " + printEvent(e)); + }; + + + + + a1.addEventListener("dragstart", handleDragStart); + a1.addEventListener("dragend", handleDragEnd); + + + var feedbackCheckBox = new qx.ui.form.CheckBox("Show feedback"); + feedbackCheckBox.setLocation(120, 55); + + var w1 = new qx.ui.basic.Atom("Drop to me"); + w1.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 100, left: 20, horizontalAlign: "center" }); + w1.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w1.addEventListener("dragdrop", handleDragDrop); + w1.addEventListener("dragover", handleDragOver); + w1.addEventListener("dragout", handleDragOut); + + var w2 = new qx.ui.basic.Atom("Drop to me"); + w2.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 200, left: 20, horizontalAlign: "center" }); + w2.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w2.addEventListener("dragdrop", handleDragDrop); + w2.addEventListener("dragover", handleDragOver); + w2.addEventListener("dragout", handleDragOut); + + var w3 = new qx.ui.basic.Atom("Drop to me"); + w3.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 100, left: 150, horizontalAlign: "center" }); + w3.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w3.addEventListener("dragdrop", handleDragDrop); + w3.addEventListener("dragover", handleDragOver); + w3.addEventListener("dragout", handleDragOut); + + var w4 = new qx.ui.basic.Atom("Drop to me"); + w4.set({ backgroundColor: "white", border: qx.renderer.border.BorderPresets.getInstance().groove, width: 100, height: 100, top: 200, left: 150, horizontalAlign: "center" }); + w4.setDropDataTypes([qx.util.Mime.HTML, qx.util.Mime.TEXT]); + w4.addEventListener("dragdrop", handleDragDrop); + w4.addEventListener("dragover", handleDragOver); + w4.addEventListener("dragout", handleDragOut); + + d.add(feedbackCheckBox, w1, w2, w3, w4); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/EnabledDisabled_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/EnabledDisabled_1.html new file mode 100644 index 0000000000..002562e2da --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/EnabledDisabled_1.html @@ -0,0 +1,230 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some test for the enable property in QxObject which will be extended from qx.ui.core.Widget and any other + widget which need additional handling on a change of this property. Keep in mind: Disabled QxWidgets will be ignored + from the QxEventManager and the qx.event.handler.FocusHandler.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + + var d = qx.ui.core.ClientDocument.getInstance(); + + var w1 = new qx.ui.basic.Label("Basic Container"); + + with(w1) + { + setWidth(75); + setLeft(20); + setTop(48); + setHeight(50); + setWidth(80); + setBackgroundColor("#fff"); + setColor("blue"); + setTabIndex(1); + setBorder(new qx.renderer.border.Border(2, "solid", "blue")); + setEnabled(false); + }; + + d.add(w1); + + w1.addEventListener("mouseover", function(e) + { + if( this.getEnabled() ) + this.getElement().style.color = "red"; + }); + + w1.addEventListener("mouseout", function(e) + { + if( this.getEnabled() ) + this.getElement().style.color = "blue"; + }); + + var c1t = new qx.ui.form.CheckBox("Enabled"); + with(c1t) + { + setTop(60); + setLeft(220); + addEventListener("changeChecked", function(e) { w1.setEnabled(e.getData()); }); + }; + + d.add(c1t); + + //------ + // atom + //------ + + var a1 = new qx.ui.basic.Atom("Atom", "icon/32/apps/accessories-clock.png"); + + with(a1) + { + setTop(190); + setLeft(20); + setEnabled(false); + setPadding(2, 4); + setBackgroundColor("#FFFF6D"); + }; + + d.add(a1); + + var swa1 = new qx.ui.form.CheckBox("Enabled"); + with(swa1) + { + setTop(196); + setLeft(220); + addEventListener("changeChecked", function(e) { a1.setEnabled(e.getData()); }); + }; + + d.add(swa1); + + //-------- + // button + //-------- + + var btn1 = new qx.ui.form.Button("Button No #1"); + with(btn1) + { + setTop(244); + setLeft(20); + setEnabled(false); + }; + + d.add(btn1); + + var swbtn1 = new qx.ui.form.CheckBox("Enabled"); + with(swbtn1) + { + setTop(244); + setLeft(220); + addEventListener("changeChecked", function(e) { btn1.setEnabled(e.getData()); }); + }; + + d.add(swbtn1); + + //------------- + // radiobutton + //------------- + + var rb1 = new qx.ui.form.RadioButton("Radio button"); + with(rb1) + { + setTop(292); + setLeft(20); + setEnabled(false); + }; + + d.add(rb1); + + var swrb1 = new qx.ui.form.CheckBox("Enabled"); + with(swrb1) + { + setTop(292); + setLeft(220); + addEventListener("changeChecked", function(e) { rb1.setEnabled(e.getData()); }); + }; + + d.add(swrb1); + + //---------- + // checkbox + //---------- + + var cb1 = new qx.ui.form.CheckBox("Checkbox"); + with(cb1) + { + setTop(340); + setLeft(20); + setEnabled(false); + }; + + d.add(cb1); + + var swcb1 = new qx.ui.form.CheckBox("Enabled"); + with(swcb1) + { + setTop(340); + setLeft(220); + addEventListener("changeChecked", function(e) { cb1.setEnabled(e.getData()); }); + }; + + d.add(swcb1); + + //----------- + // TextField + //----------- + + var tf1 = new qx.ui.form.TextField; + with(tf1) + { + setTop(388); + setLeft(20); + setEnabled(false); + }; + + d.add(tf1); + + var swtf1 = new qx.ui.form.CheckBox("Enabled"); + with(swtf1) + { + setTop(388); + setLeft(220); + addEventListener("changeChecked", function(e) { tf1.setEnabled(e.getData()); }); + }; + + d.add(swtf1); + + //----------- + // ComboBox + //----------- + + var cb1 = new qx.ui.form.ComboBox; + with(cb1) + { + setTop(436); + setLeft(20); + setEnabled(false); + setEditable(true); + }; + + d.add(cb1); + + cb1.addEventListener("beforeInitialOpen", function(e) + { + var item; + + for(var i=1; i<=30; i++) + { + item = new qx.ui.form.ListItem("Item No " + i); + !(i % 10) && (item.setEnabled(false)); + cb1.add(item); + }; + }); + + var swcb1 = new qx.ui.form.CheckBox("Enabled"); + with(swcb1) + { + setTop(436); + setLeft(220); + addEventListener("changeChecked", function(e) { cb1.setEnabled(e.getData()); }); + }; + + d.add(swcb1); + + }); + + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FieldSet_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FieldSet_1.html new file mode 100644 index 0000000000..6257c2b0b8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FieldSet_1.html @@ -0,0 +1,141 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A more complex example than the previous one. Use layout managers for its content. Configured minWidth of the qx.ui.groupbox.GroupBox with "auto".</p> + </div> + + <fieldset style="position:absolute; top:48px; left:400px; width:200px; height:100px"><legend>builtin</legend>content content content content content content content content content content content content content content content</fieldset> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var fs = new qx.ui.groupbox.GroupBox("My first Fieldset", "icon/16/apps/accessories-clock.png"); + + with(fs) + { + setWidth("40%"); + setBottom(48); + setTop(48); + setLeft(20); + + setMaxWidth(350); + setMinWidth("auto"); + }; + + d.add(fs); + + + + + var fsl = new qx.ui.layout.VerticalBoxLayout; + fsl.setLeft(0); + fsl.setRight(0); + fsl.setHeight("auto"); + fsl.setSpacing(4); + fs.add(fsl); + + + + + var r1 = new qx.ui.layout.HorizontalBoxLayout; + r1.setLeft(0); + r1.setWidth("100%"); + r1.setHeight("auto"); + r1.setVerticalChildrenAlign("middle"); + fsl.add(r1); + + var a1 = new qx.ui.basic.Atom("TextField 1"); + with(a1) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i1 = new qx.ui.form.TextField; + with(i1) + { + setRight(0); + setWidth("60%"); + }; + + r1.add(a1, i1); + + + + + + var r2 = new qx.ui.layout.HorizontalBoxLayout; + r2.setLeft(0); + r2.setWidth("100%"); + r2.setHeight("auto"); + r2.setVerticalChildrenAlign("middle"); + fsl.add(r2); + + var a2 = new qx.ui.basic.Atom("TextField 2", "icon/16/apps/preferences-desktop-theme.png"); + with(a2) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i2 = new qx.ui.form.TextField; + with(i2) + { + setRight(0); + setWidth("60%"); + }; + + r2.add(a2, i2); + + + + + + + var r3 = new qx.ui.layout.HorizontalBoxLayout; + r3.setLeft(0); + r3.setWidth("100%"); + r3.setHeight("auto"); + r3.setVerticalChildrenAlign("middle"); + fsl.add(r3); + + var a3 = new qx.ui.basic.Atom("TextField 3"); + with(a3) + { + setLeft(0); + setWidth("40%"); + setHorizontalChildrenAlign("left"); + }; + + var i3 = new qx.ui.form.TextField; + with(i3) + { + setRight(0); + setWidth("60%"); + }; + + r3.add(a3, i3); + + + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Fields_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Fields_1.html new file mode 100644 index 0000000000..c448ae7694 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Fields_1.html @@ -0,0 +1,179 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test the setting of background color of form fields.</p> + </div> + + <script type="text/javascript"> + function changeBackgrounds(parent, color) + { + var children = parent.getChildren(); + var child; + + for (var i=0; i<children.length; i++) + { + child = children[i]; + + switch(child.classname) + { + case 'qx.ui.form.TextArea': + case 'qx.ui.form.TextField': + case 'qx.ui.form.ComboBox': + case 'qx.ui.form.PasswordField': + child.setBackgroundColor(color); + break; + }; + }; + }; + + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function textChange(e) { + this.debug("Text changed: " + e.getData()); + } + + var t1 = new qx.ui.form.TextField; + t1.setValue("textfield"); + t1.setTop(48); + t1.setLeft(20); + + t1.addEventListener("changeText", textChange); + t1.addEventListener("input", function(e) { + this.debug("Input: " + e.getData()); + }); + + d.add(t1); + + + + + var t2 = new qx.ui.form.PasswordField; + t2.setValue("passwordfield"); + t2.setTop(80); + t2.setLeft(20); + + t2.addEventListener("changeText", textChange); + + d.add(t2); + + + var t3 = new qx.ui.form.TextArea; + t3.setValue("textarea"); + t3.setTop(110); + t3.setLeft(20); + t3.setWidth(300); + t3.setHeight(60); + + t3.addEventListener("changeText", textChange); + + d.add(t3); + + + var t4 = new qx.ui.form.TextField; + t4.setValue("textfield"); + t4.setTop(200); + t4.setLeft(20); + t4.setWidth(200); + t4.setMaxLength(100); + t4.setReadOnly(true); + + t4.addEventListener("changeText", textChange); + + d.add(t4); + + + var t5 = new qx.ui.form.TextField; + t5.setValue("You are foo!"); + t5.setTop(240); + t5.setLeft(20); + + t5.addEventListener("changeText", textChange); + + d.add(t5); + + var c1 = new qx.ui.form.ComboBox; + c1.setTop(280); + c1.setLeft(20); + + c1.addEventListener("beforeInitialOpen", function(e) + { + var item; + + for(var i=1; i<=30; i++) + { + item = new qx.ui.form.ListItem("Item No " + i); + !(i % 10) && (item.setEnabled(false)); + c1.add(item); + }; + }); + + // this does not work here (if there is no content) + c1.setSelected(c1.getList().getFirstChild()); + + c1.addEventListener("changeValue", function(e) { + this.debug("New value: " + e.getData()); + }); + + c1.addEventListener("changeSelected", function(e) { + this.debug("New selected: " + e.getData()); + }); + + + + + var b1 = new qx.ui.form.CheckBox("Editable"); + + b1.set({ top: 282, left: 150 }); + + b1.addEventListener("changeChecked", function(e) { + c1.setEditable(e.getData()); + }); + + + var b2 = new qx.ui.form.Button("red", "icon/16/actions/format-color.png"); b2.set({left:10,top:10}); + var b3 = new qx.ui.form.Button("green", "icon/16/actions/format-color.png"); b3.set({left:10,top:40}); + var b4 = new qx.ui.form.Button("white", "icon/16/actions/format-color.png"); b4.set({left:10,top:70}); + + b2.addEventListener("click", function(e) { changeBackgrounds(d,this.getLabel()); }); + b3.addEventListener("click", function(e) { changeBackgrounds(d,this.getLabel()); }); + b4.addEventListener("click", function(e) { changeBackgrounds(d,this.getLabel()); }); + + var fs = new qx.ui.groupbox.GroupBox("BackgroundColor"); + fs.set({left:400,top:50,width:150,height:"auto"}); + fs.add(b2,b3,b4); + + + + d.add(c1, b1, fs); + + + + + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 20, 320); + + + + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_1.html new file mode 100644 index 0000000000..da53826fcc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_1.html @@ -0,0 +1,319 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.FlowLayout widget. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + + var flow1 = new qx.ui.layout.FlowLayout; + + flow1.setTop(48); + flow1.setLeft(20); + flow1.setRight(335); + flow1.setBottom(200); + + // flow1.setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + // flow1.setPadding(8); + + flow1.setHorizontalSpacing(4); + flow1.setVerticalSpacing(4); + + // flow1.setHorizontalChildrenAlign("right"); + // flow1.setVerticalChildrenAlign("bottom"); + + // flow1.setReverseChildrenOrder(true); + + d.add(flow1); + + + + var w1 = new qx.ui.basic.Terminator; + + w1.setBackgroundColor("orange"); + w1.setWidth(300); + w1.setHeight(20); + + + var w2 = new qx.ui.basic.Terminator; + + w2.setBackgroundColor("blue"); + w2.setWidth(200); + w2.setHeight(50); + + + var w3 = new qx.ui.basic.Terminator; + + w3.setBackgroundColor("green"); + w3.setWidth(100); + w3.setHeight(150); + w3.setMarginLeft(20); + + var w4 = new qx.ui.basic.Terminator; + + w4.setBackgroundColor("purple"); + w4.setWidth("30%"); + w4.setHeight("10%"); + + var w5 = new qx.ui.basic.Terminator; + + w5.setBackgroundColor("yellow"); + w5.setWidth(50); + w5.setHeight(80); + + var w6 = new qx.ui.basic.Terminator; + + w6.setBackgroundColor("red"); + w6.setWidth(400); + w6.setHeight(50); + + var i1 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + var i2 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + i2.setResizeToInner(true); + + var c1 = new qx.ui.basic.Label("Hello World"); + var c2 = new qx.ui.basic.Label("<ol><li>Simple HTML List</li><li>with one</li><li>and another item</li></ol>"); + + var a1 = new qx.ui.form.Button("Press", "icon/16/apps/preferences-desktop-multimedia.png"); + + + flow1.add(w1, i1, w2, w3, a1, c2, w4, i2, w5, c1, w6); + + + + + + w1.addEventListener("click", function(e) { + this.setMaxWidth(this.getMaxWidth() == 50 ? null : 50); + }); + + w2.addEventListener("click", function(e) + { + if (this.getWidth() == 200) + { + this.setWidth(100); + this.setHeight(200); + } + else + { + this.setWidth(200); + this.setHeight(50); + }; + }); + + i1.addEventListener("click", function(e) { + this.setSource(this.getSource() == "icon/32/apps/accessories-clock.png" ? "icon/128/apps/accessories-clock.png" : "icon/32/apps/accessories-clock.png"); + }); + + i2.addEventListener("click", function(e) + { + this.setWidth(this.getWidth() == "auto" ? 128 : "auto"); + this.setHeight(this.getHeight() == "auto" ? 128 : "auto"); + }); + + c1.addEventListener("click", function(e) { + this.setHtml(this.getHtml() == "Hello World" ? "Yeah, qooxdoo is great" : "Hello World"); + }); + + + + + // ************************************************************* + + var controlBox = new qx.ui.layout.VerticalBoxLayout; + + controlBox.setLeft(20); + controlBox.setBottom(48); + controlBox.setRight(335); + controlBox.setWidth(null); + controlBox.setHeight("auto"); + controlBox.setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + controlBox.setSpacing(4); + controlBox.setPadding(8); + + d.add(controlBox); + + + + + var cc0 = new qx.ui.basic.Label("Spacing: "); + cc0.setWidth(50); + + var bc0 = new qx.ui.form.Button("0x0", "icon/16/actions/dialog-ok.png"); + var bc1 = new qx.ui.form.Button("4x4", "icon/16/actions/dialog-ok.png"); + var bc2 = new qx.ui.form.Button("8x8", "icon/16/actions/dialog-ok.png"); + var bc3 = new qx.ui.form.Button("20x20", "icon/16/actions/dialog-ok.png"); + var bc4 = new qx.ui.form.Button("0x10", "icon/16/actions/dialog-ok.png"); + var bc5 = new qx.ui.form.Button("10x0", "icon/16/actions/dialog-ok.png"); + + bc0.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(0); + flow1.setVerticalSpacing(0); + }); + + bc1.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(4); + flow1.setVerticalSpacing(4); + }); + + bc2.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(8); + flow1.setVerticalSpacing(8); + }); + + bc3.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(20); + flow1.setVerticalSpacing(20); + }); + + bc4.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(0); + flow1.setVerticalSpacing(10); + }); + + bc5.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(10); + flow1.setVerticalSpacing(0); + }); + + var hc0 = new qx.ui.layout.HorizontalBoxLayout; + + hc0.add(cc0, bc0, bc1, bc2, bc3, bc4, bc5); + hc0.setVerticalChildrenAlign("middle"); + hc0.setHeight("auto"); + + controlBox.add(hc0); + + + + + + + var cr0 = new qx.ui.basic.Label("Order: "); + cr0.setWidth(50); + + var br0 = new qx.ui.form.Button("Default", "icon/16/actions/dialog-ok.png"); + var br1 = new qx.ui.form.Button("Reversed", "icon/16/actions/dialog-ok.png"); + + br0.addEventListener("execute", function(e) { + flow1.setReverseChildrenOrder(false); + }); + + br1.addEventListener("execute", function(e) { + flow1.setReverseChildrenOrder(true); + }); + + + + var hc1 = new qx.ui.layout.HorizontalBoxLayout; + + hc1.add(cr0, br0, br1); + hc1.setVerticalChildrenAlign("middle"); + hc1.setHeight("auto"); + + controlBox.add(hc1); + + + + + + + + var cr0 = new qx.ui.basic.Label("Align: "); + cr0.setWidth(50); + + var br0 = new qx.ui.form.Button("Top", "icon/16/actions/dialog-ok.png"); + var br1 = new qx.ui.form.Button("Bottom", "icon/16/actions/dialog-ok.png"); + var br2 = new qx.ui.form.Button("Left", "icon/16/actions/dialog-ok.png"); + var br3 = new qx.ui.form.Button("Right", "icon/16/actions/dialog-ok.png"); + + br0.addEventListener("execute", function(e) { + flow1.setVerticalChildrenAlign("top"); + }); + + br1.addEventListener("execute", function(e) { + flow1.setVerticalChildrenAlign("bottom"); + }); + + br2.addEventListener("execute", function(e) { + flow1.setHorizontalChildrenAlign("left"); + }); + + br3.addEventListener("execute", function(e) { + flow1.setHorizontalChildrenAlign("right"); + }); + + + var hc1 = new qx.ui.layout.HorizontalBoxLayout; + + hc1.add(cr0, br0, br1, br2, br3); + hc1.setVerticalChildrenAlign("middle"); + hc1.setHeight("auto"); + + controlBox.add(hc1); + + + + + + + + var ca0 = new qx.ui.basic.Label("Children: "); + ca0.setWidth(50); + + var ba0 = new qx.ui.form.Button("New Atom", "icon/16/actions/dialog-ok.png"); + var ba1 = new qx.ui.form.Button("New Image", "icon/16/actions/dialog-ok.png"); + var ba2 = new qx.ui.form.Button("New Atom to #3", "icon/16/actions/dialog-ok.png"); + var ba3 = new qx.ui.form.Button("New Image to #6", "icon/16/actions/dialog-ok.png"); + var ba4 = new qx.ui.form.Button("Remove First", "icon/16/actions/dialog-ok.png"); + + ba0.addEventListener("execute", function(e) { + flow1.add(new qx.ui.basic.Atom("New Atom", "icon/16/places/services.png")); + }); + + ba1.addEventListener("execute", function(e) { + flow1.add(new qx.ui.basic.Image("icon/64/apps/accessories-disk-usage.png")); + }); + + ba2.addEventListener("execute", function(e) { + flow1.addAt(new qx.ui.basic.Atom("New Atom", "icon/16/apps/preferences-desktop-multimedia.png"), 3); + }); + + ba3.addEventListener("execute", function(e) { + flow1.addAt(new qx.ui.basic.Image("icon/64/actions/format-color.png"), 6); + }); + + ba4.addEventListener("execute", function(e) { + flow1.remove(flow1.getFirstChild()); + }); + + var ha1 = new qx.ui.layout.HorizontalBoxLayout; + + ha1.add(ca0, ba0, ba1, ba2, ba3, ba4); + ha1.setVerticalChildrenAlign("middle"); + ha1.setHeight("auto"); + + controlBox.add(ha1); + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_2.html new file mode 100644 index 0000000000..79c897b1f4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_2.html @@ -0,0 +1,193 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.FlowLayout widget. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var flow1 = new qx.ui.layout.FlowLayout; + + flow1.setTop(48); + flow1.setLeft(20); + flow1.setRight(335); + flow1.setBottom(200); + + // flow1.setBorder(qx.renderer.border.BorderPresets.getInstance().ridge); + // flow1.setPadding(8); + + flow1.setHorizontalSpacing(4); + flow1.setVerticalSpacing(4); + + // flow1.setOverflow("scrollY"); + + d.add(flow1); + + for (var i=0, witer; i<100; i++) + { + witer = new qx.ui.basic.Terminator; + + witer.setBackgroundColor("white"); + witer.setWidth(50); + witer.setHeight(50); + + flow1.add(witer); + }; + + + // ************************************************************* + + var controlBox = new qx.ui.layout.VerticalBoxLayout; + + controlBox.setLeft(20); + controlBox.setBottom(48); + controlBox.setRight(335); + controlBox.setWidth(null); + controlBox.setHeight("auto"); + controlBox.setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + controlBox.setSpacing(4); + controlBox.setPadding(8); + + d.add(controlBox); + + + + + var cc0 = new qx.ui.basic.Label("Spacing: "); + cc0.setWidth(50); + + var bc0 = new qx.ui.form.Button("0x0", "icon/16/actions/dialog-ok.png"); + var bc1 = new qx.ui.form.Button("4x4", "icon/16/actions/dialog-ok.png"); + var bc2 = new qx.ui.form.Button("8x8", "icon/16/actions/dialog-ok.png"); + var bc3 = new qx.ui.form.Button("20x20", "icon/16/actions/dialog-ok.png"); + var bc4 = new qx.ui.form.Button("0x10", "icon/16/actions/dialog-ok.png"); + var bc5 = new qx.ui.form.Button("10x0", "icon/16/actions/dialog-ok.png"); + + bc0.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(0); + flow1.setVerticalSpacing(0); + }); + + bc1.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(4); + flow1.setVerticalSpacing(4); + }); + + bc2.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(8); + flow1.setVerticalSpacing(8); + }); + + bc3.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(20); + flow1.setVerticalSpacing(20); + }); + + bc4.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(0); + flow1.setVerticalSpacing(10); + }); + + bc5.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(10); + flow1.setVerticalSpacing(0); + }); + + var hc0 = new qx.ui.layout.HorizontalBoxLayout; + + hc0.add(cc0, bc0, bc1, bc2, bc3, bc4, bc5); + hc0.setVerticalChildrenAlign("middle"); + hc0.setHeight("auto"); + + controlBox.add(hc0); + + + + + + + var cr0 = new qx.ui.basic.Label("Order: "); + cr0.setWidth(50); + + var br0 = new qx.ui.form.Button("Default", "icon/16/actions/dialog-ok.png"); + var br1 = new qx.ui.form.Button("Reversed", "icon/16/actions/dialog-ok.png"); + + br0.addEventListener("execute", function(e) { + flow1.setReverseChildrenOrder(false); + }); + + br1.addEventListener("execute", function(e) { + flow1.setReverseChildrenOrder(true); + }); + + + + var hc1 = new qx.ui.layout.HorizontalBoxLayout; + + hc1.add(cr0, br0, br1); + hc1.setVerticalChildrenAlign("middle"); + hc1.setHeight("auto"); + + controlBox.add(hc1); + + + + + + + + var ca0 = new qx.ui.basic.Label("Children: "); + ca0.setWidth(50); + + var ba0 = new qx.ui.form.Button("New Atom", "icon/16/actions/dialog-ok.png"); + var ba1 = new qx.ui.form.Button("New Image", "icon/16/actions/dialog-ok.png"); + var ba2 = new qx.ui.form.Button("New Atom to #3", "icon/16/actions/dialog-ok.png"); + var ba3 = new qx.ui.form.Button("New Image to #6", "icon/16/actions/dialog-ok.png"); + var ba4 = new qx.ui.form.Button("Remove First", "icon/16/actions/dialog-ok.png"); + + ba0.addEventListener("execute", function(e) { + flow1.add(new qx.ui.basic.Atom("New Atom", "icon/16/places/services.png")); + }); + + ba1.addEventListener("execute", function(e) { + flow1.add(new qx.ui.basic.Image("icon/64/apps/accessories-disk-usage.png")); + }); + + ba2.addEventListener("execute", function(e) { + flow1.addAt(new qx.ui.basic.Atom("New Atom", "icon/16/apps/preferences-desktop-multimedia.png"), 3); + }); + + ba3.addEventListener("execute", function(e) { + flow1.addAt(new qx.ui.basic.Image("icon/64/actions/format-color.png"), 6); + }); + + ba4.addEventListener("execute", function(e) { + flow1.remove(flow1.getFirstChild()); + }); + + var ha1 = new qx.ui.layout.HorizontalBoxLayout; + + ha1.add(ca0, ba0, ba1, ba2, ba3, ba4); + ha1.setVerticalChildrenAlign("middle"); + ha1.setHeight("auto"); + + controlBox.add(ha1); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_3.html new file mode 100644 index 0000000000..84d84ce1e5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FlowLayout_3.html @@ -0,0 +1,277 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.FlowLayout widget. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + + var flow1 = new qx.ui.layout.FlowLayout; + + flow1.setTop(48); + flow1.setLeft(20); + flow1.setRight(335); + // flow1.setWidth("auto"); + flow1.setHeight("auto"); + + flow1.setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + flow1.setPadding(8); + + flow1.setHorizontalSpacing(4); + flow1.setVerticalSpacing(4); + + // flow1.setReverseChildrenOrder(true); + + d.add(flow1); + + + + var w1 = new qx.ui.basic.Terminator; + + w1.setBackgroundColor("orange"); + w1.setWidth(300); + w1.setHeight(20); + + + var w2 = new qx.ui.basic.Terminator; + + w2.setBackgroundColor("blue"); + w2.setWidth(200); + w2.setHeight(50); + + + var w3 = new qx.ui.basic.Terminator; + + w3.setBackgroundColor("green"); + w3.setWidth(100); + w3.setHeight(150); + w3.setMarginLeft(20); + + var w4 = new qx.ui.basic.Terminator; + + w4.setBackgroundColor("purple"); + w4.setWidth(100); + w4.setHeight(20); + + var w5 = new qx.ui.basic.Terminator; + + w5.setBackgroundColor("yellow"); + w5.setWidth(50); + w5.setHeight(80); + + var w6 = new qx.ui.basic.Terminator; + + w6.setBackgroundColor("red"); + w6.setWidth(400); + w6.setHeight(50); + + var i1 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + var i2 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + i2.setResizeToInner(true); + + var c1 = new qx.ui.basic.Label("Hello World"); + var c2 = new qx.ui.basic.Label("<ol><li>Simple HTML List</li><li>with one</li><li>and another item</li></ol>"); + + var a1 = new qx.ui.form.Button("Press", "icon/16/apps/preferences-desktop-multimedia.png"); + + + flow1.add(w1, i1, w2, w3, a1, c2, w4, i2, w5, c1, w6); + + + + + + w1.addEventListener("click", function(e) { + this.setMaxWidth(this.getMaxWidth() == 50 ? null : 50); + }); + + w2.addEventListener("click", function(e) + { + if (this.getWidth() == 200) + { + this.setWidth(100); + this.setHeight(200); + } + else + { + this.setWidth(200); + this.setHeight(50); + }; + }); + + i1.addEventListener("click", function(e) { + this.setSource(this.getSource() == "icon/32/apps/accessories-clock.png" ? "icon/128/apps/accessories-clock.png" : "icon/32/apps/accessories-clock.png"); + }); + + i2.addEventListener("click", function(e) + { + this.setWidth(this.getWidth() == "auto" ? 128 : "auto"); + this.setHeight(this.getHeight() == "auto" ? 128 : "auto"); + }); + + c1.addEventListener("click", function(e) { + this.setHtml(this.getHtml() == "Hello World" ? "Yeah, qooxdoo is great" : "Hello World"); + }); + + + + + // ************************************************************* + + var controlBox = new qx.ui.layout.VerticalBoxLayout; + + controlBox.setLeft(20); + controlBox.setBottom(48); + controlBox.setRight(335); + controlBox.setHeight("auto"); + controlBox.setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + controlBox.setSpacing(4); + controlBox.setPadding(8); + + d.add(controlBox); + + + + + var cc0 = new qx.ui.basic.Label("Spacing: "); + cc0.setWidth(50); + + var bc0 = new qx.ui.form.Button("0x0", "icon/16/actions/dialog-ok.png"); + var bc1 = new qx.ui.form.Button("4x4", "icon/16/actions/dialog-ok.png"); + var bc2 = new qx.ui.form.Button("8x8", "icon/16/actions/dialog-ok.png"); + var bc3 = new qx.ui.form.Button("20x20", "icon/16/actions/dialog-ok.png"); + var bc4 = new qx.ui.form.Button("0x10", "icon/16/actions/dialog-ok.png"); + var bc5 = new qx.ui.form.Button("10x0", "icon/16/actions/dialog-ok.png"); + + bc0.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(0); + flow1.setVerticalSpacing(0); + }); + + bc1.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(4); + flow1.setVerticalSpacing(4); + }); + + bc2.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(8); + flow1.setVerticalSpacing(8); + }); + + bc3.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(20); + flow1.setVerticalSpacing(20); + }); + + bc4.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(0); + flow1.setVerticalSpacing(10); + }); + + bc5.addEventListener("execute", function(e) { + flow1.setHorizontalSpacing(10); + flow1.setVerticalSpacing(0); + }); + + var hc0 = new qx.ui.layout.HorizontalBoxLayout; + + hc0.add(cc0, bc0, bc1, bc2, bc3, bc4, bc5); + hc0.setVerticalChildrenAlign("middle"); + hc0.setHeight("auto"); + + controlBox.add(hc0); + + + + + + + var cr0 = new qx.ui.basic.Label("Order: "); + cr0.setWidth(50); + + var br0 = new qx.ui.form.Button("Default", "icon/16/actions/dialog-ok.png"); + var br1 = new qx.ui.form.Button("Reversed", "icon/16/actions/dialog-ok.png"); + + br0.addEventListener("execute", function(e) { + flow1.setReverseChildrenOrder(false); + }); + + br1.addEventListener("execute", function(e) { + flow1.setReverseChildrenOrder(true); + }); + + + + var hc1 = new qx.ui.layout.HorizontalBoxLayout; + + hc1.add(cr0, br0, br1); + hc1.setVerticalChildrenAlign("middle"); + hc1.setHeight("auto"); + + controlBox.add(hc1); + + + + + + + + var ca0 = new qx.ui.basic.Label("Children: "); + ca0.setWidth(50); + + var ba0 = new qx.ui.form.Button("New Atom", "icon/16/actions/dialog-ok.png"); + var ba1 = new qx.ui.form.Button("New Image", "icon/16/actions/dialog-ok.png"); + var ba2 = new qx.ui.form.Button("New Atom to #3", "icon/16/actions/dialog-ok.png"); + var ba3 = new qx.ui.form.Button("New Image to #6", "icon/16/actions/dialog-ok.png"); + var ba4 = new qx.ui.form.Button("Remove First", "icon/16/actions/dialog-ok.png"); + + ba0.addEventListener("execute", function(e) { + flow1.add(new qx.ui.basic.Atom("New Atom", "icon/16/places/services.png")); + }); + + ba1.addEventListener("execute", function(e) { + flow1.add(new qx.ui.basic.Image("icon/64/apps/accessories-disk-usage.png")); + }); + + ba2.addEventListener("execute", function(e) { + flow1.addAt(new qx.ui.basic.Atom("New Atom", "icon/16/apps/preferences-desktop-multimedia.png"), 3); + }); + + ba3.addEventListener("execute", function(e) { + flow1.addAt(new qx.ui.basic.Image("icon/64/actions/format-color.png"), 6); + }); + + ba4.addEventListener("click", function(e) { + flow1.remove(flow1.getFirstChild()); + }); + + var ha1 = new qx.ui.layout.HorizontalBoxLayout; + + ha1.add(ca0, ba0, ba1, ba2, ba3, ba4); + ha1.setVerticalChildrenAlign("middle"); + ha1.setHeight("auto"); + + controlBox.add(ha1); + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FocusManager_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FocusManager_1.html new file mode 100644 index 0000000000..772718afe8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FocusManager_1.html @@ -0,0 +1,108 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some tests for some of the most used properties of qx.ui.basic.Terminator (coordinates, dimensions, backgroundColor, opacity, ...).</p> + <p>Also here are the first test of some widgets which extend qx.ui.basic.Terminator: qx.ui.form.TextField and qx.ui.form.PasswordField. These extended + widgets also interacts like the basic QxTerminators with the qx.event.handler.FocusHandler.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.basic.Terminator; + d.add(c1); + + c1.setTabIndex(1); + c1.setHeight(60); + c1.setWidth(60); + c1.setTop(48); + c1.setLeft(20); + c1.setBackgroundColor("blue"); + c1.setOpacity(0.5); + + c1.addEventListener("keydown", function(e){ + if (e.getKeyIdentifier() != "Space") { + return; + }; + + this.setBackgroundColor("rgb(" + Math.round(Math.random()*255) + "," + Math.round(Math.random()*255) + "," + Math.round(Math.random()*255) + ")"); + }); + + + var c2 = new qx.ui.basic.Terminator; + d.add(c2); + + c2.setTabIndex(2); + c2.setHeight(60); + c2.setWidth(60); + c2.setTop(68); + c2.setLeft(40); + c2.setBackgroundColor("orange"); + c2.setOpacity(0.5); + + c2.addEventListener("keydown", function(e){ + if (e.getKeyIdentifier() != "Space") { + return; + }; + + this.setBackgroundColor("rgb(" + Math.round(Math.random()*255) + "," + Math.round(Math.random()*255) + "," + Math.round(Math.random()*255) + ")"); + }); + + + var t1 = new qx.ui.form.TextField; + t1.setValue("textfield"); + t1.setTop(140); + t1.setLeft(20); + t1.setTabIndex(3); + + d.add(t1); + + + + var t2 = new qx.ui.form.PasswordField; + t2.setValue("passwordfield"); + t2.setTop(170); + t2.setLeft(20); + t2.setTabIndex(4); + + d.add(t2); + + + var t3 = new qx.ui.form.TextArea; + t3.setValue("textarea"); + t3.setTop(200); + t3.setLeft(20); + t3.setWidth(300); + t3.setHeight(60); + t3.setTabIndex(5); + + d.add(t3); + + + var t4 = new qx.ui.form.TextField; + t4.setValue("textfield"); + t4.setTop(300); + t4.setLeft(20); + t4.setWidth(200); + t4.setMaxLength(100); + t4.setReadOnly(true); + t4.setTabIndex(6); + + d.add(t4); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Font_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Font_1.html new file mode 100644 index 0000000000..e63a0fe879 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Font_1.html @@ -0,0 +1,63 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.renderer.font.Font object for QxLabels inside QxAtoms.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var f1 = new qx.ui.layout.CanvasLayout; + + var a1 = new qx.ui.basic.Atom("Hello World"); + + var b1 = new qx.ui.form.Button("Serif, 16px"); + var b2 = new qx.ui.form.Button("Serif, 24px"); + var b3 = new qx.ui.form.Button("Sans Serif, 16px"); + var b4 = new qx.ui.form.Button("Sans Serif, 24px"); + + b1.addEventListener("execute", function() { + a1.getLabelObject().setFont("16px serif"); + }); + + b2.addEventListener("execute", function() { + a1.getLabelObject().setFont("24px serif"); + }); + + b3.addEventListener("execute", function() { + a1.getLabelObject().setFont("16px sans-serif"); + }); + + b4.addEventListener("execute", function() { + a1.getLabelObject().setFont("24px sans-serif"); + }); + + f1.setDimension("auto", "auto"); + f1.setLocation(20, 48); + f1.setBorder("1px solid red"); + + a1.setLocation(0, 0); + a1.getLabelObject().setFont("16px serif"); + + b1.setLocation(200, 48); + b2.setLocation(200, 78); + b3.setLocation(200, 108); + b4.setLocation(200, 138); + + f1.add(a1); + qx.ui.core.ClientDocument.getInstance().add(f1, b1, b2, b3, b4); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FormUtils_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FormUtils_1.html new file mode 100644 index 0000000000..8aa4c89ad7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/FormUtils_1.html @@ -0,0 +1,86 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.html.Form</p> + </div> + + <form id="mainform" style="position: absolute; left:300px; top: 48px"> + <fieldset> + <legend>Basics</legend> + <input type="text" name="givenname" value="Given Name"/> + <br/> + <input type="text" name="name" value="Name"/> + <br/> + <input type="password" name="password" value="Password"/> + </fieldset> + <br/> + <input type="checkbox" checked="checked" name="human" id="human" value="true"/> + <label for="human">Human</label> + <br/> + <input type="checkbox" name="old" id="old" value="true"/> + <label for="old">Old</label> + <br/> + <input type="radio" name="gender" checked="checked" value="male" id="male"/> + <label for="male">Male</label"> + <br/> + <input type="radio" name="gender" value="female" id="female"/> + <label for="female">Female</label"> + <br/> + <label for="color">Favorite Color (Single)</label> + <br/> + <select name="color" id="color"> + <option value="red">Red</option> + <option value="blue">Blue</option> + <option value="green">Green</option> + <option value="yellow">Yellow</option> + <option value="black">Black</option> + <option value="white">White</option> + </select> + <br/> + <label for="pets">Your Pets (Multiple)</label> + <br/> + <select name="pets" id="pets" multiple="multiple" size="3"> + <option value="dog">Dog</option> + <option value="cat">Cat</option> + <option value="bird">Bird</option> + <option value="rabbit">Rabbit</option> + <option value="hamster">Hamster</option> + </select> + <br/> + <input type="submit" value="Send Data"/> + </form> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var btn = new qx.ui.form.Button("Encode"); + btn.setLocation(20, 48); + qx.ui.core.ClientDocument.getInstance().add(btn); + + var area = new qx.ui.form.TextArea; + area.setLocation(20, 100); + area.setDimension(200, 100); + qx.ui.core.ClientDocument.getInstance().add(area); + + qx.html.Form.bind(document.getElementById("mainform"), function() { + alert("Submitting Form Replacement..."); + }); + + btn.addEventListener("execute", function() { + area.setValue(qx.html.Form.encodeForm(document.getElementById("mainform"))); + }); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Gallery_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Gallery_2.html new file mode 100644 index 0000000000..3a3e2fb9a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Gallery_2.html @@ -0,0 +1,135 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test file for qx.ui.embed.Gallery</p> + </div> + + <style type="text/css"> + .qx_ui_embed_Gallery .galleryFrame{ + padding: 2px; + } + + .qx_ui_embed_Gallery .galleryCell{ + border: 1px solid #444; + background: #fff; + margin: 2px; + float: left; + overflow: hidden; + + font-family: Tahoma, Verdana, sans-serif; + font-size: 10px; + + cursor: default; + + -moz-user-select: none; + user-select: none; + } + + .qx_ui_embed_Gallery .galleryCell img{ + vertical-align: bottom; + display: block; + } + + .qx_ui_embed_Gallery .galleryCell .galleryTitle, + .qx_ui_embed_Gallery .galleryCell .galleryComment{ + background: #eee; + padding: 3px 6px; + text-align: center; + cursor: default; + overflow: hidden; + white-space: nowrap; + } + + .qx_ui_embed_Gallery .galleryCell .galleryTitle{ + border-bottom: 1px solid #aaa; + } + + .qx_ui_embed_Gallery .galleryCell .galleryComment{ + border-top: 1px solid #aaa; + } + + .qx_ui_embed_Gallery .galleryCell-Selected{ + background: #DCE8F6; + border: 1px solid #2760A1; + } + + .qx_ui_embed_Gallery .galleryCell-Selected .galleryTitle, + .qx_ui_embed_Gallery .galleryCell-Selected .galleryComment{ + background: #9BBFE7; + } + + .qx_ui_embed_Gallery .galleryCell-Selected .galleryTitle{ + border-bottom: 1px dotted #2760A1; + } + + .qx_ui_embed_Gallery .galleryCell-Selected .galleryComment{ + border-top: 1px dotted #2760A1; + } + + + /* customize */ + + .qx_ui_embed_Gallery{ + background: #fff; + padding: 5px; + } + + .qx_ui_embed_Gallery .galleryCell{ + margin: 5px; + border: 1px solid #DCDFE8; + } + + .qx_ui_embed_Gallery .galleryCell-Selected{ + border: 1px solid #5E6474; + background: #DADDE4; + } + </style> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var galleryList = []; + + for (var i=0; i<100; i++) + { + galleryList.push({ + display : "bmzN9ci5", + width : 350, + height : 350, + thumbWidth : 64, + thumbHeight : 64, + title : "gohome.png", + timestamp : Math.random().toString(), + comment : "Cool Comment", + id : "7686191121780974-10682", + src : qx.manager.object.AliasManager.getInstance().resolvePath("icon/64/devices/video-display.png") + }); + }; + + var gallery = new qx.ui.embed.Gallery(galleryList); + + gallery.setLeft(20); + gallery.setRight(335); + gallery.setTop(48); + gallery.setBottom(48); + gallery.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + gallery.setShowTitle(false); + gallery.setShowComment(false); + gallery.setDecorHeight(0); + + qx.ui.core.ClientDocument.getInstance().add(gallery); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Gallery_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Gallery_3.html new file mode 100644 index 0000000000..0a910697a7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Gallery_3.html @@ -0,0 +1,178 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test file for qx.ui.embed.Gallery, now with QxToolTips assigned.</p> + <button onclick="updateAdd()">Update Add</button> + </div> + + <style type="text/css"> + .qx_ui_embed_Gallery .galleryFrame{ + padding: 2px; + } + + .qx_ui_embed_Gallery .galleryCell{ + border: 1px solid #444; + background: #fff; + margin: 2px; + float: left; + overflow: hidden; + + font-family: Tahoma, Verdana, sans-serif; + font-size: 10px; + + cursor: default; + + -moz-user-select: none; + user-select: none; + } + + .qx_ui_embed_Gallery .galleryCell img{ + vertical-align: bottom; + display: block; + } + + .qx_ui_embed_Gallery .galleryCell .galleryTitle, + .qx_ui_embed_Gallery .galleryCell .galleryComment{ + background: #eee; + padding: 3px 6px; + text-align: center; + cursor: default; + overflow: hidden; + white-space: nowrap; + } + + .qx_ui_embed_Gallery .galleryCell .galleryTitle{ + border-bottom: 1px solid #aaa; + } + + .qx_ui_embed_Gallery .galleryCell .galleryComment{ + border-top: 1px solid #aaa; + } + + .qx_ui_embed_Gallery .galleryCell-Selected{ + background: #DCE8F6; + border: 1px solid #2760A1; + } + + .qx_ui_embed_Gallery .galleryCell-Selected .galleryTitle, + .qx_ui_embed_Gallery .galleryCell-Selected .galleryComment{ + background: #9BBFE7; + } + + .qx_ui_embed_Gallery .galleryCell-Selected .galleryTitle{ + border-bottom: 1px dotted #2760A1; + } + + .qx_ui_embed_Gallery .galleryCell-Selected .galleryComment{ + border-top: 1px dotted #2760A1; + } + + + /* customize */ + + .qx_ui_embed_Gallery{ + background: #fff; + padding: 5px; + } + + .qx_ui_embed_Gallery .galleryCell{ + margin: 5px; + border: 1px solid #DCDFE8; + } + + .qx_ui_embed_Gallery .galleryCell-Selected{ + border: 1px solid #5E6474; + background: #DADDE4; + } + </style> + + <script type="text/javascript"> + var updateAdd; + + qx.core.Init.getInstance().defineMain(function() + { + var galleryList = []; + + for (var i=0; i<100; i++) + { + galleryList.push({ + display : "bmzN9ci5", + width : 350, + height : 350, + thumbWidth : 64, + thumbHeight : 64, + title : "gohome" + i + ".png", + timestamp : Math.random().toString(), + comment : "Cool Comment: " + i, + id : "7686191121780974-10682-" + i, + src : qx.manager.object.AliasManager.getInstance().resolvePath("icon/64/apps/graphics-image-viewer.png") + }); + }; + + var gallery = new qx.ui.embed.Gallery(galleryList); + + gallery.setLeft(20); + gallery.setRight(335); + gallery.setTop(48); + gallery.setBottom(48); + gallery.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + gallery.setShowTitle(false); + gallery.setShowComment(false); + gallery.setDecorHeight(0); + + qx.ui.core.ClientDocument.getInstance().add(gallery); + + + + var toolTip = new qx.ui.popup.ToolTip("Photo Details", "icon/32/actions/format-color.png"); + gallery.setToolTip(toolTip); + + gallery.addEventListener("beforeToolTipAppear", function(e) + { + var vNode = e.getData(); + var vEntry = this.getEntryByNode(vNode); + + toolTip.getAtom().setLabel("<strong>" + vEntry.title + "</strong><br/>" + vEntry.comment); + + this.setToolTip(toolTip); + }); + + + updateAdd = function() + { + var galleryListUpdated = qx.lang.Array.copy(gallery.getList()); + + for (var i=galleryListUpdated.length, j=i+10; i<j; i++) + { + galleryListUpdated.push({ + display : "bmzN9ci5", + width : 350, + height : 350, + thumbWidth : 64, + thumbHeight : 64, + title : "gohome" + i + ".png", + timestamp : Math.random().toString(), + comment : "Cool Comment: " + i, + id : "7686191121780974-10682-" + i, + src : qx.manager.object.AliasManager.getInstance().resolvePath("icon/64/actions/format-color.png") + }); + }; + + gallery.addFromUpdatedList(galleryListUpdated); + }; + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Generate_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Generate_1.html new file mode 100644 index 0000000000..20d91f45ce --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Generate_1.html @@ -0,0 +1,267 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.basic.Atom is the parent class for buttons, menu entries, icons, checkboxes. While you can do, + you usually don't have to instantiate qx.ui.basic.Atom directly.</p> + </div> + + <script type="text/javascript"> + qx.lang.Array.merge = function(firstArray, secondArray) + { + var combinedArray = [], currentValue, indexInSecond; + + for (var i=0, l=firstArray.length; i<l; i++) { + (indexInSecond = secondArray.indexOf(currentValue = firstArray[i])) == -1 ? combinedArray.push(currentValue) : qx.lang.Array.append(combinedArray, secondArray.splice(0, indexInSecond+1)); + }; + + return combinedArray.concat(secondArray); + }; + + var a = [ "before3Mnu", "fileMnu", "editMnu", "saveMnu", "exitMenu" ]; + var b = [ "before1Mnu", "before2Mnu", "fileMnu", "fooMnu", "editMnu", "saveMnu", "after1Mnu" ]; + + //alert(qx.lang.Array.merge(a, b)); + + var comp1 = + { + bars : + [ + { + id : "menubar", + groups : [ "mainMp", "helpMp" ] + }, + + { + id : "toolbar", + groups : [ "openTb", "editTb" ] + } + ], + + groups : + { + // Menu Bar Parts + "mainMp" : { commands : [ "fileBtn", "editBtn", "viewBtn" ] }, + "helpMp" : { commands : [ "helpBtn" ] }, + + // Tool Bar Parts + "openTb" : { commands : [ "openBtn", "openRecentlyBtn" ] }, + "editTb" : { commands : [ "cutBtn", "copyBtn", "pasteBtn" ] }, + + // Menu Content + "openMn" : { commands : [ "openBtn", "openWithBtn", "openRecentlyBtn" ] }, + "saveMn" : { commands : [ "saveBtn", "saveAsBtn" ] }, + "closeMn" : { commands : [ "closeBtn" ] }, + "exitMn" : { commands : [ "exitBtn" ] }, + "undoMn" : { commands : [ "undoBtn", "redoBtn" ] }, + "editMn" : { commands : [ "cutBtn", "copyBtn", "pasteBtn", "deleteBtn", "clipboardBtn" ] }, + "searchMn" : { commands : [ "searchBtn", "replaceBtn", "continueSearchBtn" ] }, + + "barsMn" : { commands : [] }, + "fontMn" : { commands : [] }, + + "aboutMn" : { commands : [ "aboutBtn" ] }, + "recentDocsMn" : { commands : [ "doc1Btn", "doc2Btn", "doc3Btn" ] } + }, + + menus : + { + "fileMnu" : { groups : [ "openMn", "saveMn", "closeMn", "exitMn" ] }, + "editMnu" : { groups : [ "undoMn", "editMn", "searchMn" ] }, + "viewMnu" : { groups : [ "barsMn", "fontMn" ] }, + "helpMnu" : { groups : [ "aboutMn" ] }, + "openRecentlyMnu" : { groups : [ "recentDocsMn" ] } + }, + + commands : + { + // Menu-Buttons + "fileBtn" : { title : "Datei", menu : "fileMnu" }, + "editBtn" : { title : "Bearbeiten", menu : "editMnu" }, + "viewBtn" : { title : "Ansicht", menu : "viewMnu" }, + "helpBtn" : { title : "Hilfe", menu : "helpMnu" }, + + // Execute-Buttons: Open + "openBtn" : { title : "Öffnen", execute : "open" }, + "openWithBtn" : { title : "Öffnen mit...", execute : "openWith" }, + "openRecentlyBtn" : { title : "Letzte öffnen...", menu : "openRecentlyMnu" }, + + "saveBtn" : { title : "Speichern", execute : "save" }, + "saveAsBtn" : { title : "Speichern als...", execute : "saveAs" }, + "closeBtn" : { title : "Schließen", execute : "close" }, + "exitBtn" : { title : "Beenden", execute : "exit" }, + + "undoBtn" : { title : "Rückgängig", execute : "undo" }, + "redoBtn" : { title : "Wiederherstellen", execute : "redo" }, + "deleteBtn" : { title : "Löschen", execute : "delete" }, + "clipboardBtn" : { title : "Zwischenablage", execute : "clipboard" }, + + // Execute-Buttons: Search + "searchBtn" : { title : "Suchen", execute : "search" }, + "replaceBtn" : { title : "Ersetzen", execute : "replace" }, + "continueSearchBtn" : { title : "Weitersuchen", execute : "continuesearch" }, + + // Execute-Buttons: Edit + "cutBtn" : { title : "Ausschneiden", execute : "cut" }, + "copyBtn" : { title : "Kopieren", execute : "copy" }, + "pasteBtn" : { title : "Einfügen", execute : "paste" }, + + // Execute-Buttons: Info + "aboutBtn" : { title : "Über", execute : "about" }, + + "doc1Btn" : { title : "Dokument 1", execute : "openDoc1" }, + "doc2Btn" : { title : "Dokument 2", execute : "openDoc2" }, + "doc3Btn" : { title : "Dokument 3", execute : "openDoc3" } + } + }; + + var comp2 = + { + }; + + + + + + + qx.OO.defineClass("qx.Generator", qx.core.Target, + function(comp) + { + this._comp = comp; + + }); + + qx.Proto._generateMenu = function(id) + { + var menu = new qx.ui.menu.Menu; + + var menuData = this._comp.menus[id]; + + if (!menuData) { + alert("Missing menu: " + id); + }; + + for (var i=0; i<menuData.groups.length; i++) + { + var groupcontent = this._comp.groups[menuData.groups[i]]; + + if (!groupcontent) { + alert("Missing menu: " + menuData.groups[i]); + }; + + var groupcommandlist = groupcontent.commands; + + for (var j=0; j<groupcommandlist.length; j++) + { + var commandData = this._comp.commands[groupcommandlist[j]]; + + if (!commandData) { + alert("Missing command: " + groupcommandlist[j]); + }; + + if (commandData.menu) + { + var subMenu = this._generateMenu(commandData.menu); + var menuButton = new qx.ui.menu.Button(commandData.title, null, null, subMenu); + + subMenu.addToDocument(); + } + else + { + var menuButton = new qx.ui.menu.Button(commandData.title); + }; + + menu.add(menuButton); + }; + + if (i < menuData.groups.length-1) { + menu.add(new qx.ui.menu.Separator); + }; + }; + + return menu; + }; + + qx.Proto.getWidget = function() + { + var can = new qx.ui.layout.CanvasLayout; + can.auto(); + can.setLocation(100, 100); + can.setBorder("2px solid red"); + + for (var i=0; i<this._comp.bars.length; i++) + { + var tb = new qx.ui.toolbar.ToolBar; + tb.setLocation(0, (i * 50)); + tb.setRight(0); + can.add(tb); + + + + var bardata = this._comp.bars[i]; + var groupdata = bardata.groups; + + for(var j=0; j<groupdata.length; j++) + { + var part = new qx.ui.toolbar.Part; + + var groupcontent = this._comp.groups[groupdata[j]]; + var groupcommandlist = groupcontent.commands; + + if (!groupcommandlist) + { + alert("Missing commands in: " + groupcontent); + }; + + for (var k=0; k<groupcommandlist.length; k++) + { + var commanddata = this._comp.commands[groupcommandlist[k]]; + + if (commanddata) + { + if (typeof commanddata.menu != "undefined") + { + menu = this._generateMenu(commanddata.menu); + menu.addToDocument(); + + btn = new qx.ui.toolbar.MenuButton(commanddata.title, menu); + } + else + { + btn = new qx.ui.toolbar.Button(commanddata.title); + }; + + part.add(btn); + } + else + { + alert("Missing: " + groupcommandlist[k]); + }; + }; + + tb.add(part); + }; + }; + + return can; + }; + + qx.core.Init.getInstance().defineMain(function() + { + var c1 = new qx.Generator(comp1); + qx.ui.core.ClientDocument.getInstance().add(c1.getWidget()); + }); + + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_1.html new file mode 100644 index 0000000000..ff1a48575b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_1.html @@ -0,0 +1,79 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension(462, 128); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + + gl.setColumnWidth(0, 100); + gl.setColumnWidth(1, 200); + gl.setColumnWidth(2, 50); + gl.setColumnWidth(3, 100); + + gl.setRowHeight(0, 40); + gl.setRowHeight(1, 80); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.basic.Terminator; + term2.setBackgroundColor("red"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + gl.add(term3, 2, 0); + + var term4 = new qx.ui.basic.Terminator; + term4.setBackgroundColor("blue"); + gl.add(term4, 3, 0); + + var term5 = new qx.ui.basic.Terminator; + term5.setBackgroundColor("fuchsia"); + gl.add(term5, 0, 1); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + gl.add(term6, 1, 1); + + var term7 = new qx.ui.basic.Terminator; + term7.setBackgroundColor("maroon"); + gl.add(term7, 2, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_10.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_10.html new file mode 100644 index 0000000000..5ed1972427 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_10.html @@ -0,0 +1,94 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Layout Manager: qx.ui.layout.GridLayout. Example image borrowed from <a href="http://winfx.msdn.microsoft.com/library/en-us/wcp_conceptual/winfx/layout/overviews/grid_ovw.asp">Microsoft's XAML Documentation</a>.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var img = new qx.ui.basic.Image("./image/grid_dialog_box.png"); + + img.setLocation(20, 48); + + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(46, 300); + gl.auto(); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(4); + + gl.setRowCount(4); + gl.setColumnCount(5); + + gl.setHorizontalSpacing(4); + gl.setVerticalSpacing(4); + + gl.setColumnWidth(0, 40); + gl.setColumnWidth(1, 35); + gl.setColumnWidth(2, 75); + gl.setColumnWidth(3, 75); + gl.setColumnWidth(4, 75); + + gl.setRowHeight(0, 30); + gl.setRowHeight(1, 30); + gl.setRowHeight(2, 15); + gl.setRowHeight(3, 25); + + gl.mergeCells(1, 0, 4, 1); + gl.mergeCells(1, 1, 4, 1); + + gl.setRowVerticalAlignment(1, "middle"); + + qx.ui.core.ClientDocument.getInstance().add(img, gl); + + + + + + var i1 = new qx.ui.basic.Image("icon/32/apps/preferences-desktop-wallpaper.png"); + gl.add(i1, 0, 0); + + var t1 = new qx.ui.basic.Label("Open:"); + t1.setMnemonic("O"); + t1.setSelectable(false); + gl.add(t1, 0, 1); + + var b1 = new qx.ui.form.Button("OK"); + b1.setAllowStretchX(true); + gl.add(b1, 2, 3); + + var b2 = new qx.ui.form.Button("Cancel"); + b2.setAllowStretchX(true); + gl.add(b2, 3, 3); + + var b3 = new qx.ui.form.Button("Browse..."); + b3.setAllowStretchX(true); + b3.getLabelObject().setMnemonic("B"); + gl.add(b3, 4, 3); + + var t2 = new qx.ui.basic.Label("Type in the name of a program, folder, document or<br/> Internet Resource and Windows will open it for you."); + t2.setSelectable(false); + gl.add(t2, 1, 0); + + var c1 = new qx.ui.form.ComboBox(); + c1.setEditable(true); + c1.setValue("d:\\local\\pictures"); + c1.setWidth(null); + gl.add(c1, 1, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_11.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_11.html new file mode 100644 index 0000000000..83a08a64e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_11.html @@ -0,0 +1,124 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Layout Manager: qx.ui.layout.GridLayout. Example image borrowed from <a href="http://winfx.msdn.microsoft.com/library/en-us/wcp_conceptual/winfx/layout/overviews/grid_ovw.asp">Microsoft's XAML Documentation</a>.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var img = new qx.ui.basic.Image("./image/grid_dialog_box.png"); + + img.setLocation(20, 48); + + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(46, 300); + gl.auto(); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(4); + + gl.setRowCount(4); + gl.setColumnCount(5); + + gl.setHorizontalSpacing(4); + gl.setVerticalSpacing(4); + + gl.setColumnWidth(0, 40); + gl.setColumnWidth(1, 35); + gl.setColumnWidth(2, 75); + gl.setColumnWidth(3, 75); + gl.setColumnWidth(4, 75); + + gl.setRowHeight(0, 30); + gl.setRowHeight(1, 30); + gl.setRowHeight(2, 15); + gl.setRowHeight(3, 25); + + gl.mergeCells(1, 0, 4, 1); + gl.mergeCells(1, 1, 4, 1); + + gl.setRowVerticalAlignment(1, "middle"); + + qx.ui.core.ClientDocument.getInstance().add(img, gl); + + + + + + var i1 = new qx.ui.basic.Image("icon/32/apps/preferences-desktop-wallpaper.png"); + gl.add(i1, 0, 0); + + var t1 = new qx.ui.basic.Label("Open:"); + t1.setMnemonic("O"); + t1.setSelectable(false); + gl.add(t1, 0, 1); + + var b1 = new qx.ui.form.Button("OK"); + b1.setAllowStretchX(true); + gl.add(b1, 2, 3); + + var b2 = new qx.ui.form.Button("Cancel"); + b2.setAllowStretchX(true); + gl.add(b2, 3, 3); + + var b3 = new qx.ui.form.Button("Browse..."); + b3.setAllowStretchX(true); + b3.getLabelObject().setMnemonic("B"); + gl.add(b3, 4, 3); + + var t2 = new qx.ui.basic.Label("Type in the name of a program, folder, document or Internet Resource and Windows will open it for you."); + t2.setSelectable(false); + t2.setStyleProperty("whiteSpace", "normal"); + gl.add(t2, 1, 0); + + var c1 = new qx.ui.form.ComboBox(); + c1.setEditable(true); + c1.setValue("d:\\local\\pictures"); + c1.setWidth(null); + gl.add(c1, 1, 1); + + + + + + + + + + var c1 = new qx.ui.form.Button("Make bigger"); + var c2 = new qx.ui.form.Button("Make smaller"); + + c1.setLocation(500, 300); + c2.setLocation(500, 330); + + qx.ui.core.ClientDocument.getInstance().add(c1, c2); + + c1.addEventListener("execute", function(e) { + gl.setColumnWidth(2, 100); + gl.setColumnWidth(3, 100); + gl.setColumnWidth(4, 100); + }); + + c2.addEventListener("execute", function(e) { + gl.setColumnWidth(2, 75); + gl.setColumnWidth(3, 75); + gl.setColumnWidth(4, 75); + }); + + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_2.html new file mode 100644 index 0000000000..90a629e7d4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_2.html @@ -0,0 +1,88 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout.</p> + <p>Added some own sizes and use more complex children.</p> + <p>The olive child has a width of 50% (which is related to the cell size here) and a horizontal alignment 'center'.</p> + <p>The navi child has a height of 20 pixel and is aligned to the bottom of the cell.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension(462, 128); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + + gl.setColumnWidth(0, 100); + gl.setColumnWidth(1, 200); + gl.setColumnWidth(2, 50); + gl.setColumnWidth(3, 100); + + gl.setRowHeight(0, 40); + gl.setRowHeight(1, 80); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.form.Button("Hello World", "icon/22/actions/format-color.png"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + term3.setWidth(100); + term3.setHeight(100); + term3.setBorder("1px solid black"); + gl.add(term3, 2, 0); + + var term4 = new qx.ui.basic.Terminator; + term4.setBackgroundColor("blue"); + gl.add(term4, 3, 0); + + var term5 = new qx.ui.basic.Terminator; + term5.setBackgroundColor("fuchsia"); + gl.add(term5, 0, 1); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + term6.setWidth("50%"); + term6.setHorizontalAlign("center"); + gl.add(term6, 1, 1); + + var term7 = new qx.ui.basic.Terminator; + term7.setBackgroundColor("maroon"); + gl.add(term7, 2, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + term8.setHeight(20); + term8.setVerticalAlign("bottom"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_3.html new file mode 100644 index 0000000000..4df290606b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_3.html @@ -0,0 +1,82 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout.</p> + <p>Using auto dimensions for the grid.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension("auto", "auto"); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + gl.setHorizontalSpacing(4); + gl.setVerticalSpacing(8); + + gl.setColumnWidth(0, 100); + gl.setColumnWidth(1, 200); + gl.setColumnWidth(2, 50); + gl.setColumnWidth(3, 100); + + gl.setRowHeight(0, 40); + gl.setRowHeight(1, 80); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.basic.Terminator; + term2.setBackgroundColor("red"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + gl.add(term3, 2, 0); + + var term4 = new qx.ui.basic.Terminator; + term4.setBackgroundColor("blue"); + gl.add(term4, 3, 0); + + var term5 = new qx.ui.basic.Terminator; + term5.setBackgroundColor("fuchsia"); + gl.add(term5, 0, 1); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + gl.add(term6, 1, 1); + + var term7 = new qx.ui.basic.Terminator; + term7.setBackgroundColor("maroon"); + gl.add(term7, 2, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_4.html new file mode 100644 index 0000000000..79503521f4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_4.html @@ -0,0 +1,81 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout.</p> + <p>Using percents for children.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setRight(335); + gl.setBottom(48); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + + gl.setColumnWidth(0, "10%"); + gl.setColumnWidth(1, "40%"); + gl.setColumnWidth(2, "30%"); + gl.setColumnWidth(3, "20%"); + + gl.setRowHeight(0, "70%"); + gl.setRowHeight(1, "30%"); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.basic.Terminator; + term2.setBackgroundColor("red"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + gl.add(term3, 2, 0); + + var term4 = new qx.ui.basic.Terminator; + term4.setBackgroundColor("blue"); + gl.add(term4, 3, 0); + + var term5 = new qx.ui.basic.Terminator; + term5.setBackgroundColor("fuchsia"); + gl.add(term5, 0, 1); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + gl.add(term6, 1, 1); + + var term7 = new qx.ui.basic.Terminator; + term7.setBackgroundColor("maroon"); + gl.add(term7, 2, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_5.html new file mode 100644 index 0000000000..68d37b9947 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_5.html @@ -0,0 +1,85 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A simple form using qx.ui.layout.GridLayout</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension("auto", "auto"); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(8); + gl.setColumnCount(2); + gl.setRowCount(7); + gl.setVerticalSpacing(4); + gl.setHorizontalSpacing(6); + + gl.setColumnWidth(0, 70); + gl.setColumnWidth(1, 180); + + gl.setColumnHorizontalAlignment(0, "right"); + gl.setColumnVerticalAlignment(0, "middle"); + + gl.setRowHeight(0, 20); + gl.setRowHeight(1, 20); + gl.setRowHeight(2, 20); + gl.setRowHeight(3, 20); + gl.setRowHeight(4, 20); + gl.setRowHeight(5, 70); + gl.setRowHeight(6, 20); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + var label1 = new qx.ui.basic.Label("Given Name"); + var label2 = new qx.ui.basic.Label("Name"); + var label3 = new qx.ui.basic.Label("City"); + var label4 = new qx.ui.basic.Label("Country"); + var label5 = new qx.ui.basic.Label("E-Mail"); + var label6 = new qx.ui.basic.Label("Comment"); + label6.setVerticalAlign("top"); + + label6.setVerticalAlign("top"); + + var input1 = new qx.ui.form.TextField; + var input2 = new qx.ui.form.TextField; + var input3 = new qx.ui.form.TextField; + var input4 = new qx.ui.form.TextField; + var input5 = new qx.ui.form.TextField; + var input6 = new qx.ui.form.TextArea; + var input7 = new qx.ui.form.Button("Submit", "icon/16/actions/dialog-ok.png"); + + input7.setHorizontalAlign("right"); + + gl.add(label1, 0, 0); + gl.add(input1, 1, 0); + gl.add(label2, 0, 1); + gl.add(input2, 1, 1); + gl.add(label3, 0, 2); + gl.add(input3, 1, 2); + gl.add(label4, 0, 3); + gl.add(input4, 1, 3); + gl.add(label5, 0, 4); + gl.add(input5, 1, 4); + gl.add(label6, 0, 5); + gl.add(input6, 1, 5); + gl.add(input7, 1, 6); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_6.html new file mode 100644 index 0000000000..786cd9927a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_6.html @@ -0,0 +1,109 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A simple form using qx.ui.layout.GridLayout</p> + <p>Using padding instead of spacing. Spacing is between the cells, padding is inside the cells. The same layout using padding is always bigger because the first and last cells are also affected with the padding to the edge.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension("auto", "auto"); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(8); + gl.setColumnCount(2); + gl.setRowCount(7); + + gl.setColumnWidth(0, 76); + gl.setColumnWidth(1, 186); + + gl.setColumnHorizontalAlignment(0, "right"); + gl.setColumnVerticalAlignment(0, "middle"); + + gl.setRowHeight(0, 24); + gl.setRowHeight(1, 24); + gl.setRowHeight(2, 24); + gl.setRowHeight(3, 24); + gl.setRowHeight(4, 24); + gl.setRowHeight(5, 74); + gl.setRowHeight(6, 24); + + gl.setCellPaddingTop(2); + gl.setCellPaddingRight(3); + gl.setCellPaddingBottom(2); + gl.setCellPaddingLeft(3); + + /* + + // the same like the above, but more local + gl.setColumnPaddingTop(0, 2); + gl.setColumnPaddingRight(0, 3); + gl.setColumnPaddingBottom(0, 2); + gl.setColumnPaddingLeft(0, 3); + + gl.setColumnPaddingTop(1, 2); + gl.setColumnPaddingRight(1, 3); + gl.setColumnPaddingBottom(1, 2); + gl.setColumnPaddingLeft(1, 3); + + */ + + qx.ui.core.ClientDocument.getInstance().add(gl); + + var label1 = new qx.ui.basic.Label("Given Name"); + var label2 = new qx.ui.basic.Label("Name"); + var label3 = new qx.ui.basic.Label("City"); + var label4 = new qx.ui.basic.Label("Country"); + var label5 = new qx.ui.basic.Label("E-Mail"); + var label6 = new qx.ui.basic.Label("Comment"); + + label6.setVerticalAlign("top"); + + var input1 = new qx.ui.form.TextField; + var input2 = new qx.ui.form.TextField; + var input3 = new qx.ui.form.ComboBox; + var input4 = new qx.ui.form.TextField; + var input5 = new qx.ui.form.TextField; + var input6 = new qx.ui.form.TextArea; + var input7 = new qx.ui.form.Button("Submit", "icon/16/actions/dialog-ok.png"); + + input3.add(new qx.ui.form.ListItem("New York")); + input3.add(new qx.ui.form.ListItem("Paris")); + input3.add(new qx.ui.form.ListItem("Sydney")); + input3.add(new qx.ui.form.ListItem("Berlin")); + input3.add(new qx.ui.form.ListItem("Washington")); + + input7.setHorizontalAlign("right"); + + gl.add(label1, 0, 0); + gl.add(input1, 1, 0); + gl.add(label2, 0, 1); + gl.add(input2, 1, 1); + gl.add(label3, 0, 2); + gl.add(input3, 1, 2); + gl.add(label4, 0, 3); + gl.add(input4, 1, 3); + gl.add(label5, 0, 4); + gl.add(input5, 1, 4); + gl.add(label6, 0, 5); + gl.add(input6, 1, 5); + gl.add(input7, 1, 6); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_7.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_7.html new file mode 100644 index 0000000000..1b3b108afb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_7.html @@ -0,0 +1,112 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout. Now with cells which are merged with others.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension(462, 128); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + + gl.setColumnWidth(0, 100); + gl.setColumnWidth(1, 200); + gl.setColumnWidth(2, 50); + gl.setColumnWidth(3, 100); + + gl.setRowHeight(0, 40); + gl.setRowHeight(1, 80); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + // start-col, start-row, col-length, row-length + gl.debug("Merge: 1, 1, 2, 1"); + gl.mergeCells(1, 1, 2, 1); + + gl.debug("Span-Start (0, 1): " + gl.isSpanStart(0, 1)); + gl.debug("Span-Start (0, 2): " + gl.isSpanStart(0, 2)); + gl.debug("Span-Start (1, 1): " + gl.isSpanStart(1, 1)); + gl.debug("Span-Start (1, 2): " + gl.isSpanStart(1, 2)); + gl.debug("Span-Start (2, 1): " + gl.isSpanStart(2, 1)); + gl.debug("Span-Start (2, 2): " + gl.isSpanStart(2, 2)); + gl.debug("Span-Start (3, 1): " + gl.isSpanStart(3, 1)); + gl.debug("Span-Start (3, 2): " + gl.isSpanStart(3, 2)); + + gl.debug("Span-Cell (0, 1): " + gl.isSpanCell(0, 1)); + gl.debug("Span-Cell (0, 2): " + gl.isSpanCell(0, 2)); + gl.debug("Span-Cell (1, 1): " + gl.isSpanCell(1, 1)); + gl.debug("Span-Cell (1, 2): " + gl.isSpanCell(1, 2)); + gl.debug("Span-Cell (2, 1): " + gl.isSpanCell(2, 1)); + gl.debug("Span-Cell (2, 2): " + gl.isSpanCell(2, 2)); + gl.debug("Span-Cell (3, 1): " + gl.isSpanCell(3, 1)); + gl.debug("Span-Cell (3, 2): " + gl.isSpanCell(3, 2)); + + gl.debug("Fill-Cell (0, 1): " + gl.isFillCell(0, 1)); + gl.debug("Fill-Cell (0, 2): " + gl.isFillCell(0, 2)); + gl.debug("Fill-Cell (1, 1): " + gl.isFillCell(1, 1)); + gl.debug("Fill-Cell (1, 2): " + gl.isFillCell(1, 2)); + gl.debug("Fill-Cell (2, 1): " + gl.isFillCell(2, 1)); + gl.debug("Fill-Cell (2, 2): " + gl.isFillCell(2, 2)); + gl.debug("Fill-Cell (3, 1): " + gl.isFillCell(3, 1)); + gl.debug("Fill-Cell (3, 2): " + gl.isFillCell(3, 2)); + + /* + // both should be impossible + gl.debug("Merge 1, 1, 2, 1"); + gl.mergeCells(1, 1, 2, 1); + + gl.debug("Merge 0, 0, 3, 4"); + gl.mergeCells(0, 0, 3, 4); + */ + + gl.debug("Merge 0, 0, 1, 2"); + gl.mergeCells(0, 0, 1, 2); + + gl.debug("Merge 2, 0, 2, 1"); + gl.mergeCells(2, 0, 2, 1); + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.basic.Terminator; + term2.setBackgroundColor("red"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + gl.add(term3, 2, 0); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + gl.add(term6, 1, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_8.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_8.html new file mode 100644 index 0000000000..24a0ae9f4b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_8.html @@ -0,0 +1,115 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout. Now with cells which are merged with others.</p> + <p>Added spacing in combination with spans.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension("auto", "auto"); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + gl.setHorizontalSpacing(10); + gl.setVerticalSpacing(10); + + gl.setColumnWidth(0, 100); + gl.setColumnWidth(1, 200); + gl.setColumnWidth(2, 50); + gl.setColumnWidth(3, 100); + + gl.setRowHeight(0, 40); + gl.setRowHeight(1, 80); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + // start-col, start-row, col-length, row-length + gl.debug("Merge: 1, 1, 2, 1"); + gl.mergeCells(1, 1, 2, 1); + + gl.debug("Span-Start (0, 1): " + gl.isSpanStart(0, 1)); + gl.debug("Span-Start (0, 2): " + gl.isSpanStart(0, 2)); + gl.debug("Span-Start (1, 1): " + gl.isSpanStart(1, 1)); + gl.debug("Span-Start (1, 2): " + gl.isSpanStart(1, 2)); + gl.debug("Span-Start (2, 1): " + gl.isSpanStart(2, 1)); + gl.debug("Span-Start (2, 2): " + gl.isSpanStart(2, 2)); + gl.debug("Span-Start (3, 1): " + gl.isSpanStart(3, 1)); + gl.debug("Span-Start (3, 2): " + gl.isSpanStart(3, 2)); + + gl.debug("Span-Cell (0, 1): " + gl.isSpanCell(0, 1)); + gl.debug("Span-Cell (0, 2): " + gl.isSpanCell(0, 2)); + gl.debug("Span-Cell (1, 1): " + gl.isSpanCell(1, 1)); + gl.debug("Span-Cell (1, 2): " + gl.isSpanCell(1, 2)); + gl.debug("Span-Cell (2, 1): " + gl.isSpanCell(2, 1)); + gl.debug("Span-Cell (2, 2): " + gl.isSpanCell(2, 2)); + gl.debug("Span-Cell (3, 1): " + gl.isSpanCell(3, 1)); + gl.debug("Span-Cell (3, 2): " + gl.isSpanCell(3, 2)); + + gl.debug("Fill-Cell (0, 1): " + gl.isFillCell(0, 1)); + gl.debug("Fill-Cell (0, 2): " + gl.isFillCell(0, 2)); + gl.debug("Fill-Cell (1, 1): " + gl.isFillCell(1, 1)); + gl.debug("Fill-Cell (1, 2): " + gl.isFillCell(1, 2)); + gl.debug("Fill-Cell (2, 1): " + gl.isFillCell(2, 1)); + gl.debug("Fill-Cell (2, 2): " + gl.isFillCell(2, 2)); + gl.debug("Fill-Cell (3, 1): " + gl.isFillCell(3, 1)); + gl.debug("Fill-Cell (3, 2): " + gl.isFillCell(3, 2)); + + /* + // both should be impossible + gl.debug("Merge 1, 1, 2, 1"); + gl.mergeCells(1, 1, 2, 1); + + gl.debug("Merge 0, 0, 3, 4"); + gl.mergeCells(0, 0, 3, 4); + */ + + gl.debug("Merge 0, 0, 1, 2"); + gl.mergeCells(0, 0, 1, 2); + + gl.debug("Merge 2, 0, 2, 1"); + gl.mergeCells(2, 0, 2, 1); + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.basic.Terminator; + term2.setBackgroundColor("red"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + gl.add(term3, 2, 0); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + gl.add(term6, 1, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_9.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_9.html new file mode 100644 index 0000000000..a37d5a0048 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/GridLayout_9.html @@ -0,0 +1,120 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for qx.ui.layout.GridLayout. Now with cells which are merged with others.</p> + <p>Added spacing in combination with spans.</p> + <p>Added padding in combination with spans.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var gl = new qx.ui.layout.GridLayout; + + gl.setLocation(20, 48); + gl.setDimension("auto", "auto"); + gl.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + gl.setPadding(2, 4); + gl.setColumnCount(4); + gl.setRowCount(2); + gl.setHorizontalSpacing(10); + gl.setVerticalSpacing(10); + gl.setCellPaddingTop(4); + gl.setCellPaddingRight(4); + gl.setCellPaddingBottom(4); + gl.setCellPaddingLeft(4); + + gl.setColumnWidth(0, 100); + gl.setColumnWidth(1, 200); + gl.setColumnWidth(2, 50); + gl.setColumnWidth(3, 100); + + gl.setRowHeight(0, 40); + gl.setRowHeight(1, 80); + + qx.ui.core.ClientDocument.getInstance().add(gl); + + // start-col, start-row, col-length, row-length + gl.debug("Merge: 1, 1, 2, 1"); + gl.mergeCells(1, 1, 2, 1); + + gl.debug("Span-Start (0, 1): " + gl.isSpanStart(0, 1)); + gl.debug("Span-Start (0, 2): " + gl.isSpanStart(0, 2)); + gl.debug("Span-Start (1, 1): " + gl.isSpanStart(1, 1)); + gl.debug("Span-Start (1, 2): " + gl.isSpanStart(1, 2)); + gl.debug("Span-Start (2, 1): " + gl.isSpanStart(2, 1)); + gl.debug("Span-Start (2, 2): " + gl.isSpanStart(2, 2)); + gl.debug("Span-Start (3, 1): " + gl.isSpanStart(3, 1)); + gl.debug("Span-Start (3, 2): " + gl.isSpanStart(3, 2)); + + gl.debug("Span-Cell (0, 1): " + gl.isSpanCell(0, 1)); + gl.debug("Span-Cell (0, 2): " + gl.isSpanCell(0, 2)); + gl.debug("Span-Cell (1, 1): " + gl.isSpanCell(1, 1)); + gl.debug("Span-Cell (1, 2): " + gl.isSpanCell(1, 2)); + gl.debug("Span-Cell (2, 1): " + gl.isSpanCell(2, 1)); + gl.debug("Span-Cell (2, 2): " + gl.isSpanCell(2, 2)); + gl.debug("Span-Cell (3, 1): " + gl.isSpanCell(3, 1)); + gl.debug("Span-Cell (3, 2): " + gl.isSpanCell(3, 2)); + + gl.debug("Fill-Cell (0, 1): " + gl.isFillCell(0, 1)); + gl.debug("Fill-Cell (0, 2): " + gl.isFillCell(0, 2)); + gl.debug("Fill-Cell (1, 1): " + gl.isFillCell(1, 1)); + gl.debug("Fill-Cell (1, 2): " + gl.isFillCell(1, 2)); + gl.debug("Fill-Cell (2, 1): " + gl.isFillCell(2, 1)); + gl.debug("Fill-Cell (2, 2): " + gl.isFillCell(2, 2)); + gl.debug("Fill-Cell (3, 1): " + gl.isFillCell(3, 1)); + gl.debug("Fill-Cell (3, 2): " + gl.isFillCell(3, 2)); + + /* + // both should be impossible + gl.debug("Merge 1, 1, 2, 1"); + gl.mergeCells(1, 1, 2, 1); + + gl.debug("Merge 0, 0, 3, 4"); + gl.mergeCells(0, 0, 3, 4); + */ + + gl.debug("Merge 0, 0, 1, 2"); + gl.mergeCells(0, 0, 1, 2); + + gl.debug("Merge 2, 0, 2, 1"); + gl.mergeCells(2, 0, 2, 1); + + + + + var term1 = new qx.ui.basic.Terminator; + term1.setBackgroundColor("yellow"); + gl.add(term1, 0, 0); + + var term2 = new qx.ui.basic.Terminator; + term2.setBackgroundColor("red"); + gl.add(term2, 1, 0); + + var term3 = new qx.ui.basic.Terminator; + term3.setBackgroundColor("green"); + gl.add(term3, 2, 0); + + var term6 = new qx.ui.basic.Terminator; + term6.setBackgroundColor("olive"); + gl.add(term6, 1, 1); + + var term8 = new qx.ui.basic.Terminator; + term8.setBackgroundColor("navy"); + gl.add(term8, 3, 1); + }); + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/History_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/History_1.html new file mode 100644 index 0000000000..3c137ad131 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/History_1.html @@ -0,0 +1,84 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test the back button functionality of qooxdoo.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + function callback(e) { + d.debug(e.getData()); + a1.setLabel("History event: " + e.getData()); + } + + var history = qx.client.History.getInstance(); + + history.init(); + history.addEventListener("request", callback); + + qx.client.Timer.once(function() { + history.addToHistory("Juhu1", "Juhu1"); + }, this, 300); + + qx.client.Timer.once(function() { + history.addToHistory("Juhu2", "Juhu2"); + }, this, 600); + + qx.client.Timer.once(function() { + history.addToHistory("Juhu3", "Juhu3"); + }, this, 900); + + var t1 = new qx.ui.form.TextField(); + t1.set({ + left: 20, + top:48, + height: 20, + value: "" + }); + + var a1 = new qx.ui.basic.Atom(""); + a1.set({ + left: 20, + top: 78, + width: 230, + height: 120, + backgroundColor: "orange", + border: qx.renderer.border.BorderPresets.getInstance().thinInset + }); + + var b1 = new qx.ui.form.Button("add to history"); + b1.set({ + top: 48, + left: 150, + height: 20, + width: 100 + }); + b1.addEventListener("execute", function() { + var data = t1.getValue(); + if (!data) return; + t1.setValue(""); + qx.client.Timer.once(function() { + history.addToHistory(data, data); + }, this, 100); + }); + + d.add(t1, a1, b1); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_1.html new file mode 100644 index 0000000000..52ea8c5c07 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_1.html @@ -0,0 +1,1261 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.HorizontalBoxLayout widget. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var cl_white = new qx.renderer.color.Color("white"); + var cl_blue = new qx.renderer.color.Color("blue"); + var cl_yellow = new qx.renderer.color.Color("yellow"); + var cl_green = new qx.renderer.color.Color("green"); + var cl_orange = new qx.renderer.color.Color("orange"); + var cl_purple = new qx.renderer.color.Color("purple"); + var cl_aqua = new qx.renderer.color.Color("aqua"); + var cl_fuchsia = new qx.renderer.color.Color("fuchsia"); + + + /* *********************************************** + + EXAMPLE ONE: + LEFT ALIGN + + *********************************************** */ + + var hbl1 = new qx.ui.layout.HorizontalBoxLayout; + + hbl1.setTop(48); + hbl1.setLeft(20); + hbl1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl1.setHeight("auto"); + hbl1.setRight(335); + + hbl1.setSpacing(4); + hbl1.setPadding(8); + + hbl1.setVerticalChildrenAlign("bottom"); + + + var w1_1 = new qx.ui.layout.CanvasLayout; + w1_1.setWidth(25); + w1_1.setHeight(25); + w1_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_1.setBackgroundColor(cl_white); + // w1_1.setMaxHeight(40); + + var w1_2 = new qx.ui.layout.CanvasLayout; + w1_2.setWidth(25); + w1_2.setHeight(25); + w1_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_2.setBackgroundColor(cl_blue); + w1_2.setBottom(10); + + var w1_3 = new qx.ui.layout.CanvasLayout; + w1_3.setWidth(25); + w1_3.setHeight("100%"); + w1_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_3.setBackgroundColor(cl_yellow); + + var w1_4 = new qx.ui.layout.CanvasLayout; + w1_4.setWidth(25); + w1_4.setHeight(25); + w1_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_4.setBackgroundColor(cl_green); + + var w1_5 = new qx.ui.layout.CanvasLayout; + w1_5.setWidth(40); + // w1_5.setHeight(25); + w1_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_5.setBackgroundColor(cl_orange); + + var w1_6 = new qx.ui.layout.CanvasLayout; + w1_6.setWidth(25); + w1_6.setHeight(25); + w1_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_6.setBackgroundColor(cl_purple); + w1_6.setTop(15); + w1_6.setLeft(-25); + + var w1_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w1_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w1_9 = new qx.ui.layout.CanvasLayout; + w1_9.setWidth(25); + w1_9.setHeight(25); + w1_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_9.setBackgroundColor(cl_aqua); + + var w1_10 = new qx.ui.layout.CanvasLayout; + w1_10.setWidth(25); + w1_10.setHeight(25); + w1_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_10.setBackgroundColor(cl_fuchsia); + + var hbl1_click = 0; + hbl1.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl1_click) + { + case 0: + this.setRight(null); + this.setWidth("auto"); + break; + + case 1: + this.setHeight(30); + break; + + case 2: + this.setHeight(80); + break; + + case 3: + this.setHeight("auto"); + break; + + case 4: + this.setWidth(200); + break; + + case 5: + this.setWidth(null); + this.setRight(335); + hbl1_click = 0; + return; + }; + + hbl1_click++; + }); + + w1_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w1_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w1_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w1_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w1_5.addEventListener("click", function(e) { + this.getWidth() == 40 ? this.setWidth(80) : this.setWidth(40); + }); + + w1_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w1_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w1_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w1_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w1_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl1.add(w1_1, w1_2, w1_3, w1_4, w1_5, w1_6, w1_7, w1_8, w1_9, w1_10); + d.add(hbl1); + + + + + + /* *********************************************** + + EXAMPLE TWO: + RIGHT ALIGN + + *********************************************** */ + + var hbl2 = new qx.ui.layout.HorizontalBoxLayout; + + hbl2.setTop(138); + hbl2.setLeft(20); + hbl2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl2.setHeight("auto"); + hbl2.setRight(335); + + hbl2.setSpacing(4); + hbl2.setPadding(8); + + hbl2.setHorizontalChildrenAlign("right"); + hbl2.setVerticalChildrenAlign("middle"); + + + var w2_1 = new qx.ui.layout.CanvasLayout; + w2_1.setWidth(25); + w2_1.setHeight(25); + w2_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_1.setBackgroundColor(cl_white); + // w2_1.setMaxHeight(40); + + var w2_2 = new qx.ui.layout.CanvasLayout; + w2_2.setWidth(25); + w2_2.setHeight(25); + w2_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_2.setBackgroundColor(cl_blue); + w2_2.setBottom(10); + + var w2_3 = new qx.ui.layout.CanvasLayout; + w2_3.setWidth(25); + w2_3.setHeight("100%"); + w2_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_3.setBackgroundColor(cl_yellow); + + var w2_4 = new qx.ui.layout.CanvasLayout; + w2_4.setWidth(25); + w2_4.setHeight(25); + w2_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_4.setBackgroundColor(cl_green); + + var w2_5 = new qx.ui.layout.CanvasLayout; + w2_5.setWidth(40); + // w2_5.setHeight(25); + w2_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_5.setBackgroundColor(cl_orange); + + var w2_6 = new qx.ui.layout.CanvasLayout; + w2_6.setWidth(25); + w2_6.setHeight(25); + w2_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_6.setBackgroundColor(cl_purple); + w2_6.setTop(15); + w2_6.setLeft(-25); + + var w2_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w2_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w2_9 = new qx.ui.layout.CanvasLayout; + w2_9.setWidth(25); + w2_9.setHeight(25); + w2_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_9.setBackgroundColor(cl_aqua); + + var w2_10 = new qx.ui.layout.CanvasLayout; + w2_10.setWidth(25); + w2_10.setHeight(25); + w2_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_10.setBackgroundColor(cl_fuchsia); + w2_10.foo = true; + + + var hbl2_click = 0; + hbl2.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl2_click) + { + case 0: + this.setRight(null); + this.setWidth("auto"); + break; + + case 1: + this.setHeight(30); + break; + + case 2: + this.setHeight(80); + break; + + case 3: + this.setHeight("auto"); + break; + + case 4: + this.setWidth(200); + break; + + case 5: + this.setWidth(null); + this.setRight(335); + hbl2_click = 0; + return; + }; + + hbl2_click++; + }); + + w2_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w2_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w2_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w2_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w2_5.addEventListener("click", function(e) { + this.getWidth() == 40 ? this.setWidth(80) : this.setWidth(40); + }); + + w2_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w2_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w2_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w2_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w2_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl2.add(w2_1, w2_2, w2_3, w2_4, w2_5, w2_6, w2_7, w2_8, w2_9, w2_10); + d.add(hbl2); + + + /* *********************************************** + + EXAMPLE THREE: + CENTER ALIGN + + *********************************************** */ + + var hbl3 = new qx.ui.layout.HorizontalBoxLayout; + + hbl3.setTop(228); + hbl3.setLeft(20); + hbl3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl3.setHeight("auto"); + hbl3.setRight(335); + + hbl3.setSpacing(4); + hbl3.setPadding(8); + + hbl3.setHorizontalChildrenAlign("center"); + + + + var w3_1 = new qx.ui.layout.CanvasLayout; + w3_1.setWidth(25); + w3_1.setHeight(25); + w3_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_1.setBackgroundColor(cl_white); + // w3_1.setMaxHeight(40); + + var w3_2 = new qx.ui.layout.CanvasLayout; + w3_2.setWidth(25); + w3_2.setHeight(25); + w3_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_2.setBackgroundColor(cl_blue); + w3_2.setBottom(10); + + var w3_3 = new qx.ui.layout.CanvasLayout; + w3_3.setWidth(25); + w3_3.setHeight("100%"); + w3_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_3.setBackgroundColor(cl_yellow); + + var w3_4 = new qx.ui.layout.CanvasLayout; + w3_4.setWidth(25); + w3_4.setHeight(25); + w3_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_4.setBackgroundColor(cl_green); + + var w3_5 = new qx.ui.layout.CanvasLayout; + w3_5.setWidth(40); + // w3_5.setHeight(25); + w3_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_5.setBackgroundColor(cl_orange); + + var w3_6 = new qx.ui.layout.CanvasLayout; + w3_6.setWidth(25); + w3_6.setHeight(25); + w3_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_6.setBackgroundColor(cl_purple); + w3_6.setTop(15); + w3_6.setLeft(-25); + + var w3_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w3_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w3_9 = new qx.ui.layout.CanvasLayout; + w3_9.setWidth(25); + w3_9.setHeight(25); + w3_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_9.setBackgroundColor(cl_aqua); + + var w3_10 = new qx.ui.layout.CanvasLayout; + w3_10.setWidth(25); + w3_10.setHeight(25); + w3_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_10.setBackgroundColor(cl_fuchsia); + + + var hbl3_click = 0; + hbl3.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl3_click) + { + case 0: + this.setRight(null); + this.setWidth("auto"); + break; + + case 1: + this.setHeight(30); + break; + + case 2: + this.setHeight(80); + break; + + case 3: + this.setHeight("auto"); + break; + + case 4: + this.setWidth(200); + break; + + case 5: + this.setWidth(null); + this.setRight(335); + hbl3_click = 0; + return; + }; + + hbl3_click++; + }); + + w3_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w3_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w3_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w3_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w3_5.addEventListener("click", function(e) { + this.getWidth() == 40 ? this.setWidth(80) : this.setWidth(40); + }); + + w3_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w3_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w3_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w3_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w3_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl3.add(w3_1, w3_2, w3_3, w3_4, w3_5, w3_6, w3_7, w3_8, w3_9, w3_10); + d.add(hbl3); + + + + + /* *********************************************** + + EXAMPLE FOUR: + LEFT ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl4 = new qx.ui.layout.HorizontalBoxLayout; + + hbl4.setTop(318); + hbl4.setLeft(20); + hbl4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl4.setWidth(null); + hbl4.setRight(335); + + hbl4.setSpacing(4); + hbl4.setPadding(8); + hbl4.setReverseChildrenOrder(true); + hbl4.setVerticalChildrenAlign("bottom"); + + hbl4.setHeight(80); + + + + var w4_1 = new qx.ui.layout.CanvasLayout; + w4_1.setWidth(25); + w4_1.setHeight(25); + w4_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_1.setBackgroundColor(cl_white); + // w4_1.setMaxHeight(40); + + var w4_2 = new qx.ui.layout.CanvasLayout; + w4_2.setWidth(25); + w4_2.setHeight(25); + w4_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_2.setBackgroundColor(cl_blue); + w4_2.setBottom(10); + + var w4_3 = new qx.ui.layout.CanvasLayout; + w4_3.setWidth(25); + w4_3.setHeight("100%"); + w4_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_3.setBackgroundColor(cl_yellow); + + var w4_4 = new qx.ui.layout.CanvasLayout; + w4_4.setWidth(25); + w4_4.setHeight(25); + w4_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_4.setBackgroundColor(cl_green); + + var w4_5 = new qx.ui.layout.CanvasLayout; + w4_5.setWidth(40); + // w4_5.setHeight(25); + w4_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_5.setBackgroundColor(cl_orange); + + var w4_6 = new qx.ui.layout.CanvasLayout; + w4_6.setWidth(25); + w4_6.setHeight(25); + w4_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_6.setBackgroundColor(cl_purple); + w4_6.setTop(15); + w4_6.setLeft(-25); + + var w4_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w4_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w4_9 = new qx.ui.layout.CanvasLayout; + w4_9.setWidth(25); + w4_9.setHeight(25); + w4_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_9.setBackgroundColor(cl_aqua); + + var w4_10 = new qx.ui.layout.CanvasLayout; + w4_10.setWidth(25); + w4_10.setHeight(25); + w4_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_10.setBackgroundColor(cl_fuchsia); + + + var hbl4_click = 0; + hbl4.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl4_click) + { + case 0: + this.setRight(null); + this.setWidth("auto"); + break; + + case 1: + this.setHeight(30); + break; + + case 2: + this.setHeight("auto"); + break; + + case 3: + this.setHeight(80); + break; + + case 4: + this.setWidth(200); + break; + + case 5: + this.setWidth(null); + this.setRight(335); + hbl4_click = 0; + return; + }; + + hbl4_click++; + }); + + w4_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w4_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w4_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w4_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w4_5.addEventListener("click", function(e) { + this.getWidth() == 40 ? this.setWidth(80) : this.setWidth(40); + }); + + w4_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w4_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w4_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w4_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w4_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl4.add(w4_1, w4_2, w4_3, w4_4, w4_5, w4_6, w4_7, w4_8, w4_9, w4_10); + d.add(hbl4); + + + + + /* *********************************************** + + EXAMPLE FIVE: + RIGHT ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl5 = new qx.ui.layout.HorizontalBoxLayout; + + hbl5.setTop(408); + hbl5.setLeft(20); + hbl5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl5.setWidth(null); + hbl5.setRight(335); + + hbl5.setSpacing(4); + hbl5.setPadding(8); + + hbl5.setHorizontalChildrenAlign("right"); + hbl5.setReverseChildrenOrder(true); + hbl5.setVerticalChildrenAlign("middle"); + + hbl5.setHeight(80); + + + var w5_1 = new qx.ui.layout.CanvasLayout; + w5_1.setWidth(25); + w5_1.setHeight(25); + w5_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_1.setBackgroundColor(cl_white); + // w5_1.setMaxHeight(40); + + var w5_2 = new qx.ui.layout.CanvasLayout; + w5_2.setWidth(25); + w5_2.setHeight(25); + w5_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_2.setBackgroundColor(cl_blue); + w5_2.setBottom(10); + + var w5_3 = new qx.ui.layout.CanvasLayout; + w5_3.setWidth(25); + w5_3.setHeight("100%"); + w5_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_3.setBackgroundColor(cl_yellow); + + var w5_4 = new qx.ui.layout.CanvasLayout; + w5_4.setWidth(25); + w5_4.setHeight(25); + w5_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_4.setBackgroundColor(cl_green); + + var w5_5 = new qx.ui.layout.CanvasLayout; + w5_5.setWidth(40); + // w5_5.setHeight(25); + w5_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_5.setBackgroundColor(cl_orange); + + var w5_6 = new qx.ui.layout.CanvasLayout; + w5_6.setWidth(25); + w5_6.setHeight(25); + w5_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_6.setBackgroundColor(cl_purple); + w5_6.setTop(15); + w5_6.setLeft(-25); + + var w5_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w5_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w5_9 = new qx.ui.layout.CanvasLayout; + w5_9.setWidth(25); + w5_9.setHeight(25); + w5_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_9.setBackgroundColor(cl_aqua); + + var w5_10 = new qx.ui.layout.CanvasLayout; + w5_10.setWidth(25); + w5_10.setHeight(25); + w5_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_10.setBackgroundColor(cl_fuchsia); + + + var hbl5_click = 0; + hbl5.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl5_click) + { + case 0: + this.setRight(null); + this.setWidth("auto"); + break; + + case 1: + this.setHeight(30); + break; + + case 2: + this.setHeight("auto"); + break; + + case 3: + this.setHeight(80); + break; + + case 4: + this.setWidth(200); + break; + + case 5: + this.setWidth(null); + this.setRight(335); + hbl5_click = 0; + return; + }; + + hbl5_click++; + }); + + w5_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w5_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w5_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w5_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w5_5.addEventListener("click", function(e) { + this.getWidth() == 40 ? this.setWidth(80) : this.setWidth(40); + }); + + w5_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w5_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w5_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w5_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w5_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl5.add(w5_1, w5_2, w5_3, w5_4, w5_5, w5_6, w5_7, w5_8, w5_9, w5_10); + d.add(hbl5); + + + + + + + + + /* *********************************************** + + EXAMPLE SIX: + CENTER ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl6 = new qx.ui.layout.HorizontalBoxLayout; + + hbl6.setTop(498); + hbl6.setLeft(20); + hbl6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl6.setWidth(null); + hbl6.setRight(335); + + hbl6.setSpacing(4); + hbl6.setPadding(8); + + hbl6.setHorizontalChildrenAlign("center"); + hbl6.setReverseChildrenOrder(true); + hbl6.setHeight(80); + + + var w6_1 = new qx.ui.layout.CanvasLayout; + w6_1.setWidth(25); + w6_1.setHeight(25); + w6_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_1.setBackgroundColor(cl_white); + // w6_1.setMaxHeight(40); + + var w6_2 = new qx.ui.layout.CanvasLayout; + w6_2.setWidth(25); + w6_2.setHeight(25); + w6_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_2.setBackgroundColor(cl_blue); + w6_2.setBottom(10); + + var w6_3 = new qx.ui.layout.CanvasLayout; + w6_3.setWidth(25); + w6_3.setHeight("100%"); + w6_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_3.setBackgroundColor(cl_yellow); + + var w6_4 = new qx.ui.layout.CanvasLayout; + w6_4.setWidth(25); + w6_4.setHeight(25); + w6_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_4.setBackgroundColor(cl_green); + + var w6_5 = new qx.ui.layout.CanvasLayout; + w6_5.setWidth(40); + // w6_5.setHeight(25); + w6_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_5.setBackgroundColor(cl_orange); + + var w6_6 = new qx.ui.layout.CanvasLayout; + w6_6.setWidth(25); + w6_6.setHeight(25); + w6_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_6.setBackgroundColor(cl_purple); + w6_6.setTop(15); + w6_6.setLeft(-25); + + var w6_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w6_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w6_9 = new qx.ui.layout.CanvasLayout; + w6_9.setWidth(25); + w6_9.setHeight(25); + w6_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_9.setBackgroundColor(cl_aqua); + + var w6_10 = new qx.ui.layout.CanvasLayout; + w6_10.setWidth(25); + w6_10.setHeight(25); + w6_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_10.setBackgroundColor(cl_fuchsia); + + + var hbl6_click = 0; + hbl6.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl6_click) + { + case 0: + this.setRight(null); + this.setWidth("auto"); + break; + + case 1: + this.setHeight(30); + break; + + case 2: + this.setHeight("auto"); + break; + + case 3: + this.setHeight(80); + break; + + case 4: + this.setWidth(200); + break; + + case 5: + this.setWidth(null); + this.setRight(335); + hbl6_click = 0; + return; + }; + + hbl6_click++; + }); + + w6_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w6_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w6_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w6_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w6_5.addEventListener("click", function(e) { + this.getWidth() == 40 ? this.setWidth(80) : this.setWidth(40); + }); + + w6_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w6_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w6_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w6_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w6_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl6.add(w6_1, w6_2, w6_3, w6_4, w6_5, w6_6, w6_7, w6_8, w6_9, w6_10); + d.add(hbl6); + + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_2.html new file mode 100644 index 0000000000..80520ddc64 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_2.html @@ -0,0 +1,1233 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.HorizontalBoxLayout widget. + This example includes a child with a width defined as percent. This makes + things much more complex (especially on resizing of the parent) so this also + dramatically reduces the speed ;) + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var cl_white = new qx.renderer.color.Color("white"); + var cl_blue = new qx.renderer.color.Color("blue"); + var cl_yellow = new qx.renderer.color.Color("yellow"); + var cl_green = new qx.renderer.color.Color("green"); + var cl_orange = new qx.renderer.color.Color("orange"); + var cl_purple = new qx.renderer.color.Color("purple"); + var cl_aqua = new qx.renderer.color.Color("aqua"); + var cl_fuchsia = new qx.renderer.color.Color("fuchsia"); + + /* *********************************************** + + EXAMPLE ONE: + LEFT ALIGN + + *********************************************** */ + + var hbl1 = new qx.ui.layout.HorizontalBoxLayout; + + hbl1.setTop(48); + hbl1.setLeft(20); + hbl1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl1.setHeight("auto"); + hbl1.setRight(335); + + hbl1.setSpacing(4); + hbl1.setPadding(8); + + hbl1.setVerticalChildrenAlign("bottom"); + + + var w1_1 = new qx.ui.layout.CanvasLayout; + w1_1.setWidth(25); + w1_1.setHeight(25); + w1_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_1.setBackgroundColor(cl_white); + // w1_1.setMaxHeight(40); + + var w1_2 = new qx.ui.layout.CanvasLayout; + w1_2.setWidth(25); + w1_2.setHeight(25); + w1_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_2.setBackgroundColor(cl_blue); + w1_2.setBottom(10); + + var w1_3 = new qx.ui.layout.CanvasLayout; + w1_3.setWidth(25); + w1_3.setHeight("100%"); + w1_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_3.setBackgroundColor(cl_yellow); + + var w1_4 = new qx.ui.layout.CanvasLayout; + w1_4.setWidth(25); + w1_4.setHeight(25); + w1_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_4.setBackgroundColor(cl_green); + + var w1_5 = new qx.ui.layout.CanvasLayout; + w1_5.setWidth("15%"); + // w1_5.setHeight(25); + w1_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_5.setBackgroundColor(cl_orange); + + var w1_6 = new qx.ui.layout.CanvasLayout; + w1_6.setWidth(25); + w1_6.setHeight(25); + w1_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_6.setBackgroundColor(cl_purple); + w1_6.setTop(15); + w1_6.setLeft(-25); + + var w1_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w1_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w1_9 = new qx.ui.layout.CanvasLayout; + w1_9.setWidth(25); + w1_9.setHeight(25); + w1_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_9.setBackgroundColor(cl_aqua); + + var w1_10 = new qx.ui.layout.CanvasLayout; + w1_10.setWidth(25); + w1_10.setHeight(25); + w1_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_10.setBackgroundColor(cl_fuchsia); + + var hbl1_click = 0; + hbl1.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl1_click) + { + case 0: + this.setHeight(30); + break; + + case 1: + this.setHeight(80); + break; + + case 2: + this.setHeight("auto"); + break; + + case 3: + this.setWidth(200); + break; + + case 4: + this.setWidth(null); + this.setRight(335); + hbl1_click = 0; + return; + }; + + hbl1_click++; + }); + + w1_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w1_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w1_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w1_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w1_5.addEventListener("click", function(e) { + this.getWidth() == "15%" ? this.setWidth("30%") : this.setWidth("15%"); + }); + + w1_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w1_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w1_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w1_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w1_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl1.add(w1_1, w1_2, w1_3, w1_4, w1_5, w1_6, w1_7, w1_8, w1_9, w1_10); + d.add(hbl1); + + + + + + /* *********************************************** + + EXAMPLE TWO: + RIGHT ALIGN + + *********************************************** */ + + var hbl2 = new qx.ui.layout.HorizontalBoxLayout; + + hbl2.setTop(138); + hbl2.setLeft(20); + hbl2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl2.setHeight("auto"); + hbl2.setRight(335); + + hbl2.setSpacing(4); + hbl2.setPadding(8); + + hbl2.setHorizontalChildrenAlign("right"); + hbl2.setVerticalChildrenAlign("middle"); + + + var w2_1 = new qx.ui.layout.CanvasLayout; + w2_1.setWidth(25); + w2_1.setHeight(25); + w2_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_1.setBackgroundColor(cl_white); + // w2_1.setMaxHeight(40); + + var w2_2 = new qx.ui.layout.CanvasLayout; + w2_2.setWidth(25); + w2_2.setHeight(25); + w2_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_2.setBackgroundColor(cl_blue); + w2_2.setBottom(10); + + var w2_3 = new qx.ui.layout.CanvasLayout; + w2_3.setWidth(25); + w2_3.setHeight("100%"); + w2_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_3.setBackgroundColor(cl_yellow); + + var w2_4 = new qx.ui.layout.CanvasLayout; + w2_4.setWidth(25); + w2_4.setHeight(25); + w2_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_4.setBackgroundColor(cl_green); + + var w2_5 = new qx.ui.layout.CanvasLayout; + w2_5.setWidth("15%"); + // w2_5.setHeight(25); + w2_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_5.setBackgroundColor(cl_orange); + + var w2_6 = new qx.ui.layout.CanvasLayout; + w2_6.setWidth(25); + w2_6.setHeight(25); + w2_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_6.setBackgroundColor(cl_purple); + w2_6.setTop(15); + w2_6.setLeft(-25); + + var w2_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w2_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w2_9 = new qx.ui.layout.CanvasLayout; + w2_9.setWidth(25); + w2_9.setHeight(25); + w2_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_9.setBackgroundColor(cl_aqua); + + var w2_10 = new qx.ui.layout.CanvasLayout; + w2_10.setWidth(25); + w2_10.setHeight(25); + w2_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_10.setBackgroundColor(cl_fuchsia); + w2_10.foo = true; + + + var hbl2_click = 0; + hbl2.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl2_click) + { + case 0: + this.setHeight(30); + break; + + case 1: + this.setHeight(80); + break; + + case 2: + this.setHeight("auto"); + break; + + case 3: + this.setWidth(200); + break; + + case 4: + this.setWidth(null); + this.setRight(335); + hbl2_click = 0; + return; + }; + + hbl2_click++; + }); + + w2_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w2_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w2_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w2_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w2_5.addEventListener("click", function(e) { + this.getWidth() == "15%" ? this.setWidth("30%") : this.setWidth("15%"); + }); + + w2_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w2_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w2_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w2_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w2_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl2.add(w2_1, w2_2, w2_3, w2_4, w2_5, w2_6, w2_7, w2_8, w2_9, w2_10); + d.add(hbl2); + + + /* *********************************************** + + EXAMPLE THREE: + CENTER ALIGN + + *********************************************** */ + + var hbl3 = new qx.ui.layout.HorizontalBoxLayout; + + hbl3.setTop(228); + hbl3.setLeft(20); + hbl3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl3.setHeight("auto"); + hbl3.setRight(335); + + hbl3.setSpacing(4); + hbl3.setPadding(8); + + hbl3.setHorizontalChildrenAlign("center"); + + + + var w3_1 = new qx.ui.layout.CanvasLayout; + w3_1.setWidth(25); + w3_1.setHeight(25); + w3_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_1.setBackgroundColor(cl_white); + // w3_1.setMaxHeight(40); + + var w3_2 = new qx.ui.layout.CanvasLayout; + w3_2.setWidth(25); + w3_2.setHeight(25); + w3_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_2.setBackgroundColor(cl_blue); + w3_2.setBottom(10); + + var w3_3 = new qx.ui.layout.CanvasLayout; + w3_3.setWidth(25); + w3_3.setHeight("100%"); + w3_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_3.setBackgroundColor(cl_yellow); + + var w3_4 = new qx.ui.layout.CanvasLayout; + w3_4.setWidth(25); + w3_4.setHeight(25); + w3_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_4.setBackgroundColor(cl_green); + + var w3_5 = new qx.ui.layout.CanvasLayout; + w3_5.setWidth("15%"); + // w3_5.setHeight(25); + w3_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_5.setBackgroundColor(cl_orange); + + var w3_6 = new qx.ui.layout.CanvasLayout; + w3_6.setWidth(25); + w3_6.setHeight(25); + w3_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_6.setBackgroundColor(cl_purple); + w3_6.setTop(15); + w3_6.setLeft(-25); + + var w3_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w3_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w3_9 = new qx.ui.layout.CanvasLayout; + w3_9.setWidth(25); + w3_9.setHeight(25); + w3_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_9.setBackgroundColor(cl_aqua); + + var w3_10 = new qx.ui.layout.CanvasLayout; + w3_10.setWidth(25); + w3_10.setHeight(25); + w3_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_10.setBackgroundColor(cl_fuchsia); + + + var hbl3_click = 0; + hbl3.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl3_click) + { + case 0: + this.setHeight(30); + break; + + case 1: + this.setHeight(80); + break; + + case 2: + this.setHeight("auto"); + break; + + case 3: + this.setWidth(200); + break; + + case 4: + this.setWidth(null); + this.setRight(335); + hbl3_click = 0; + return; + }; + + hbl3_click++; + }); + + w3_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w3_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w3_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w3_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w3_5.addEventListener("click", function(e) { + this.getWidth() == "15%" ? this.setWidth("30%") : this.setWidth("15%"); + }); + + w3_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w3_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w3_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w3_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w3_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl3.add(w3_1, w3_2, w3_3, w3_4, w3_5, w3_6, w3_7, w3_8, w3_9, w3_10); + d.add(hbl3); + + + + + /* *********************************************** + + EXAMPLE FOUR: + LEFT ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl4 = new qx.ui.layout.HorizontalBoxLayout; + + hbl4.setTop(318); + hbl4.setLeft(20); + hbl4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl4.setWidth(null); + hbl4.setRight(335); + + hbl4.setSpacing(4); + hbl4.setPadding(8); + hbl4.setReverseChildrenOrder(true); + hbl4.setVerticalChildrenAlign("bottom"); + + hbl4.setHeight(80); + + + + var w4_1 = new qx.ui.layout.CanvasLayout; + w4_1.setWidth(25); + w4_1.setHeight(25); + w4_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_1.setBackgroundColor(cl_white); + // w4_1.setMaxHeight(40); + + var w4_2 = new qx.ui.layout.CanvasLayout; + w4_2.setWidth(25); + w4_2.setHeight(25); + w4_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_2.setBackgroundColor(cl_blue); + w4_2.setBottom(10); + + var w4_3 = new qx.ui.layout.CanvasLayout; + w4_3.setWidth(25); + w4_3.setHeight("100%"); + w4_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_3.setBackgroundColor(cl_yellow); + + var w4_4 = new qx.ui.layout.CanvasLayout; + w4_4.setWidth(25); + w4_4.setHeight(25); + w4_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_4.setBackgroundColor(cl_green); + + var w4_5 = new qx.ui.layout.CanvasLayout; + w4_5.setWidth("15%"); + // w4_5.setHeight(25); + w4_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_5.setBackgroundColor(cl_orange); + + var w4_6 = new qx.ui.layout.CanvasLayout; + w4_6.setWidth(25); + w4_6.setHeight(25); + w4_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_6.setBackgroundColor(cl_purple); + w4_6.setTop(15); + w4_6.setLeft(-25); + + var w4_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w4_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w4_9 = new qx.ui.layout.CanvasLayout; + w4_9.setWidth(25); + w4_9.setHeight(25); + w4_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_9.setBackgroundColor(cl_aqua); + + var w4_10 = new qx.ui.layout.CanvasLayout; + w4_10.setWidth(25); + w4_10.setHeight(25); + w4_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_10.setBackgroundColor(cl_fuchsia); + + + var hbl4_click = 0; + hbl4.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl4_click) + { + case 0: + this.setHeight(30); + break; + + case 1: + this.setHeight("auto"); + break; + + case 2: + this.setHeight(80); + break; + + case 3: + this.setWidth(200); + break; + + case 4: + this.setWidth(null); + this.setRight(335); + hbl4_click = 0; + return; + }; + + hbl4_click++; + }); + + w4_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w4_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w4_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w4_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w4_5.addEventListener("click", function(e) { + this.getWidth() == "15%" ? this.setWidth("30%") : this.setWidth("15%"); + }); + + w4_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w4_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w4_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w4_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w4_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl4.add(w4_1, w4_2, w4_3, w4_4, w4_5, w4_6, w4_7, w4_8, w4_9, w4_10); + d.add(hbl4); + + + + + /* *********************************************** + + EXAMPLE FIVE: + RIGHT ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl5 = new qx.ui.layout.HorizontalBoxLayout; + + hbl5.setTop(408); + hbl5.setLeft(20); + hbl5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl5.setWidth(null); + hbl5.setRight(335); + + hbl5.setSpacing(4); + hbl5.setPadding(8); + + hbl5.setHorizontalChildrenAlign("right"); + hbl5.setReverseChildrenOrder(true); + hbl5.setVerticalChildrenAlign("middle"); + + hbl5.setHeight(80); + + + var w5_1 = new qx.ui.layout.CanvasLayout; + w5_1.setWidth(25); + w5_1.setHeight(25); + w5_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_1.setBackgroundColor(cl_white); + // w5_1.setMaxHeight(40); + + var w5_2 = new qx.ui.layout.CanvasLayout; + w5_2.setWidth(25); + w5_2.setHeight(25); + w5_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_2.setBackgroundColor(cl_blue); + w5_2.setBottom(10); + + var w5_3 = new qx.ui.layout.CanvasLayout; + w5_3.setWidth(25); + w5_3.setHeight("100%"); + w5_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_3.setBackgroundColor(cl_yellow); + + var w5_4 = new qx.ui.layout.CanvasLayout; + w5_4.setWidth(25); + w5_4.setHeight(25); + w5_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_4.setBackgroundColor(cl_green); + + var w5_5 = new qx.ui.layout.CanvasLayout; + w5_5.setWidth("15%"); + // w5_5.setHeight(25); + w5_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_5.setBackgroundColor(cl_orange); + + var w5_6 = new qx.ui.layout.CanvasLayout; + w5_6.setWidth(25); + w5_6.setHeight(25); + w5_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_6.setBackgroundColor(cl_purple); + w5_6.setTop(15); + w5_6.setLeft(-25); + + var w5_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w5_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w5_9 = new qx.ui.layout.CanvasLayout; + w5_9.setWidth(25); + w5_9.setHeight(25); + w5_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_9.setBackgroundColor(cl_aqua); + + var w5_10 = new qx.ui.layout.CanvasLayout; + w5_10.setWidth(25); + w5_10.setHeight(25); + w5_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_10.setBackgroundColor(cl_fuchsia); + + + var hbl5_click = 0; + hbl5.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl5_click) + { + case 0: + this.setHeight(30); + break; + + case 1: + this.setHeight("auto"); + break; + + case 2: + this.setHeight(80); + break; + + case 3: + this.setWidth(200); + break; + + case 4: + this.setWidth(null); + this.setRight(335); + hbl5_click = 0; + return; + }; + + hbl5_click++; + }); + + w5_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w5_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w5_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w5_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w5_5.addEventListener("click", function(e) { + this.getWidth() == "15%" ? this.setWidth("30%") : this.setWidth("15%"); + }); + + w5_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w5_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w5_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w5_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w5_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl5.add(w5_1, w5_2, w5_3, w5_4, w5_5, w5_6, w5_7, w5_8, w5_9, w5_10); + d.add(hbl5); + + + + + + + + + /* *********************************************** + + EXAMPLE SIX: + CENTER ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl6 = new qx.ui.layout.HorizontalBoxLayout; + + hbl6.setTop(498); + hbl6.setLeft(20); + hbl6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl6.setWidth(null); + hbl6.setRight(335); + + hbl6.setSpacing(4); + hbl6.setPadding(8); + + hbl6.setHorizontalChildrenAlign("center"); + hbl6.setReverseChildrenOrder(true); + hbl6.setHeight(80); + + + var w6_1 = new qx.ui.layout.CanvasLayout; + w6_1.setWidth(25); + w6_1.setHeight(25); + w6_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_1.setBackgroundColor(cl_white); + // w6_1.setMaxHeight(40); + + var w6_2 = new qx.ui.layout.CanvasLayout; + w6_2.setWidth(25); + w6_2.setHeight(25); + w6_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_2.setBackgroundColor(cl_blue); + w6_2.setBottom(10); + + var w6_3 = new qx.ui.layout.CanvasLayout; + w6_3.setWidth(25); + w6_3.setHeight("100%"); + w6_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_3.setBackgroundColor(cl_yellow); + + var w6_4 = new qx.ui.layout.CanvasLayout; + w6_4.setWidth(25); + w6_4.setHeight(25); + w6_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_4.setBackgroundColor(cl_green); + + var w6_5 = new qx.ui.layout.CanvasLayout; + w6_5.setWidth("15%"); + // w6_5.setHeight(25); + w6_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_5.setBackgroundColor(cl_orange); + + var w6_6 = new qx.ui.layout.CanvasLayout; + w6_6.setWidth(25); + w6_6.setHeight(25); + w6_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_6.setBackgroundColor(cl_purple); + w6_6.setTop(15); + w6_6.setLeft(-25); + + var w6_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w6_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w6_9 = new qx.ui.layout.CanvasLayout; + w6_9.setWidth(25); + w6_9.setHeight(25); + w6_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_9.setBackgroundColor(cl_aqua); + + var w6_10 = new qx.ui.layout.CanvasLayout; + w6_10.setWidth(25); + w6_10.setHeight(25); + w6_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_10.setBackgroundColor(cl_fuchsia); + + + var hbl6_click = 0; + hbl6.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl6_click) + { + case 0: + this.setHeight(30); + break; + + case 1: + this.setHeight("auto"); + break; + + case 2: + this.setHeight(80); + break; + + case 3: + this.setWidth(200); + break; + + case 4: + this.setWidth(null); + this.setRight(335); + hbl6_click = 0; + return; + }; + + hbl6_click++; + }); + + w6_1.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(65); + this.setHeight(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w6_2.addEventListener("click", function(e) { + this.getMarginRight() == 0 ? this.setMarginRight(10) : this.setMarginRight(0); + }); + + w6_3.addEventListener("click", function(e) { + this.getMinWidth() == -Infinity ? this.setMinWidth(100) : this.setMinWidth(-Infinity); + }); + + w6_4.addEventListener("click", function(e) { + this.getWidth() == 25 ? this.setWidth(50) : this.setWidth(25); + }); + + w6_5.addEventListener("click", function(e) { + this.getWidth() == "15%" ? this.setWidth("30%") : this.setWidth("15%"); + }); + + w6_6.addEventListener("click", function(e) { + this.getLeft() == -25 ? this.setLeft(25) : this.setLeft(-25); + }); + + w6_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w6_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w6_9.addEventListener("click", function(e) + { + if (this.getTop() == null) + { + this.setTop(20); + this.setLeft(-10); + } + else + { + this.setTop(null); + this.setLeft(null); + }; + }); + + w6_10.addEventListener("click", function(e) + { + if (this.getWidth() == 25) + { + this.setWidth(10); + this.setHeight(10); + this.setLeft(-5); + this.setBottom(15); + } + else + { + this.setWidth(25); + this.setHeight(25); + this.setLeft(null); + this.setBottom(null); + }; + }); + + + + hbl6.add(w6_1, w6_2, w6_3, w6_4, w6_5, w6_6, w6_7, w6_8, w6_9, w6_10); + d.add(hbl6); + + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_3.html new file mode 100644 index 0000000000..92579e35a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HorizontalBoxLayout_3.html @@ -0,0 +1,594 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.HorizontalBoxLayout widget.<br/> + <br/> + 1. Simple testing, one static and one flex child<br/> + 2. Two flex children with the same priority<br/> + 3. The same as #2, but the second has the doubled priority compared to the first<br/> + <br/> + + 4. The same as #3, but now the second child has a max-width of 50px<br/> + 5. The same as #4, but now with enabled "advancedFlexAllocation"<br/> + <br/> + + 6. The same as #3, but now the second has a min width of 500px<br/> + 7. The same as #6, but now with enabled "advancedFlexAllocation"<br/> + <br/> + + 8. Three children with the priorities: 1, 2 and 3. The second has a maxWidth of 50px<br/> + 9. The same as #8, but now with enabled "advancedFlexAllocation"<br/> + <br/> + + 10. Three children with the priorities: 1, 2 and 3. Added a few mouse actions.<br/> + 11. Three children with the priorities: 1, a static width of 80px and 3.<br/> + 12. The same as #11, but configured as 'auto' width.<br/> + <br/> + + 13. Test for more complex child widgets. Seems to work without problems. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + /* *********************************************** + + EXAMPLE 1: + + *********************************************** */ + + var te1 = new qx.ui.basic.Label("#1"); + te1.setLocation(20, 48); + d.add(te1); + + var hbl1 = new qx.ui.layout.HorizontalBoxLayout; + hbl1.setLeft(50); + hbl1.setTop(48); + hbl1.setRight(335); + hbl1.setWidth(null); + hbl1.setHeight("auto"); + hbl1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl1.setSpacing(4); + hbl1.setPadding(2); + d.add(hbl1); + + var t1_1 = new qx.ui.basic.Terminator; + t1_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t1_1.setWidth(20); + t1_1.setHeight(10); + t1_1.setBackgroundColor("green"); + hbl1.add(t1_1); + + t1_1.addEventListener("click", function() { + this.setWidth(this.getWidth() == 20 ? 100 : 20); + }); + + var t1_2 = new qx.ui.basic.Terminator; + t1_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t1_2.setWidth("1*"); + t1_2.setHeight(10); + t1_2.setBackgroundColor("blue"); + hbl1.add(t1_2); + + + + + /* *********************************************** + + EXAMPLE 2: + + *********************************************** */ + + var te2 = new qx.ui.basic.Label("#2"); + te2.setLocation(20, 68); + d.add(te2); + + var hbl2 = new qx.ui.layout.HorizontalBoxLayout; + hbl2.setLeft(50); + hbl2.setTop(68); + hbl2.setRight(335); + hbl2.setWidth(null); + hbl2.setHeight("auto"); + hbl2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl2.setSpacing(4); + hbl2.setPadding(2); + d.add(hbl2); + + var t2_1 = new qx.ui.basic.Terminator; + t2_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t2_1.setWidth("1*"); + t2_1.setHeight(10); + t2_1.setBackgroundColor("green"); + hbl2.add(t2_1); + + var t2_2 = new qx.ui.basic.Terminator; + t2_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t2_2.setWidth("1*"); + t2_2.setHeight(10); + t2_2.setBackgroundColor("blue"); + hbl2.add(t2_2); + + + + + + + /* *********************************************** + + EXAMPLE 3: + + *********************************************** */ + + var te3 = new qx.ui.basic.Label("#3"); + te3.setLocation(20, 88); + d.add(te3); + + var hbl3 = new qx.ui.layout.HorizontalBoxLayout; + hbl3.setLeft(50); + hbl3.setTop(88); + hbl3.setRight(335); + hbl3.setWidth(null); + hbl3.setHeight("auto"); + hbl3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl3.setSpacing(4); + hbl3.setPadding(2); + d.add(hbl3); + + var t3_1 = new qx.ui.basic.Terminator; + t3_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t3_1.setWidth("1*"); + t3_1.setHeight(10); + t3_1.setBackgroundColor("green"); + hbl3.add(t3_1); + + var t3_2 = new qx.ui.basic.Terminator; + t3_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t3_2.setWidth("2*"); + t3_2.setHeight(10); + t3_2.setBackgroundColor("blue"); + hbl3.add(t3_2); + + + + + /* *********************************************** + + EXAMPLE 4: + + *********************************************** */ + + var te4 = new qx.ui.basic.Label("#4"); + te4.setLocation(20, 128); + d.add(te4); + + var hbl4 = new qx.ui.layout.HorizontalBoxLayout; + hbl4.setLeft(50); + hbl4.setTop(128); + hbl4.setRight(335); + hbl4.setWidth(null); + hbl4.setHeight("auto"); + hbl4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl4.setSpacing(4); + hbl4.setPadding(2); + d.add(hbl4); + + var t4_1 = new qx.ui.basic.Terminator; + t4_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t4_1.setWidth("1*"); + t4_1.setHeight(10); + t4_1.setBackgroundColor("green"); + hbl4.add(t4_1); + + var t4_2 = new qx.ui.basic.Terminator; + t4_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t4_2.setWidth("2*"); + t4_2.setHeight(10); + t4_2.setMaxWidth(50); + t4_2.setBackgroundColor("blue"); + hbl4.add(t4_2); + + + + + /* *********************************************** + + EXAMPLE 5: + + *********************************************** */ + + var te5 = new qx.ui.basic.Label("#5"); + te5.setLocation(20, 148); + d.add(te5); + + var hbl5 = new qx.ui.layout.HorizontalBoxLayout; + hbl5.setLeft(50); + hbl5.setTop(148); + hbl5.setRight(335); + hbl5.setWidth(null); + hbl5.setHeight("auto"); + hbl5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl5.setSpacing(4); + hbl5.setPadding(2); + hbl5.setUseAdvancedFlexAllocation(true); + d.add(hbl5); + + var t5_1 = new qx.ui.basic.Terminator; + t5_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t5_1.setWidth("1*"); + t5_1.setHeight(10); + t5_1.setBackgroundColor("green"); + hbl5.add(t5_1); + + var t5_2 = new qx.ui.basic.Terminator; + t5_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t5_2.setWidth("2*"); + t5_2.setHeight(10); + t5_2.setMaxWidth(50); + t5_2.setBackgroundColor("blue"); + hbl5.add(t5_2); + + + + + /* *********************************************** + + EXAMPLE 6: + + *********************************************** */ + + var te6 = new qx.ui.basic.Label("#6"); + te6.setLocation(20, 188); + d.add(te6); + + var hbl6 = new qx.ui.layout.HorizontalBoxLayout; + hbl6.setLeft(50); + hbl6.setTop(188); + hbl6.setRight(335); + hbl6.setWidth(null); + hbl6.setHeight("auto"); + hbl6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl6.setSpacing(4); + hbl6.setPadding(2); + d.add(hbl6); + + var t6_1 = new qx.ui.basic.Terminator; + t6_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t6_1.setWidth("1*"); + t6_1.setHeight(10); + t6_1.setBackgroundColor("green"); + hbl6.add(t6_1); + + var t6_2 = new qx.ui.basic.Terminator; + t6_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t6_2.setWidth("2*"); + t6_2.setHeight(10); + t6_2.setMinWidth(500); + t6_2.setBackgroundColor("blue"); + hbl6.add(t6_2); + + + + + /* *********************************************** + + EXAMPLE 7: + + *********************************************** */ + + var te7 = new qx.ui.basic.Label("#7"); + te7.setLocation(20, 208); + d.add(te7); + + var hbl7 = new qx.ui.layout.HorizontalBoxLayout; + hbl7.setLeft(50); + hbl7.setTop(208); + hbl7.setRight(335); + hbl7.setWidth(null); + hbl7.setHeight("auto"); + hbl7.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl7.setSpacing(4); + hbl7.setPadding(2); + hbl7.setUseAdvancedFlexAllocation(true); + d.add(hbl7); + + var t7_1 = new qx.ui.basic.Terminator; + t7_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t7_1.setWidth("1*"); + t7_1.setHeight(10); + t7_1.setBackgroundColor("green"); + hbl7.add(t7_1); + + var t7_2 = new qx.ui.basic.Terminator; + t7_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t7_2.setWidth("2*"); + t7_2.setHeight(10); + t7_2.setMinWidth(500); + t7_2.setBackgroundColor("blue"); + hbl7.add(t7_2); + + + + + /* *********************************************** + + EXAMPLE 8: + + *********************************************** */ + + var te8 = new qx.ui.basic.Label("#8"); + te8.setLocation(20, 248); + d.add(te8); + + var hbl8 = new qx.ui.layout.HorizontalBoxLayout; + hbl8.setLeft(50); + hbl8.setTop(248); + hbl8.setRight(335); + hbl8.setWidth(null); + hbl8.setHeight("auto"); + hbl8.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl8.setSpacing(4); + hbl8.setPadding(2); + d.add(hbl8); + + var t8_1 = new qx.ui.basic.Terminator; + t8_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t8_1.setWidth("1*"); + t8_1.setHeight(10); + t8_1.setBackgroundColor("green"); + hbl8.add(t8_1); + + var t8_2 = new qx.ui.basic.Terminator; + t8_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t8_2.setWidth("2*"); + t8_2.setHeight(10); + t8_2.setBackgroundColor("blue"); + t8_2.setMaxWidth(50); + hbl8.add(t8_2); + + var t8_3 = new qx.ui.basic.Terminator; + t8_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t8_3.setWidth("3*"); + t8_3.setHeight(10); + t8_3.setBackgroundColor("red"); + hbl8.add(t8_3); + + + + /* *********************************************** + + EXAMPLE 9: + + *********************************************** */ + + var te9 = new qx.ui.basic.Label("#9"); + te9.setLocation(20, 268); + d.add(te9); + + var hbl9 = new qx.ui.layout.HorizontalBoxLayout; + hbl9.setLeft(50); + hbl9.setTop(268); + hbl9.setRight(335); + hbl9.setWidth(null); + hbl9.setHeight("auto"); + hbl9.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl9.setSpacing(4); + hbl9.setPadding(2); + hbl9.setUseAdvancedFlexAllocation(true); + d.add(hbl9); + + var t9_1 = new qx.ui.basic.Terminator; + t9_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t9_1.setWidth("1*"); + t9_1.setHeight(10); + t9_1.setBackgroundColor("green"); + hbl9.add(t9_1); + + var t9_2 = new qx.ui.basic.Terminator; + t9_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t9_2.setWidth("2*"); + t9_2.setHeight(10); + t9_2.setBackgroundColor("blue"); + t9_2.setMaxWidth(50); + hbl9.add(t9_2); + + var t9_3 = new qx.ui.basic.Terminator; + t9_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t9_3.setWidth("3*"); + t9_3.setHeight(10); + t9_3.setBackgroundColor("red"); + hbl9.add(t9_3); + + + + + /* *********************************************** + + EXAMPLE 10: + + *********************************************** */ + + var te10 = new qx.ui.basic.Label("#10"); + te10.setLocation(20, 308); + d.add(te10); + + var hbl10 = new qx.ui.layout.HorizontalBoxLayout; + hbl10.setLeft(50); + hbl10.setTop(308); + hbl10.setRight(335); + hbl10.setWidth(null); + hbl10.setHeight("auto"); + hbl10.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl10.setSpacing(4); + hbl10.setPadding(2); + hbl10.setUseAdvancedFlexAllocation(true); + d.add(hbl10); + + var t10_1 = new qx.ui.basic.Terminator; + t10_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t10_1.setWidth("1*"); + t10_1.setHeight(10); + t10_1.setBackgroundColor("green"); + t10_1.addEventListener("click", function(e) { this.setWidth(this.getWidth() == "1*" ? "4*" : "1*"); }); + hbl10.add(t10_1); + + var t10_2 = new qx.ui.basic.Terminator; + t10_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t10_2.setWidth("2*"); + t10_2.setHeight(10); + t10_2.setBackgroundColor("blue"); + t10_2.addEventListener("click", function(e) { this.setWidth(this.getWidth() == "2*" ? "1*" : "2*"); }); + hbl10.add(t10_2); + + var t10_3 = new qx.ui.basic.Terminator; + t10_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t10_3.setWidth("3*"); + t10_3.setHeight(10); + t10_3.setBackgroundColor("red"); + t10_3.addEventListener("click", function(e) { this.setWidth(this.getWidth() == "3*" ? "6*" : "3*"); }); + hbl10.add(t10_3); + + + + + /* *********************************************** + + EXAMPLE 11: + + *********************************************** */ + + var te11 = new qx.ui.basic.Label("#11"); + te11.setLocation(20, 328); + d.add(te11); + + var hbl11 = new qx.ui.layout.HorizontalBoxLayout; + hbl11.setLeft(50); + hbl11.setTop(328); + hbl11.setRight(335); + hbl11.setWidth(null); + hbl11.setHeight("auto"); + hbl11.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl11.setSpacing(4); + hbl11.setPadding(2); + d.add(hbl11); + + var t11_1 = new qx.ui.basic.Terminator; + t11_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t11_1.setWidth("1*"); + t11_1.setHeight(10); + t11_1.setBackgroundColor("green"); + hbl11.add(t11_1); + + var t11_2 = new qx.ui.basic.Terminator; + t11_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t11_2.setWidth(80); + t11_2.setHeight(10); + t11_2.setBackgroundColor("blue"); + hbl11.add(t11_2); + + var t11_3 = new qx.ui.basic.Terminator; + t11_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t11_3.setWidth("3*"); + t11_3.setHeight(10); + t11_3.setBackgroundColor("red"); + hbl11.add(t11_3); + + + + + /* *********************************************** + + EXAMPLE 12: + + *********************************************** */ + + var te12 = new qx.ui.basic.Label("#12"); + te12.setLocation(20, 348); + d.add(te12); + + var hbl12 = new qx.ui.layout.HorizontalBoxLayout; + hbl12.setLeft(50); + hbl12.setTop(348); + hbl12.setHeight("auto"); + hbl12.setWidth("auto"); + hbl12.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl12.setSpacing(4); + hbl12.setPadding(2); + d.add(hbl12); + + var t12_1 = new qx.ui.basic.Terminator; + t12_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t12_1.setWidth("1*"); + t12_1.setHeight(10); + t12_1.setBackgroundColor("green"); + hbl12.add(t12_1); + + var t12_2 = new qx.ui.basic.Terminator; + t12_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t12_2.setWidth(80); + t12_2.setHeight(10); + t12_2.setBackgroundColor("blue"); + hbl12.add(t12_2); + + var t12_3 = new qx.ui.basic.Terminator; + t12_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t12_3.setWidth("3*"); + t12_3.setHeight(10); + t12_3.setBackgroundColor("red"); + hbl12.add(t12_3); + + + + /* *********************************************** + + EXAMPLE 13: + + *********************************************** */ + + var te13 = new qx.ui.basic.Label("#13"); + te13.setLocation(20, 388); + d.add(te13); + + var hbl13 = new qx.ui.layout.HorizontalBoxLayout; + hbl13.setLeft(50); + hbl13.setTop(388); + hbl13.setRight(335); + hbl13.setWidth(null); + hbl13.setHeight("auto"); + hbl13.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl13.setSpacing(4); + hbl13.setPadding(2); + d.add(hbl13); + + var t13_1 = new qx.ui.basic.Terminator; + t13_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t13_1.setWidth(200); + t13_1.setHeight(10); + t13_1.setBackgroundColor("green"); + hbl13.add(t13_1); + + var t13_2 = new qx.ui.form.TextField("http://qooxdoo.org"); + t13_2.setWidth("1*"); + t13_2.setStyleProperty("fontSize", "16px"); + hbl13.add(t13_2); + + var t13_3 = new qx.ui.form.Button(null, "icon/16/actions/dialog-ok.png"); + hbl13.add(t13_3); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HtmlTable_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HtmlTable_1.html new file mode 100644 index 0000000000..ff20fa94d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HtmlTable_1.html @@ -0,0 +1,142 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <style type="text/css">*{ font-size: 10px; font-family: Verdana }</style> + + <div id="demoDescription"> + <p>Test table.</p> + </div> + + <textarea id="info" style="position:absolute; top:48px; left:20px; width:600px;height:50px;border:1px solid black"></textarea> + <div id="view" style="position:absolute;top:148px;left:20px;width:400px;height:500px;border:1px solid black"></div> + <div id="scroller" style="position: absolute; top:148px; left:420px;height:500px;width:24px;border:1px solid black;overflow:scroll"><div id="scrollerContent" style="width:1px;height:5000px"></div></div> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var updateCount = 0; + + var tableHeight = 512; + + var entryCount = 1000; + + var rowHeight = 16; + var rowCount = Math.floor(tableHeight / rowHeight); + + var view = document.getElementById("view"); + var info = document.getElementById("info"); + var scroller = document.getElementById("scroller"); + var scrollerContent = document.getElementById("scrollerContent"); + + + + view.style.height = scroller.style.height = tableHeight + "px"; + scrollerContent.style.height = Math.round(entryCount / rowCount * tableHeight) + "px"; + + + + + var data = []; + + for (var i=0; i<1000; i++) { + data.push({ col1 : "hello" + i, col2 : "world" + i, col3 : "foo" + i, col4 : "bar" + i, col5 : "baz" + i }); + }; + + var cache = []; + + var undef = "undefined"; + + var HTML = + { + table_start : "<table><tbody>", + table_end : "</tbody></table>", + + tr_start : "<tr>", + tr_start_open : "<tr ", + tr_start_close : ">", + tr_end : "<tr>", + + td_start : "<td>", + td_end : "</td>" + }; + + function arrayAppend(arr, a) { + Array.prototype.push.apply(arr, a); + }; + + function getCellHtml(cdata) + { + var html = [ HTML.td_start, cdata, HTML.td_end ]; + + return html; + }; + + function getRowHtml(rdata, nr) + { + if (typeof cache[nr] != undef) { + return cache[nr]; + }; + + var html = []; + html.push(HTML.tr_start_open); + + if (nr % 2 == 0) + { + html.push("style='background-color:#fff'"); + }; + + html.push(HTML.tr_start_close); + + for (var row in rdata) { + arrayAppend(html, getCellHtml(rdata[row])); + }; + + html.push(HTML.tr_stop); + + cache[nr] = html; + + return html; + }; + + function buildTableHtml(start, len) + { + var ttstart = (new Date).valueOf(); + + var html = []; + + html.push(HTML.table_start); + + for (var i=start, s=start+len; i<s; i++) { + arrayAppend(html, getRowHtml(data[i], i)); + }; + + html.push(HTML.table_end); + view.innerHTML = html.join(""); + + updateCount++; + + var ttend = (new Date).valueOf(); + info.value = "Update: " + updateCount + "\nRows: " + start + " - " + (start+len) + "\n" + (ttend-ttstart) + "ms\n"; + }; + + function doscroll() { + buildTableHtml(Math.floor(scroller.scrollTop/rowHeight), rowCount); + }; + + qx.html.EventRegistration.addEventListener(scroller, "scroll", doscroll); + doscroll(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HtmlTable_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HtmlTable_2.html new file mode 100644 index 0000000000..2a075005b1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/HtmlTable_2.html @@ -0,0 +1,140 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test table with fixed column widths: 100, 50, 10, 30 and 20 pixel.</p> + </div> + + <textarea id="info" style="position:absolute; top:48px; left:20px; width:600px;height:50px;border:1px solid black"></textarea> + <div id="view" style="position:absolute;top:148px;left:20px;width:400px;height:500px;border:1px solid black"></div> + <div id="scroller" style="position: absolute; top:148px; left:420px;height:500px;width:24px;border:1px solid black;overflow:scroll"><div id="scrollerContent" style="width:1px;height:5000px"></div></div> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var updateCount = 0; + + var tableHeight = 512; + + var entryCount = 1000; + + var rowHeight = 16; + var rowCount = Math.floor(tableHeight / rowHeight); + + var view = document.getElementById("view"); + var info = document.getElementById("info"); + var scroller = document.getElementById("scroller"); + var scrollerContent = document.getElementById("scrollerContent"); + + + + view.style.height = scroller.style.height = tableHeight + "px"; + scrollerContent.style.height = Math.round(entryCount / rowCount * tableHeight) + "px"; + + + + + var data = []; + + for (var i=0; i<1000; i++) { + data.push({ col1 : "hello" + i, col2 : "world" + i, col3 : "foo" + i, col4 : "bar" + i, col5 : "baz" + i }); + }; + + var cache = []; + + var undef = "undefined"; + + var HTML = + { + table_start : '<table cellspacing="0" cellpadding="0" style="table-layout:fixed;width:210px"><colgroup><col width="100"/><col width="50"/><col width="10"/><col width="30"/><col width="20"/></colgroup><tbody>', + table_end : "</tbody></table>", + + tr_start : "<tr>", + tr_start_open : "<tr ", + tr_start_close : ">", + tr_end : "<tr>", + + td_start : '<td style="overflow:hidden;height:15px;border-right:1px solid red;border-bottom:1px solid red;padding-left:2px;padding-right:2px">', + td_end : "</td>" + }; + + function arrayAppend(arr, a) { + Array.prototype.push.apply(arr, a); + }; + + function getCellHtml(cdata) + { + var html = [ HTML.td_start, cdata, HTML.td_end ]; + + return html; + }; + + function getRowHtml(rdata, nr) + { + if (typeof cache[nr] != undef) { + return cache[nr]; + }; + + var html = []; + html.push(HTML.tr_start_open); + + if (nr % 2 == 0) + { + html.push("style='background-color:#fff'"); + }; + + html.push(HTML.tr_start_close); + + for (var row in rdata) { + arrayAppend(html, getCellHtml(rdata[row])); + }; + + html.push(HTML.tr_stop); + + cache[nr] = html; + + return html; + }; + + function buildTableHtml(start, len) + { + var ttstart = (new Date).valueOf(); + + var html = []; + + html.push(HTML.table_start); + + for (var i=start, s=start+len; i<s; i++) { + arrayAppend(html, getRowHtml(data[i], i)); + }; + + html.push(HTML.table_end); + view.innerHTML = html.join(""); + + updateCount++; + + var ttend = (new Date).valueOf(); + info.value = "Update: " + updateCount + "\nRows: " + start + " - " + (start+len) + "\n" + (ttend-ttstart) + "ms\n"; + }; + + function doscroll() { + buildTableHtml(Math.floor(scroller.scrollTop/rowHeight), rowCount); + }; + + qx.html.EventRegistration.addEventListener(scroller, "scroll", doscroll); + doscroll(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/IconHtml_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/IconHtml_1.html new file mode 100644 index 0000000000..186a306ea3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/IconHtml_1.html @@ -0,0 +1,29 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.embed.IconHtmlEmbed.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var l1 = new qx.ui.embed.IconHtmlEmbed("Hello World", "icon/32/apps/office-organizer.png", 32, 32); + + l1.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(l1); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Image_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Image_1.html new file mode 100644 index 0000000000..33b0c2d188 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Image_1.html @@ -0,0 +1,114 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>This is a test for the qx.ui.basic.Image constructor. It supports automatic preloading through qx.io.image.Preloader, with error and load + QxEvents which will be fired, and cross-browser PNG with extended alpha channels.</p> + + <p>PNG file in HTML (in Internet Explorer this should not be transparent):</p> + <img src="../../../../../framework/source/resource/icon/CrystalClear/48/categories/applications-games.png" width="48" height="48"/> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var i1 = new qx.ui.basic.Image("icon/64/apps/accessories-archiver.png", 48, 48); + with(i1) + { + setTop(48); + setLeft(20); + }; + + d.add(i1); + + + + var i2 = new qx.ui.basic.Image("icon/64/apps/accessories-archiver.png", 48, 48); + with(i2) + { + setTop(48); + setLeft(100); + }; + + d.add(i2); + + + + + var i3 = new qx.ui.basic.Image("icon/64/apps/accessories-archiver.png", 96, 96); + with(i3) + { + setTop(120); + setLeft(60); + setResizeToInner(true); + }; + + /* + i3.addEventListener("load", function() { + new QxDebug("Bigger Symbol", "Preferred (Original) Size: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + */ + + d.add(i3); + + + + + var i4 = new qx.ui.basic.Image("icon/64/apps/accessories-archiver.png", 24, 24); + with(i4) + { + setTop(120); + setLeft(20); + setResizeToInner(true); + }; + + /* + i4.addEventListener("load", function() { + new QxDebug("Smaller Symbol", "Preferred (Original) Size: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + */ + + d.add(i4); + + + + + var i5 = new qx.ui.basic.Image("http://www.google.com/images/google_sm.gif"); + with(i5) + { + setTop(300); + setLeft(20); + }; + + /* + i5.addEventListener("load", function() { + new QxDebug("Google Image", "Preferred (Original) Size: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + */ + + d.add(i5); + + + + + + // Icon Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 300, 48); + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Image_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Image_2.html new file mode 100644 index 0000000000..97752e49ec --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Image_2.html @@ -0,0 +1,150 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Some advanced tests for qx.ui.basic.Image. Click on the fourth and fivth image to test the reflow possibilities. + The debug log gives you information of the preferred dimensions. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var i1 = new qx.ui.basic.Image("icon/64/places/folder.png"); + + i1.setLeft(20); + i1.setTop(48); + + i1.addEventListener("load", function() { + this.debug("Image 1: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + + + + var i2 = new qx.ui.basic.Image("icon/64/places/folder.png"); + + i2.setLeft(120); + i2.setTop(48); + i2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + i2.setPadding(2, 4); + + i2.addEventListener("load", function() { + this.debug("Image 2: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + + + + var i3 = new qx.ui.basic.Image("icon/64/places/folder.png"); + + i3.setLeft(220); + i3.setTop(48); + i3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + i3.setPadding(8); + i3.setOpacity(0.5); + + i3.addEventListener("load", function() { + this.debug("Image 3: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + + + + var i4 = new qx.ui.basic.Image("icon/64/places/folder.png"); + + i4.setLeft(320); + i4.setTop(48); + i4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + i4.setPadding(2, 4); + + i4.addEventListener("load", function() { + this.debug("Image 4: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + + i4.addEventListener("click", function() { + this.setSource(this.getSource() == "icon/64/places/folder.png" ? "icon/32/actions/system-run.png" : "icon/64/places/folder.png"); + }); + + + + + + var i5w1 = new qx.ui.layout.CanvasLayout; + i5w1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + i5w1.setPadding(8); + i5w1.setLeft(420); + i5w1.setTop(48); + i5w1.setWidth("auto"); + i5w1.setHeight("auto"); + + var i5w2 = new qx.ui.layout.CanvasLayout; + i5w2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + i5w2.setPadding(8); + i5w2.setLeft(0); + i5w2.setTop(0); + i5w2.setWidth("auto"); + i5w2.setHeight("auto"); + + var i5w3 = new qx.ui.layout.CanvasLayout; + i5w3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + i5w3.setPadding(8); + i5w3.setLeft(0); + i5w3.setTop(0); + i5w3.setWidth("auto"); + i5w3.setHeight("auto"); + + var i5 = new qx.ui.basic.Image("icon/64/places/folder.png"); + + i5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + i5.setPadding(2, 4); + + i5.addEventListener("load", function() { + this.debug("Image 4: " + this.getPreferredBoxWidth() + "x" + this.getPreferredBoxHeight()); + }); + + i5.addEventListener("click", function() { + this.setSource(this.getSource() == "icon/64/places/folder.png" ? "icon/32/actions/system-run.png" : "icon/64/places/folder.png"); + }); + + i5w1.add(i5w2); + i5w2.add(i5w3); + i5w3.add(i5); + d.add(i5w1); + + + + var i6 = new qx.ui.basic.Image("icon/128/apps/graphics-image-viewer.png"); + i6.setLeft(20); + i6.setRight(400); + i6.setTop(200); + i6.setHeight(150); + i6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + i6.setWidth(null); + + var i7 = new qx.ui.basic.Image("icon/128/apps/graphics-image-viewer.png"); + i7.setLeft(20); + i7.setRight(400); + i7.setTop(400); + i7.setHeight(150); + i7.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + i7.setResizeToInner(true); + i7.setWidth(null); + + + + d.add(i1, i2, i3, i4, i6, i7); + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Keyhandler_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Keyhandler_1.html new file mode 100644 index 0000000000..2860d0749b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Keyhandler_1.html @@ -0,0 +1,117 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + + <style type="text/css"> + #keylogger { + position: absolute; + width: 500px; + height: 500px; + left: 30px; + top: 40px; + color: black; + background-color: #EEE; + padding: 5px; + border: 1px inset; + overflow: scroll; + /* display:none; */ + } + + table { + width: 100%; + } + + td { + text-align: center; + } + </style> + +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Keyhandler Test</p> + <p>Displays qoooxdoo's normalized key events.</p> + </div> + + + <div id="keylogger"> + </div> + + <script type="text/javascript"> + + qx.core.Init.getInstance().defineMain(function() + { + var tableHead = "<table><tr><th>Event</th><th>key identifier</th><th>key code</th><th>char code</th><th>Shift</th><th>Ctrl</th><th>Alt</th></tr>"; + var keyEvents = []; + var maxLogSize = 50; + var logDiv = document.getElementById("keylogger"); + + function initializeLogger() { + logDiv.innerHTML = tableHead + "</table>"; + keyEvents = []; + } + + function logKeyEvent(keyEvent) { + var eventCopy = { + type: keyEvent.getType(), + iden: keyEvent.getKeyIdentifier(), + keyCode: keyEvent.getKeyCode(), + charCode: keyEvent.getCharCode(), + shift: keyEvent.getDomEvent().shiftKey, + alt: keyEvent.getDomEvent().altKey, + ctrl: keyEvent.getDomEvent().ctrlKey + } + keyEvents.unshift(eventCopy); + keyEvents = keyEvents.slice(0, maxLogSize); + str = [tableHead]; + for (var i=0; i<keyEvents.length; i++) { + var e = keyEvents[i]; + str.push("<tr><td>"); + str.push(e.type); + str.push("</td><td>"); + str.push(e.iden); + str.push("</td><td>"); + str.push(e.keyCode); + str.push("</td><td>"); + str.push(e.charCode); + str.push("</td><td>"); + str.push(e.shift); + str.push("</td><td>"); + str.push(e.ctrl); + str.push("</td><td>"); + str.push(e.alt); + str.push("</td></tr>"); + } + str.push("</table>"); + logDiv.innerHTML = str.join(""); + logDiv.scrollTop = 0; + } + + initializeLogger(); + + var d = qx.ui.core.ClientDocument.getInstance(); + d.addEventListener("keydown", logKeyEvent); + d.addEventListener("keypress", logKeyEvent); + d.addEventListener("keyinput", logKeyEvent); + d.addEventListener("keyup", logKeyEvent); + + var button = new qx.ui.form.Button("clear"); + button.set({ + left: 550, + top: 40 + }); + button.addEventListener("execute", initializeLogger); + button.addToDocument(); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_1.html new file mode 100644 index 0000000000..f0b8492caf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_1.html @@ -0,0 +1,172 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Some tests for qx.ui.basic.Label. Click on the third and fifth button like widget to test the reflow possibilities. + The debug log gives you information of the preferred dimensions. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.basic.Label("Hello qooxdoo!"); + + c1.setLeft(20); + c1.setTop(48); + c1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c1.setPadding(2, 4); + + + + + var c2 = new qx.ui.basic.Label("<h1>Welcome to the qooxdoo universe</h1><p>Enjoy the new era of web interface development.</p>"); + + c2.setLeft(20); + c2.setTop(100); + c2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c2.setPadding(8); + + + + + var c3 = new qx.ui.basic.Label("Delete temporary data", null, null, false); + + c3.setLeft(20); + c3.setTop(200); + c3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c3.setPadding(4, 6); + c3.setBackgroundColor(new qx.renderer.color.Color("white")); + + c3.addEventListener("click", function() { + this.getHtml() == "Delete temporary data" ? this.setHtml("Thank you") : this.setHtml("Delete temporary data"); + }); + + + + + var c4 = new qx.ui.basic.Label("Hello qooxdoo!"); + + c4.setLeft(20); + c4.setTop(250); + c4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c4.setPadding(2, 4); + c4.setStyleProperty("fontSize", "16px"); + c4.setStyleProperty("fontWeight", "bold"); + c4.setStyleProperty("fontStyle", "italic"); + c4.setStyleProperty("textDecoration", "underline"); + c4.setStyleProperty("textTransform", "uppercase"); + c4.setFontPropertiesProfile("extended"); + + + + + + var c5 = new qx.ui.basic.Label("Delete temporary data", null, null, false); + + c5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c5.setPadding(4, 6); + c5.setBackgroundColor(new qx.renderer.color.Color("white")); + + c5.addEventListener("click", function() { + this.getHtml() == "Delete temporary data" ? this.setHtml("Thank you<br/>All your personal data was just deleted.<br/>Have Fun!") : this.setHtml("Delete temporary data"); + }); + + + var c5w = new qx.ui.layout.CanvasLayout; + c5w.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c5w.setPadding(8); + c5w.setLeft(20); + c5w.setTop(350); + c5w.setWidth("auto"); + c5w.setHeight("auto"); + + c5w.add(c5); + d.add(c5w); + + + + + var c6 = new qx.ui.basic.Label("This is a long label", "h"); + + c6.setTop(450); + c6.setLeft(20); + c6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + + var c7 = new qx.ui.basic.Label("This is a long label with long-words and more text", "l", null, false); + + c7.setTop(490); + c7.setLeft(20); + c7.setPadding(4); + c7.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c7.setBackgroundColor("white"); + + c7.addEventListener("click", function(e) + { + switch(this.getWidth()) + { + case 50: + this.setWidth(100); + break; + + case 100: + this.setWidth(150); + break; + + case 150: + this.setWidth(200); + break; + + case 200: + this.setWidth("auto"); + break; + + case "auto": + this.setWidth(50); + break; + }; + }); + + + var parent8 = new qx.ui.layout.VerticalBoxLayout(); + parent8.set({ top:48, left:500, width:150, height:150, spacing:5, + border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + parent8.setPadding(5); + parent8.addEventListener("click", function() { + this.setWidth((this.getWidth() == 150) ? 200 : 150); + }); + + var clickHint = new qx.ui.basic.Label("Click me"); + clickHint.set({ width:"100%", height:"auto", wrap:true, + border:qx.renderer.border.BorderPresets.getInstance().thinOutset }); + parent8.add(clickHint); + + var wrapLabel1 = new qx.ui.basic.Label("This is a label having a auto-height that needs wrapping"); + wrapLabel1.set({ width:"100%", height:"auto", wrap:true, + border:qx.renderer.border.BorderPresets.getInstance().thinOutset }); + parent8.add(wrapLabel1); + + var wrapLabel2 = new qx.ui.basic.Label("This is a label having a auto-height that needs wrapping"); + wrapLabel2.set({ width:"100%", height:"auto", wrap:true, + border:qx.renderer.border.BorderPresets.getInstance().thinOutset }); + parent8.add(wrapLabel2); + + + d.add(c1, c2, c3, c4, c5w, c6, c7, parent8); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_2.html new file mode 100644 index 0000000000..bfc2fccbe2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_2.html @@ -0,0 +1,40 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + qx.ui.basic.Label Stress Test + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c; + + for (var i=0; i<10; i++) + { + for (var j=0; j<20; j++) + { + c = new qx.ui.basic.Label("Test " + i + "|" + j); + + c.setLeft(20+(i*60)); + c.setTop(48+(j*30)); + + d.add(c); + }; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_3.html new file mode 100644 index 0000000000..33156a1fcf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_3.html @@ -0,0 +1,177 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some tests for qx.ui.basic.Label. Click on the third and fifth button like widget to test the reflow possibilities. + The debug log gives you information of the preferred dimensions.</p> + <p>Tests for qx.renderer.font.Font added</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.basic.Label("Hello qooxdoo!"); + + c1.setLeft(20); + c1.setTop(48); + c1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c1.setPadding(2, 4); + + c1.addEventListener("mouseover", function(e) { + this.setFont("20px bold"); + }); + + c1.addEventListener("mouseout", function(e) { + this.setFont(null); + }); + + + + var c2 = new qx.ui.basic.Label("<h1>Welcome to the qooxdoo universe</h1><p>Enjoy the new era of web interface development.</p>"); + + c2.setLeft(20); + c2.setTop(100); + c2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c2.setPadding(8); + + + + + var c3 = new qx.ui.basic.Label("Delete temporary data", null, null, false); + + c3.setLeft(20); + c3.setTop(200); + c3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c3.setPadding(4, 6); + c3.setBackgroundColor(new qx.renderer.color.Color("white")); + + c3.addEventListener("click", function() + { + if (this.getHtml() == "Delete temporary data") + { + this.setHtml("Thank you"); + this.setColor("red"); + this.setFont("bold"); + } + else + { + this.setHtml("Delete temporary data"); + this.setColor(null); + this.setFont(null); + }; + }); + + + + + /* + var c4f = new qx.renderer.font.Font(16, "Times New Roman"); + c4f.setBold(true); + c4f.setItalic(true); + c4f.setUnderline(true); + */ + + var c4 = new qx.ui.basic.Label("Hello qooxdoo!"); + + c4.setLeft(20); + c4.setTop(250); + c4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c4.setPadding(2, 4); + // c4.setFont(c4f); + + // implicit usage of qx.renderer.font.FontCache + c4.setFont("16px Times New Roman bold italic underline"); + + + + + + var c5 = new qx.ui.basic.Label("Delete temporary data", null, null, false); + + c5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c5.setPadding(4, 6); + c5.setBackgroundColor(new qx.renderer.color.Color("white")); + + // re-use instance from above + // c5.setFont("16px Times New Roman bold italic underline"); + + // this is also possible and will be automatically converted to a single space seperated string + c5.setFont(["16px", "Times New Roman", "bold", "italic", "underline"]); + + c5.addEventListener("click", function() { + this.getHtml() == "Delete temporary data" ? this.setHtml("Thank you<br/>All your personal data was just deleted.<br/>Have Fun!") : this.setHtml("Delete temporary data"); + }); + + + var c5w = new qx.ui.layout.CanvasLayout; + c5w.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c5w.setPadding(8); + c5w.setLeft(20); + c5w.setTop(350); + c5w.setWidth("auto"); + c5w.setHeight("auto"); + + c5w.add(c5); + d.add(c5w); + + + + + var c6 = new qx.ui.basic.Label("This is a long label", "h"); + + c6.setTop(450); + c6.setLeft(20); + c6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + + + var c7 = new qx.ui.basic.Label("This is a long label with long-words and more text", "l", null, false); + + c7.setTop(490); + c7.setLeft(20); + c7.setPadding(4); + c7.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c7.setBackgroundColor("white"); + + c7.addEventListener("click", function(e) + { + switch(this.getWidth()) + { + case 50: + this.setWidth(100); + break; + + case 100: + this.setWidth(150); + break; + + case 150: + this.setWidth(200); + break; + + case 200: + this.setWidth("auto"); + break; + + case "auto": + this.setWidth(50); + break; + }; + }); + + d.add(c1, c2, c3, c4, c5w, c6, c7); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_4.html new file mode 100644 index 0000000000..30890ee68e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Label_4.html @@ -0,0 +1,101 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing mnemonic support.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.ui.basic.Label("Hello qooxdoo!"); + + c1.setLeft(20); + c1.setTop(48); + c1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c1.setPadding(2, 4); + c1.setMnemonic("q"); + + d.add(c1); + + + + var c2 = new qx.ui.basic.Label("A qx.ui.basic.Label with some more text", "T"); + + c2.setLeft(20); + c2.setTop(98); + c2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c2.setPadding(2, 4); + + d.add(c2); + + + + + var c3 = new qx.ui.basic.Label("A qx.ui.basic.Label with some more text", "C"); + + c3.setLeft(20); + c3.setTop(148); + c3.setWidth(80); + c3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c3.setPadding(2, 4); + + d.add(c3); + + + + var c4 = new qx.ui.basic.Label("Well done guy", "Q"); + + c4.setLeft(20); + c4.setTop(198); + c4.setWidth(70); + c4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c4.setPadding(2, 4); + + d.add(c4); + + + + var c5 = new qx.ui.basic.Label("Well done guy", "Q"); + + c5.setLeft(20); + c5.setTop(248); + c5.setWidth("10%"); + c5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + c5.setPadding(2, 4); + + d.add(c5); + + + + + + var a1 = new qx.ui.basic.Atom("Hello World", "icon/48/apps/graphics-snapshot.png") + + a1.setLocation(250, 48); + a1.setWidth(100); + a1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + a1.setHorizontalChildrenAlign("left"); + + a1.getLabelObject().setMnemonic("H"); + a1.getLabelObject().setWidth(50); + + d.add(a1); + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Leak_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Leak_1.html new file mode 100644 index 0000000000..e8e487ec8e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Leak_1.html @@ -0,0 +1,71 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Leak-Test</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + // Does not leak + // ***** + + // var i1 = new qx.io.image.Preloader(qx.manager.object.ImageManager.buildUri("icon/48/hardwareinfo.png")); + + + // Leaks: +2MB + // ***** + + var w1 = new qx.ui.basic.Terminator; + qx.ui.core.ClientDocument.getInstance().add(w1); + + + + + + // Does not leak + // ***** + /* + var w1 = new qx.ui.basic.Terminator; + w1.setTop(48); + w1.setLeft(20); + qx.ui.core.ClientDocument.getInstance().add(w1); + */ + + + // Leaks +2MB + // ***** + /* + var i1 = new qx.ui.basic.Image("icon/48/hardwareinfo.png"); + with(i1) + { + setTop(48); + setLeft(20); + }; + + qx.ui.core.ClientDocument.getInstance().add(i1); + */ + + + + + + + //var t1 = new QxTarget; + + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Link_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Link_1.html new file mode 100644 index 0000000000..be852fb8b8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Link_1.html @@ -0,0 +1,29 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing link widget.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var l1 = new qx.ui.embed.LinkEmbed("Open Google", "http://www.google.com"); + + l1.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(l1); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_1.html new file mode 100644 index 0000000000..1552c7b02d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_1.html @@ -0,0 +1,57 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : 100, type : "text" }, + size: { label : "Size", width : 50, type : "text", align : "right" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(qx.ui.core.ClientDocument.getInstance(), 20, 448); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_10.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_10.html new file mode 100644 index 0000000000..110f1028e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_10.html @@ -0,0 +1,86 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView in a qx.ui.window.Window.</p> + <p>I am sorry, but this seems not to be fixable with the current layouter stuff in qooxdoo.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var w = new qx.ui.window.Window("ListView"); + + w.setWidth(400); + w.setHeight(250); + w.setLocation(50, 50); + + qx.ui.core.ClientDocument.getInstance().add(w); + + + /* + var cont = new qx.ui.layout.CanvasLayout; + + cont.setEdge(0); + cont.setBackgroundColor("white"); + + w.add(cont); + */ + + + + + + + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : 100, type : "text" }, + size: { label : "Size", width : 50, type : "text" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBackgroundColor("white"); + lv.setEdge(0); + lv.setWidth(null); + lv.setHeight(null); + + w.add(lv); + //cont.add(lv); + + + + + w.open(); + + + + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(qx.ui.core.ClientDocument.getInstance(), 20, 448); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_2.html new file mode 100644 index 0000000000..18583c37df --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_2.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells with an additional link.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }, open : { uri : "http://www.google.com/search?q=" + i, html : "Open " + i }}); + }; + + var lc = + { + name : { label : "Name", width : 100, type : "text" }, + size: { label : "Size", width : 50, type : "text", align : "right" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" }, + open : { label : "", width : 100, type : "link" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_3.html new file mode 100644 index 0000000000..8a504135a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_3.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>Now with icons inside the header cells.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", icon : "icon/16/categories/applications.png", width : 100, type : "text" }, + size: { label : "Size", icon : "icon/16/devices/media-floppy.png", width : 50, type : "text", align : "right" }, + type : { label : "Type", icon : "icon/16/apps/accessories-notes.png", width : 80, type : "text" }, + modified : { label : "Last Modified", icon : "icon/16/apps/preferences.png", width : 150, type : "text" }, + rights : { label : "Rights", icon : "icon/16/apps/system-users.png", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_4.html new file mode 100644 index 0000000000..1b20de033b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_4.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>This qx.ui.listview.ListView will be resized with the window.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : 100, type : "text" }, + size: { label : "Size", width : 50, type : "text", align : "right" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setLocation(20, 48); + lv.setRight(335); + lv.setBottom(48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_5.html new file mode 100644 index 0000000000..df9bcb0644 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_5.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>This qx.ui.listview.ListView will be resized with the window.</p> + <p>Using percents for columns.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : "30%", type : "text" }, + size: { label : "Size", width : "10%", type : "text", align : "right" }, + type : { label : "Type", width : "15%", type : "text" }, + modified : { label : "Last Modified", width : "20%", type : "text" }, + rights : { label : "Rights", width: "15%", type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setLocation(20, 48); + lv.setRight(335); + lv.setBottom(48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_6.html new file mode 100644 index 0000000000..1e917e584c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_6.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>Supports minimum and maximum width of columns.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc = + { + name : { label : "Name", width : 100, minWidth : "auto", type : "text" }, + size: { label : "Size", width : 50, minWidth : 50, type : "text" }, + type : { label : "Type", width : 80, minWidth : 80, type : "text" }, + modified : { label : "Last Modified", width : 100, minWidth : 100, maxWidth : 100, type : "text" }, + rights : { label : "Rights", width: 80, minWidth : 50, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_7.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_7.html new file mode 100644 index 0000000000..4532582a9c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_7.html @@ -0,0 +1,114 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>Added some buttons to fill/clear the list dynamically.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + var lc = + { + name : { label : "Name", width : 100, type : "text", sortable : true, sortProp : "text" }, + size: { label : "Size", width : 50, type : "text", sortable : true, sortProp : "text", sortMethod : qx.util.Compare.byIntegerString }, + type : { label : "Type", width : 80, type : "text", sortable : true, sortProp : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lv = new qx.ui.listview.ListView(ld, lc); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(500); + lv.setHeight(350); + lv.setLocation(20, 48); + + qx.ui.core.ClientDocument.getInstance().add(lv); + + function add(nu) + { + nu = nu||10; + + for (var i=0, t; i<nu; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + ld.length }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + lv.updateSort(); + lv.update(); + }; + + function remove(nu) + { + nu = Math.min(ld.length, nu || 10); + + ld.splice(ld.length-nu, nu); + + lv.updateSort(); + lv.update(); + }; + + function clear() + { + ld.removeAll(); + lv.update(); + }; + + var btnAdd10 = new qx.ui.form.Button("Add 10", "icon/16/actions/dialog-ok.png"); + var btnAdd50 = new qx.ui.form.Button("Add 50", "icon/16/actions/dialog-ok.png"); + var btnAdd100 = new qx.ui.form.Button("Add 100", "icon/16/actions/dialog-ok.png"); + var btnAdd1000 = new qx.ui.form.Button("Add 1000", "icon/16/actions/dialog-ok.png"); + + var btnRemove10 = new qx.ui.form.Button("Remove 10", "icon/16/actions/dialog-ok.png"); + var btnRemove50 = new qx.ui.form.Button("Remove 50", "icon/16/actions/dialog-ok.png"); + var btnRemove100 = new qx.ui.form.Button("Remove 100", "icon/16/actions/dialog-ok.png"); + var btnRemove1000 = new qx.ui.form.Button("Remove 1000", "icon/16/actions/dialog-ok.png"); + + var btnClear = new qx.ui.form.Button("Clear", "icon/16/actions/dialog-ok.png"); + + btnAdd10.setLocation(550, 48); + btnAdd50.setLocation(550, 78); + btnAdd100.setLocation(550, 108); + btnAdd1000.setLocation(550, 138); + + btnRemove10.setLocation(550, 188); + btnRemove50.setLocation(550, 218); + btnRemove100.setLocation(550, 248); + btnRemove1000.setLocation(550, 278); + + btnClear.setLocation(550, 328); + + btnAdd10.addEventListener("execute", function(e) { add(10); }); + btnAdd50.addEventListener("execute", function(e) { add(50); }); + btnAdd100.addEventListener("execute", function(e) { add(100); }); + btnAdd1000.addEventListener("execute", function(e) { add(1000); }); + + btnRemove10.addEventListener("execute", function(e) { remove(10); }); + btnRemove50.addEventListener("execute", function(e) { remove(50); }); + btnRemove100.addEventListener("execute", function(e) { remove(100); }); + btnRemove1000.addEventListener("execute", function(e) { remove(1000); }); + + btnClear.addEventListener("execute", function(e) { clear(); }); + + qx.ui.core.ClientDocument.getInstance().add(btnAdd10, btnAdd50, btnAdd100, btnAdd1000, btnRemove10, btnRemove50, btnRemove100, btnRemove1000, btnClear); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_8.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_8.html new file mode 100644 index 0000000000..8ed5eb8eba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_8.html @@ -0,0 +1,121 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>And with drag and drop between the two qx.ui.listview.ListViews.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc1 = + { + name : { label : "Name", width : 100, type : "text", sortable : true, sortProp : "text" }, + size: { label : "Size", width : 50, type : "text", sortable : true, sortProp : "text", sortMethod : qx.util.Compare.byIntegerString }, + type : { label : "Type", width : 80, type : "text", sortable : true, sortProp : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lc2 = + { + name : { label : "Name", width : 100, type : "text", sortable : true, sortProp : "text" }, + size: { label : "Size", width : 50, type : "text", sortable : true, sortProp : "text", sortMethod : qx.util.Compare.byIntegerString }, + type : { label : "Type", width : 80, type : "text", sortable : true, sortProp : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + + function handleDrag(e) + { + e.addData("qx.ui.listview.ListViewEntries", qx.lang.Array.copy(e.getCurrentTarget().getManager().getSelectedItems())); + e.addAction("move"); + e.startDrag(); + }; + + function handleDrop(e) + { + var type = e.getDropDataTypes()[0]; + var data = e.getData(type); + + switch(e.getAction()) + { + case "move": + sourceView.getPane().getManager().setSelectedItems([]); + sourceView.getPane().getManager().setAnchorItem(null); + sourceView.getPane().getManager().setLeadItem(null); + + for (var i=0, l=data.length; i<l; i++) + { + qx.lang.Array.remove(sourceView.getData(), data[i]); + destView.getData().push(data[i]); + }; + + destView.getPane().getManager().setSelectedItems(data); + + sourceView.updateSort(); + destView.updateSort(); + + sourceView.update(); + destView.update(); + }; + }; + + + + + + var sourceView = new qx.ui.listview.ListView(ld, lc1); + + sourceView.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + sourceView.setBackgroundColor("white"); + sourceView.setWidth(600); + sourceView.setHeight(250); + sourceView.setLocation(20, 48); + + sourceView.getPane().getManager().setDragSelection(false); + sourceView.getPane().addEventListener("dragstart", handleDrag); + + qx.ui.core.ClientDocument.getInstance().add(sourceView); + + + + + var destView = new qx.ui.listview.ListView([], lc2); + + destView.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + destView.setBackgroundColor("white"); + destView.setWidth(600); + destView.setHeight(250); + destView.setLocation(20, 318); + + destView.getPane().getManager().setDragSelection(false); + destView.getPane().setDropDataTypes(["qx.ui.listview.ListViewEntries"]); + destView.getPane().addEventListener("dragdrop", handleDrop); + + qx.ui.core.ClientDocument.getInstance().add(destView); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_9.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_9.html new file mode 100644 index 0000000000..9810398670 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ListView_9.html @@ -0,0 +1,119 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing qx.ui.listview.ListView with text cells.</p> + <p>And with drag and drop between the two qx.ui.listview.ListViews.</p> + <p>Reduced columns for second listview.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<1000; i++) + { + t=Math.round(Math.random()*4); + ld.push({ name : { text : "File " + i }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }}); + }; + + var lc1 = + { + name : { label : "Name", width : 100, type : "text", sortable : true, sortProp : "text" }, + size: { label : "Size", width : 50, type : "text", sortable : true, sortProp : "text", sortMethod : qx.util.Compare.byIntegerString }, + type : { label : "Type", width : 80, type : "text", sortable : true, sortProp : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + }; + + var lc2 = + { + name : { label : "Name", width : 200, type : "text", sortable : true, sortProp : "text" }, + type : { label : "Type", width : 80, type : "text", sortable : true, sortProp : "text" } + }; + + + function handleDrag(e) + { + e.addData("qx.ui.listview.ListViewEntries", qx.lang.Array.copy(e.getCurrentTarget().getManager().getSelectedItems())); + e.addAction("move"); + e.startDrag(); + }; + + function handleDrop(e) + { + var type = e.getDropDataTypes()[0]; + var data = e.getData(type); + + switch(e.getAction()) + { + case "move": + sourceView.getPane().getManager().setSelectedItems([]); + sourceView.getPane().getManager().setAnchorItem(null); + sourceView.getPane().getManager().setLeadItem(null); + + for (var i=0, l=data.length; i<l; i++) + { + qx.lang.Array.remove(sourceView.getData(), data[i]); + destView.getData().push(data[i]); + }; + + destView.getPane().getManager().setSelectedItems(data); + + sourceView.updateSort(); + destView.updateSort(); + + sourceView.update(); + destView.update(); + }; + }; + + + + + + var sourceView = new qx.ui.listview.ListView(ld, lc1); + + sourceView.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + sourceView.setBackgroundColor("white"); + sourceView.setWidth(600); + sourceView.setHeight(250); + sourceView.setLocation(20, 48); + + sourceView.getPane().getManager().setDragSelection(false); + sourceView.getPane().addEventListener("dragstart", handleDrag); + + qx.ui.core.ClientDocument.getInstance().add(sourceView); + + + + + var destView = new qx.ui.listview.ListView([], lc2); + + destView.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + destView.setBackgroundColor("white"); + destView.setWidth(600); + destView.setHeight(250); + destView.setLocation(20, 318); + + destView.getPane().getManager().setDragSelection(false); + destView.getPane().setDropDataTypes(["qx.ui.listview.ListViewEntries"]); + destView.getPane().addEventListener("dragdrop", handleDrop); + + qx.ui.core.ClientDocument.getInstance().add(destView); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_1.html new file mode 100644 index 0000000000..d24e00f3d0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_1.html @@ -0,0 +1,128 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>List implementation. Now testing auto dimensions.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var l1 = new qx.ui.form.List; + + l1.set({ top : 48, left: 20, height: 200, width: "auto", overflow : "scrollY" }); + + var item; + for( var i=1; i<=35; i++ ) + { + // item = new qx.ui.form.ListItem("Item No " + i); + item = new qx.ui.form.ListItem("Item No " + i, "icon/" + ((i % 4) ? "16" : "48") + "/places/folder.png"); + + !(i % 9) && (item.setEnabled(false)); + + l1.add(item); + }; + + d.add(l1); + + var l2 = new qx.ui.form.List; + + l2.set({ top : 48, left: 400, height: 200, width: "auto" }); + l2.getManager().setMultiSelection(false); + //l2.setOverflow("scrollY"); + l2.setHeight("auto"); + + var l2l = [ "red", "violett", "rose", "blue", "green", "cyan", "magenta", "yellow", "brown", "orange", "black", "white", "grey", "gray", "brown" ]; + + for (var i=0; i<l2l.length; i++) { + l2.add(new qx.ui.form.ListItem(l2l[i])); + }; + + d.add(l2); + + + + + var c1 = new qx.ui.form.CheckBox("Enable Multi-Selection"); + var c2 = new qx.ui.form.CheckBox("Enable Drag-Selection"); + var c3 = new qx.ui.form.CheckBox("Allow Deselection"); + var c4 = new qx.ui.form.CheckBox("Enable Inline Find"); + + c1.setLocation(180, 48); + c2.setLocation(180, 68); + c3.setLocation(180, 88); + c4.setLocation(180, 108); + + d.add(c1, c2, c3, c4); + + c1.setChecked(true); + c2.setChecked(true); + c3.setChecked(true); + c4.setChecked(true); + + c1.addEventListener("changeChecked", function(e) { + l1.getManager().setMultiSelection(e.getData()); + }); + + c2.addEventListener("changeChecked", function(e) { + l1.getManager().setDragSelection(e.getData()); + }); + + c3.addEventListener("changeChecked", function(e) { + l1.getManager().setCanDeselect(e.getData()); + }); + + c4.addEventListener("changeChecked", function(e) { + l1.setEnableInlineFind(e.getData()); + }); + + + + + + var rd1 = new qx.ui.form.RadioButton("Show Label", "label"); + var rd2 = new qx.ui.form.RadioButton("Show Icon", "icon"); + var rd3 = new qx.ui.form.RadioButton("Show Both", "both"); + + rd1.set( { left: 180, top: 128 } ); + rd2.set( { left: 180, top: 148 } ); + rd3.set( { left: 180, top: 168 } ); + + d.add(rd1, rd2, rd3); + + rd3.setChecked(true); + + var rbm = new qx.manager.selection.RadioManager( name, [rd1, rd2, rd3]); + + rbm.addEventListener("changeSelected", function(e) + { + for( var i=0; i<l1.getChildrenLength(); i++ ) { + l1.getChildren()[i].setShow(e.getData().getValue()); + }; + }); + + + + + + // Icon Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 348); + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 200, 348); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_2.html new file mode 100644 index 0000000000..480d7d0a18 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_2.html @@ -0,0 +1,111 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>List implementation</p> + <p>Drag and Drop Handling added</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var doc = qx.ui.core.ClientDocument.getInstance(); + + // Create list to drag from + + + var sourceList = new qx.ui.form.List(); + sourceList.setWidth(100); + sourceList.setHeight(250); + sourceList.setLeft(20); + sourceList.setTop(48); + + // Set vertical scroll bar to always visible + sourceList.setOverflow("scrollY"); + // Set selection mode to single explicitly + // sourceList.getManager().setMultiSelection(false); + // Set drag selection mode to off + sourceList.getManager().setDragSelection(false); + + // Add items to source list + + for (var i = 1; i <= 10; i++) + { + var item = new qx.ui.form.ListItem("Item " + i); + item.addEventListener("dragstart", handleStartDrag); + sourceList.add(item); + }; + + doc.add(sourceList); + + + + // Create list to drop to + + var destList = new qx.ui.form.List(); + destList.setWidth(100); + destList.setHeight(250); + destList.setLeft(320); + destList.setTop(48); + + // Set vertical scroll bar to always visible + destList.setOverflow("scrollY"); + // Set selection mode to single explicitly + // destList.getManager().setMultiSelection(false); + // Set drag selection mode to off + destList.getManager().setDragSelection(false); + + doc.add(destList); + + // Define event handlers + + function handleStartDrag(e) + { + e.addData("ListItems", qx.lang.Array.copy(sourceList.getManager().getSelectedItems())); + e.addAction("move"); + e.startDrag(); + }; + + function handleListDrop(e) + { + var type = e.getDropDataTypes()[0]; + var data = e.getData(type); + + // this.debug("Drag&Drop Action: " + e.getAction()); + + switch(e.getAction()) + { + case "move": + sourceList.getManager().setSelectedItems([]); + sourceList.getManager().setAnchorItem(null); + sourceList.getManager().setLeadItem(null); + + for (var i=0, l=data.length; i<l; i++) { + destList.add(data[i]); + }; + + destList.getManager().setSelectedItems(data); + break; + }; + }; + + + + // Set event properties for destination list + + destList.setDropDataTypes(["ListItems"]); + destList.addEventListener("dragdrop", handleListDrop); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_3.html new file mode 100644 index 0000000000..bf9241083c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/List_3.html @@ -0,0 +1,55 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.form.List Item Sorting demo</p> + </div> + + <script type="text/javascript"> + + qx.core.Init.getInstance().defineMain(function() { + var list = new qx.ui.form.List(); list.set({top:50,left:50,height:150,width:100}); + + list.add(new qx.ui.form.ListItem('Will',null,'1')); + list.add(new qx.ui.form.ListItem('Anna',null,'2')); + list.add(new qx.ui.form.ListItem('Tom',null,'3')); + list.add(new qx.ui.form.ListItem('Diana',null,'4')); + list.add(new qx.ui.form.ListItem('Pete',null,'5')); + list.add(new qx.ui.form.ListItem('Carol',null,'6')); + + var btn1 = new qx.ui.form.Button('Sort By Label'); btn1.set({top:50,left:200}); + btn1.addEventListener('click',function(e){ + list.sortItemsByString(); + }); + + var btn2 = new qx.ui.form.Button('Sort By Label Reverse'); btn2.set({top:80,left:200}); + btn2.addEventListener('click',function(e){ + list.sortItemsByString(true); + }); + + var btn3 = new qx.ui.form.Button('Sort By Value'); btn3.set({top:140,left:200}); + btn3.addEventListener('click',function(e){ + list.sortItemsByValue(); + }); + + var btn4 = new qx.ui.form.Button('Sort By Value Reverse'); btn4.set({top:170,left:200}); + btn4.addEventListener('click',function(e){ + list.sortItemsByValue(true); + }); + + qx.ui.core.ClientDocument.getInstance().add(btn1,btn2,btn3,btn4); + qx.ui.core.ClientDocument.getInstance().add(list); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Menu_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Menu_1.html new file mode 100644 index 0000000000..ee000b62ed --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Menu_1.html @@ -0,0 +1,129 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.menu.Menu Implementation</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("New Window"); + var mb2_02 = new qx.ui.menu.Button("Overlapping"); + var mb2_03 = new qx.ui.menu.Button("Split Vertical"); + var mb2_04 = new qx.ui.menu.Button("Split Horizontal"); + var mb2_05 = new qx.ui.menu.Button("Next Window"); + var mb2_06 = new qx.ui.menu.Button("Previous Window"); + + m2.add(mb2_01, mb2_02, mb2_03, mb2_04, mb2_05, mb2_06); + + + + + var m3 = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_04, mb3_05); + + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("View/Lists"); + var mb1_02 = new qx.ui.menu.Button("Syntax Highlighting"); + var ms1 = new qx.ui.menu.Separator(); + var mb1_03 = new qx.ui.menu.Button("Window Font"); + var mb1_04 = new qx.ui.menu.Button("Printer Font", null, null, m3); + var ms2 = new qx.ui.menu.Separator(); + var mb1_05 = new qx.ui.menu.Button("Undo"); + var mb1_06 = new qx.ui.menu.Button("Redo"); + var ms3 = new qx.ui.menu.Separator(); + var mb1_07 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png"); + var mb1_08 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png"); + var mb1_09 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png"); + var mb1_10 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png"); + var mb1_11 = new qx.ui.menu.Button("Select All"); + var ms4 = new qx.ui.menu.Separator(); + var mb1_12 = new qx.ui.menu.Button("Search"); + var mb1_13 = new qx.ui.menu.Button("Search Again"); + var ms5 = new qx.ui.menu.Separator(); + var mb1_14 = new qx.ui.menu.Button("View", null, null, m2); + var mb1_15 = new qx.ui.menu.Button("Editor Settings..."); + var mb1_16 = new qx.ui.menu.Button("Editor Plugins"); + var mb1_17 = new qx.ui.menu.Button("Framework Settings"); + + m1.add(mb1_01, mb1_02, ms1, mb1_03, mb1_04, ms2, mb1_05, mb1_06, ms3, mb1_07, mb1_08, mb1_09, mb1_10, mb1_11, ms4, mb1_12, mb1_13, ms5, mb1_14, mb1_15, mb1_16, mb1_17); + + + d.add(m1, m2, m3); + + + + + + var w1 = new qx.ui.form.Button("Open"); + + w1.setTop(48); + w1.setLeft(20); + + w1.addEventListener("click", function(e) + { + if (m1.isSeeable()) + { + m1.hide(); + } + else + { + var el = this.getElement(); + + m1.setLeft(qx.html.Location.getPageBoxLeft(el)); + m1.setTop(qx.html.Location.getPageBoxBottom(el)); + + m1.show(); + }; + + e.setPropagationStopped(true); + }); + + w1.addEventListener("mousedown", function(e) + { + e.setPropagationStopped(true); + }); + + + d.add(w1); + + + + + + // Icon Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 180, 48); + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 380, 48); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Menu_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Menu_2.html new file mode 100644 index 0000000000..bc43c2fbaf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Menu_2.html @@ -0,0 +1,205 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.menu.Menu Implementation.</p> + <p>Added qx.client.Command support tests.</p> + <p>Create the menu instances on the first opening.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var q1 = new qx.client.Command("Ctrl+Z"); + q1.addEventListener("execute", function(e) { + alert("Undo"); + }); + + var q2 = new qx.client.Command("Ctrl+Y"); + q2.addEventListener("execute", function(e) { + alert("Redo"); + }); + + var q3 = new qx.client.Command("Ctrl+X"); + q3.addEventListener("execute", function(e) { + alert("Cut"); + }); + + var q4 = new qx.client.Command("Ctrl+C"); + q4.addEventListener("execute", function(e) { + alert("Copy"); + }); + + var q5 = new qx.client.Command("Ctrl+V"); + q5.addEventListener("execute", function(e) { + alert("Paste"); + }); + + var q6 = new qx.client.Command("Del"); + q6.addEventListener("execute", function(e) { + alert("Delete"); + }); + + var q7 = new qx.client.Command("Ctrl+A"); + q7.addEventListener("execute", function(e) { + alert("Select All"); + }); + + var q8 = new qx.client.Command("Ctrl+F"); + q8.addEventListener("execute", function(e) { + alert("Search"); + }); + + var q9 = new qx.client.Command("Ctrl+G"); + q9.addEventListener("execute", function(e) { + alert("Search Again"); + }); + + var q10 = new qx.client.Command(); + q10.addEventListener("execute", function(e) { + alert("Syntax Highlighting"); + }); + + var q11 = new qx.client.Command("Esc"); + q11.addEventListener("execute", function(e) { + alert("Escape"); + }); + + var q12 = new qx.client.Command("Space"); + q12.addEventListener("execute", function(e) { + alert("Space"); + }); + + + var m1, m2, m3; + + function createMenus() + { + m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("New Window"); + var mb2_02 = new qx.ui.menu.Button("Overlapping"); + var mb2_03 = new qx.ui.menu.Button("Split Vertical"); + var mb2_04 = new qx.ui.menu.Button("Split Horizontal"); + var mb2_05 = new qx.ui.menu.Button("Next Window"); + var mb2_06 = new qx.ui.menu.Button("Previous Window"); + + m2.add(mb2_01, mb2_02, mb2_03, mb2_04, mb2_05, mb2_06); + + + + + m3 = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_04, mb3_05); + + + + m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("View/Lists", null, q12); + var mb1_02 = new qx.ui.menu.Button("Syntax Highlighting", null, q10); + var ms1 = new qx.ui.menu.Separator(); + var mb1_03 = new qx.ui.menu.Button("Window Font", null, q11); + var mb1_04 = new qx.ui.menu.Button("Printer Font", null, null, m3); + var ms2 = new qx.ui.menu.Separator(); + var mb1_05 = new qx.ui.menu.Button("Undo", null, q1); + var mb1_06 = new qx.ui.menu.Button("Redo", null, q2); + var ms3 = new qx.ui.menu.Separator(); + var mb1_07 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", q3); + var mb1_08 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", q4); + var mb1_09 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", q5); + var mb1_10 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", q6); + var mb1_11 = new qx.ui.menu.Button("Select All", null, q7); + var ms4 = new qx.ui.menu.Separator(); + var mb1_12 = new qx.ui.menu.Button("Search", null, q8); + var mb1_13 = new qx.ui.menu.Button("Search Again", null, q9); + var ms5 = new qx.ui.menu.Separator(); + var mb1_14 = new qx.ui.menu.Button("View", null, null, m2); + var mb1_15 = new qx.ui.menu.Button("Editor Settings..."); + var mb1_16 = new qx.ui.menu.Button("Editor Plugins"); + var mb1_17 = new qx.ui.menu.Button("Framework Settings"); + + m1.add(mb1_01, mb1_02, ms1, mb1_03, mb1_04, ms2, mb1_05, mb1_06, ms3, mb1_07, mb1_08, mb1_09, mb1_10, mb1_11, ms4, mb1_12, mb1_13, ms5, mb1_14, mb1_15, mb1_16, mb1_17); + + + d.add(m1, m2, m3); + }; + + + + + + var w1 = new qx.ui.form.Button("Open"); + + w1.setTop(48); + w1.setLeft(20); + + w1.addEventListener("click", function(e) + { + if (!m1) { + createMenus(); + }; + + if (m1.isSeeable()) + { + m1.hide(); + } + else + { + var el = this.getElement(); + + m1.setLeft(qx.html.Location.getPageBoxLeft(el)); + m1.setTop(qx.html.Location.getPageBoxBottom(el)); + + m1.show(); + }; + + e.setPropagationStopped(true); + }); + + w1.addEventListener("mousedown", function(e) + { + e.setPropagationStopped(true); + }); + + + d.add(w1); + + + + + + + + + + // Icon Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 180, 48); + + // Color Themes + qx.manager.object.ColorManager.getInstance().createThemeList(d, 380, 48); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Node_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Node_1.html new file mode 100644 index 0000000000..a19a9a7b53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Node_1.html @@ -0,0 +1,39 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>qx.ui.embed.NodeEmbed makes a dom node a widget.</p> + </div> + + <div id="text1" style="display:none">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui <strong>qooxdoo</strong> blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.</div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var n = new qx.ui.embed.NodeEmbed("text1"); + + n.setLocation(20, 48); + n.setRight(335); + n.setBottom(48); + n.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + n.setBackgroundColor("white"); + n.setColor("blue"); + n.setPadding(10); + + d.add(n); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Popups_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Popups_1.html new file mode 100644 index 0000000000..07c1204cc3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Popups_1.html @@ -0,0 +1,106 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for the qx.ui.popup.Popup widget. qx.ui.popup.Popups are planned as the source constructor for tooltips, menus, ...</p> + <p>There is also a qx.manager.object.PopupManager which hides all registered qx.ui.popup.Popup instances which are configured to auto hide. + This is a nice method to omit to show more than one qx.ui.popup.Popup together (omit multiple QxTooltips, ...).</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + var w1 = new qx.ui.form.Button("Press"); + with(w1) + { + setTop(48); + setLeft(20); + setBackgroundColor(new qx.renderer.color.Color("#BDD2EF")); + setWidth(100); + setHeight(100); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + setHorizontalAlign("center"); + }; + d.add(w1); + + + var w2 = new qx.ui.form.Button("Press"); + with(w2) + { + setTop(48); + setLeft(140); + setBackgroundColor(new qx.renderer.color.Color("#D1DFAD")); + setWidth(100); + setHeight(100); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + setHorizontalAlign("center"); + }; + d.add(w2); + + + + + + + + + var p1 = new qx.ui.popup.Popup; + d.add(p1); + + var a1 = new qx.ui.basic.Atom("Hello World #1", "icon/16/apps/graphics-image-viewer.png"); + p1.add(a1); + + with(p1) + { + setBackgroundColor(new qx.renderer.color.Color("#FFFAD3")); + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setPadding(2, 4); + }; + + w1.addEventListener("click", function(e) + { + p1.setTop(e.getPageY() + 3); + p1.setLeft(e.getPageX() + 3); + p1.show(); + p1.bringToFront(); + }); + + + + var p2 = new qx.ui.popup.Popup; + d.add(p2); + + var a2 = new qx.ui.basic.Atom("Hello World #2", "icon/32/apps/accessories-clock.png"); + p2.add(a2); + + with(p2) + { + setBackgroundColor(new qx.renderer.color.Color("#DFFAD3")); + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setPadding(2, 4); + }; + + w2.addEventListener("click", function(e) + { + p2.setTop(e.getPageY() + 3); + p2.setLeft(e.getPageX() + 3); + p2.show(); + p2.bringToFront(); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Popups_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Popups_2.html new file mode 100644 index 0000000000..b4d4e8c585 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Popups_2.html @@ -0,0 +1,102 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for the qx.ui.popup.Popup widget. qx.ui.popup.Popups are planned as the source constructor for tooltips, menus, ...</p> + <p>There is also a qx.manager.object.PopupManager which hides all registered qx.ui.popup.Popup instances which are configured to auto hide. + This is a nice method to omit to show more than one qx.ui.popup.Popup together (omit multiple QxTooltips, ...).</p> + <p>In this example we use a qx.ui.popup.PopupAtom. This is a popup with an automatically included qx.ui.basic.Atom, which + allowes you to easily use it for messages to the user or something like this.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + var w1 = new qx.ui.form.Button("Press"); + with(w1) + { + setTop(48); + setLeft(20); + setBackgroundColor(new qx.renderer.color.Color("#BDD2EF")); + setWidth(100); + setHeight(100); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + setHorizontalAlign("center"); + }; + d.add(w1); + + + var w2 = new qx.ui.form.Button("Press"); + with(w2) + { + setTop(48); + setLeft(140); + setBackgroundColor(new qx.renderer.color.Color("#D1DFAD")); + setWidth(100); + setHeight(100); + setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + setHorizontalAlign("center"); + }; + d.add(w2); + + + + + + + + + var p1 = new qx.ui.popup.PopupAtom("Hello World #1", "icon/16/apps/graphics-image-viewer.png"); + d.add(p1); + + with(p1) + { + setBackgroundColor(new qx.renderer.color.Color("#FFFAD3")); + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setPadding(2, 4); + }; + + w1.addEventListener("click", function(e) + { + p1.setTop(e.getPageY() + 3); + p1.setLeft(e.getPageX() + 3); + p1.show(); + p1.bringToFront(); + }); + + + + var p2 = new qx.ui.popup.PopupAtom("Hello World #2", "icon/32/apps/accessories-clock.png"); + d.add(p2); + + with(p2) + { + setBackgroundColor(new qx.renderer.color.Color("#DFFAD3")); + setBorder(qx.renderer.border.BorderPresets.getInstance().black); + setPadding(2, 4); + }; + + w2.addEventListener("click", function(e) + { + p2.setTop(e.getPageY() + 3); + p2.setLeft(e.getPageX() + 3); + p2.show(); + p2.bringToFront(); + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_1.html new file mode 100644 index 0000000000..69744f4dd6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_1.html @@ -0,0 +1,116 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + <script type="text/javascript" src=".qxrpc"></script> + <!-- With the above script, the service URL for a J2EE application can be + automatically determined, no matter on what path it's deployed. --> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p><strong>Only works together with a RPC backend!</strong></p> + <p>Test for RPC functionality.</p> + <p> + This test calls a simple echo-style service on the server. The server + method accepts a string and sends back a string that says + "Client said: [input string]". + </p> + </div> + + <script type="text/javascript"> +// qx.Settings.setCustomOfClass("qx.io.remote.Exchange", "enableDebug", true); + qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true); + + qx.core.Init.getInstance().defineMain(function() { + var layout1 = new qx.ui.layout.VerticalBoxLayout(); + layout1.setTop(40); + layout1.setLeft(20); + layout1.setSpacing(4); + + var async = new qx.ui.form.CheckBox("Asynchronous (must be checked if cross-domain is selected)"); + layout1.add(async); + + var crossDomain = new qx.ui.form.CheckBox("Cross Domain"); + layout1.add(crossDomain); + + layout1.add(new qx.ui.basic.Label("URL:")); + var defaultURL = qx.io.remote.Rpc.makeServerURL(); + if (defaultURL == null) { + defaultURL = "/services/"; + } + var url = new qx.ui.form.TextField(defaultURL); + layout1.add(url); + + layout1.add(new qx.ui.basic.Label("Service:")); + var service = new qx.ui.form.TextField("qooxdoo.test"); + layout1.add(service); + + layout1.add(new qx.ui.basic.Label("Method:")); + var method = new qx.ui.form.TextField("echo"); + layout1.add(method); + + var layout2 = new qx.ui.layout.HorizontalBoxLayout(); + layout2.setHeight("auto"); + layout2.setVerticalChildrenAlign("middle"); + layout2.setSpacing(4); + var message = new qx.ui.form.TextField("Hello"); + message.setWidth(200); + layout2.add(message); + var send = new qx.ui.form.Button("Send to server"); + layout2.add(send); + var abort = new qx.ui.form.Button("Abort"); + abort.setEnabled(false); + layout2.add(abort); + layout1.add(layout2); + + // We'll be setting url and service upon execute; no need to do it now. + var rpc = new qx.io.remote.Rpc(); + rpc.setTimeout(10000); + var mycall = null; + + send.addEventListener("execute", function() { + // Allow the user to reset the URL and Service on each call + rpc.setUrl(url.getValue()); + rpc.setServiceName(service.getValue()); + rpc.setCrossDomain(crossDomain.isChecked()); + + if (async.isChecked()) { + send.setEnabled(false); + abort.setEnabled(true); + mycall = rpc.callAsync(function(result, ex, id) { + mycall = null; + if (ex == null) { + alert("Async(" + id + ") result: " + result); + } else { + alert("Async(" + id + ") exception: " + ex); + } + send.setEnabled(true); + abort.setEnabled(false); + }, method.getValue(), message.getValue()); + } else { + try { + var result = rpc.callSync(method.getValue(), message.getValue()); + alert("Sync result: " + result); + } catch (ex) { + alert("Sync exception: " + ex); + } + } + }); + + abort.addEventListener("execute", function() { + rpc.abort(mycall); + }); + + var d = qx.ui.core.ClientDocument.getInstance(); + d.add(layout1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_2.html new file mode 100644 index 0000000000..b00fc4d7b7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_2.html @@ -0,0 +1,134 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + <script type="text/javascript" src=".qxrpc"></script> + <!-- With the above script, the service URL for a J2EE application can be + automatically determined, no matter on what path it's deployed. --> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p><strong>Only works together with a RPC backend!</strong></p> + <p>Test for RPC functionality.</p> + <p> + This tests the ability to issue multiple asynchronous RPC calls to the + same service/method, and determine from which request we have received a + response. We issue multiple 'sleep' calls, for decreasing amounts of + time, and ensure that we can associate the resonses from the + later-issued requests to the earlier-received responses. + </p> + </div> + + <script type="text/javascript"> +// qx.Settings.setCustomOfClass("qx.io.remote.Exchange", "enableDebug", true); + qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true); + + qx.core.Init.getInstance().defineMain(function() { + var layout1 = new qx.ui.layout.VerticalBoxLayout(); + layout1.setTop(40); + layout1.setLeft(20); + layout1.setSpacing(4); + + /* + * Sigh. Both IE and Firefox follow (too strictly) RFC2616 and limit + * the number of simultaneous asyncronous HTTP requests to 2. We'll + * allow testing just 2 simultaneous requests or issuing 6 simultaneous + * requests. In the former case, we'll get expected results. In the + * latter, we'll see two at a time being processed. + * + * Note that this applies to both XmlHTTPTransport and IframeTransport. + * It is an HTTP limitation, not a limitation of a particular method of + * issuing a request. + */ + var tooMany = new qx.ui.form.CheckBox("Issue more requests than IE's and Firefox's implementations of HTTP will process simultaneously"); + layout1.add(tooMany); + + var crossDomain = new qx.ui.form.CheckBox("Cross Domain"); + layout1.add(crossDomain); + + layout1.add(new qx.ui.basic.Label("URL:")); + var defaultURL = qx.io.remote.Rpc.makeServerURL(); + if (defaultURL == null) { + defaultURL = "/services/"; + } + var url = new qx.ui.form.TextField(defaultURL); + layout1.add(url); + + layout1.add(new qx.ui.basic.Label("Service:")); + var service = new qx.ui.form.TextField("qooxdoo.test"); + layout1.add(service); + + var layout2 = new qx.ui.layout.HorizontalBoxLayout(); + layout2.setHeight("auto"); + layout2.setVerticalChildrenAlign("middle"); + layout2.setSpacing(4); + var start = new qx.ui.form.Button("Start Test"); + layout2.add(start); + var abort = new qx.ui.form.Button("Abort"); + layout2.add(abort); + layout1.add(layout2); + + // ensure there's room in the queue for all of our requests + qx.io.remote.RequestQueue.getInstance().setMaxConcurrentRequests(8); + + // We'll be setting url and service upon execute; no need to do it now. + var rpc = new qx.io.remote.Rpc(); + rpc.setTimeout(60000); + var mycall; + var mycalls = []; + + start.addEventListener("execute", function() { + t0 = new Date().getTime(); + + rpc.setCrossDomain(crossDomain.isChecked()); + + rpc.setUrl(url.getValue()); + rpc.setServiceName(service.getValue()); + + var seqnum; + for (i=(tooMany.isChecked() ? 30 : 10); i > 0; i-=5) { + /* + * Always issue an asynchronous request! Issuing a synchronous + * request can lock up the entire browser until a response is + * received. Bad browser developers! Bad! + */ + mycall = rpc.callAsync(function(result, ex, seqnum) { + mycalls[seqnum] = null; + t = new Date().getTime() - t0; + if (ex == null) { + layout1.warn(t + ": response " + seqnum + ": " + result); + } else { + layout1.warn(t + ": exception " + seqnum + ": " + ex); + } + }, "sleep", i.toString()); // FIXME: Why is this sent as a string? + + t = new Date().getTime() - t0; + seqnum = mycall.getSequenceNumber(); + mycalls[seqnum] = mycall; + layout1.warn(t + ": request " + seqnum + " = " + i.toString()); + } + }); + + abort.addEventListener("execute", function() { + for (seqnum in mycalls) { + if (mycalls[seqnum] !== null) { + rpc.abort(mycalls[seqnum]); + mycalls[seqnum] = null; + } + } + mycalls = []; + }); + + var d = qx.ui.core.ClientDocument.getInstance(); + d.add(layout1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_3.html new file mode 100644 index 0000000000..5e9d61660a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_3.html @@ -0,0 +1,240 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + <script type="text/javascript" src=".qxrpc"></script> + <!-- With the above script, the service URL for a J2EE application can be + automatically determined, no matter on what path it's deployed. --> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for RPC functionality.</p> + <p> + This test calls a whole set of functions to test each of the primitive + data types. The comparison results should all end with ": true", and + the last test generates an Application Error (#1000). No other test + generates that error, so receiving it means the complete set of tests + was run. + </p> + <p> + These functions all use the synchronous interface. You should not use + the synchronous interface because with some browsers, the entire browser + environment locks up during a synchronous call. If the server hangs for + a minute or two, so will the browser! You have been warned. + </p> + </div> + + <script type="text/javascript"> +// qx.Settings.setCustomOfClass("qx.io.remote.Exchange", "enableDebug", true); + qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true); + + qx.core.Init.getInstance().defineMain(function() { var layout1 = new + qx.ui.layout.VerticalBoxLayout(); layout1.setTop(40); layout1.setLeft(20); + layout1.setSpacing(4); + + layout1.add(new qx.ui.basic.Label("URL:")); + var defaultURL = qx.io.remote.Rpc.makeServerURL(); + if (defaultURL == null) { + defaultURL = "/services/"; + } + var url = new qx.ui.form.TextField(defaultURL); + layout1.add(url); + + layout1.add(new qx.ui.basic.Label("Service path:")); + var service = new qx.ui.form.TextField("qooxdoo.test"); + layout1.add(service); + + var start = new qx.ui.form.Button("Start test"); + layout1.add(start); + + var rpc; + var mycall = null; + var test; + + start.addEventListener("execute", function() { + try + { + var rpc = new qx.io.remote.Rpc(url.getValue(), service.getValue()); + rpc.setTimeout(10000); + + test = "getCurrentTimestamp"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: now=" + result.now); + layout1.warn("result: jsonDate=" + result.json.toString()); + + test = "getInteger"; + layout1.warn("Calling '" + test + "'"); + var result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a number, got " + typeof(result) + ": " + (typeof(result) == "number" && isFinite(result) ? "true" : "false")); + + test = "isInteger"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, 1); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an integer: " + result); + + test = "getString"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a string: " + (typeof(result) == "string")); + + test = "isString"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, "Hello World"); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a string: " + result); + + test = "getNull"; + layout1.warn("Calling '" + test + "'"); + var result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns null: " + (typeof(result) == "object" && result === null ? "true" : "false")); + + test = "isNull"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, null); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns null: " + result); + + test = "getArrayInteger"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an array: " + ((typeof(result) == "object") && (result instanceof Array))); + + test = "getArrayString"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an array: " + ((typeof(result) == "object") && (result instanceof Array))); + + var dataArray = new Array(5); + + for (i=0; i<5; i++) + { + dataArray[i] = i; + }; + + test = "isArray"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, dataArray); + layout1.warn("result: {" + result + "}"); + + dataArray = new Array(5); + + for (i=0; i<5; i++) + { + dataArray[i] = "Element " + i; + }; + + test = "isArray"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, dataArray); + layout1.warn("result: {" + result + "}"); + + test = "getFloat"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a float: " + (typeof(result) == "number")); + + test = "getObject"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an object: " + (typeof(result) == "object")); + + test = "isObject"; + layout1.warn("Calling '" + test + "'"); + obj = new Object(); + obj.s = "Hi there."; + obj.n = 23; + obj.o = new Object(); + obj.o.s = "This is a test."; + result = rpc.callSync(test, obj); + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns an object: " + result); + + test = "getTrue"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean = true: " + (typeof(result) == "boolean")); + + test = "getFalse"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean = false: " + (typeof(result) == "boolean")); + + test = "isBoolean"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, true); + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean: " + result); + + test = "isBoolean"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, false); + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean: " + result); + + Date.prototype.classname = "Date"; + var date = new Date(); + test = "getParam"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, date); + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a date object, got " + (result.classname == date.classname)); + layout1.warn("Returns matching time " + date.getTime() + " = " + result.getTime() + " :" + (result.getTime() == date.getTime())); + + dataArray = new Array(); + dataArray[0] = true; + dataArray[1] = false; + dataArray[2] = 1; + dataArray[3] = 1.1; + dataArray[4] = "Hello World"; + dataArray[5] = new Array(5); + dataArray[6] = new Object(); + dataArray[7] = new Date(); + + test = "getParams"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test, dataArray[0], dataArray[1], dataArray[2], dataArray[3], dataArray[4], dataArray[5], dataArray[6], dataArray[7]); + layout1.warn("result: {" + result + "}"); + + for (i=0; i< dataArray.length; i++) + { + layout1.warn("Returned parameter (" + i + ") value '" + result[i] + "' matches '" + dataArray[i] + "': " + (result[i].toString() == dataArray[i].toString())); + layout1.warn("Returned parameter (" + i + ") type '" + typeof(result[i]) + "' matches '" + typeof(dataArray[i]) + "': " + (typeof(result[i]) == typeof(dataArray[i]))); + }; + + test = "getError"; + layout1.warn("Calling '" + test + "'"); + result = rpc.callSync(test); + // should never get here; we should receive an exception + layout1.warn("ERROR: Should have received an exception! Got: " + result); + + } + catch (ex) + { + alert("Exception on test " + test + ": " + ex); + } + }); + + var d = qx.ui.core.ClientDocument.getInstance(); + d.add(layout1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_4.html new file mode 100644 index 0000000000..3ceb52f358 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_4.html @@ -0,0 +1,470 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + <script type="text/javascript" src=".qxrpc"></script> + <!-- With the above script, the service URL for a J2EE application can be + automatically determined, no matter on what path it's deployed. --> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p><strong>Only works together with a RPC backend!</strong></p> + <p>Test for RPC functionality.</p> + <p> + This test calls a whole set of functions to test each of the primitive + data types. The comparison results should all end with ": true", and + the last test generates an Application Error (#1000). No other test + generates that error, so receiving it means the complete set of tests + was run. + </p> + <p> + These functions all use the asynchronous interface. This is the + interface that your applications should use. See the warning in + RPC_3.html regarding use of the synchronous interface. + </p> + </div> + + <script type="text/javascript"> + qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true); + + qx.core.Init.getInstance().defineMain(function() { + var layout1 = new qx.ui.layout.VerticalBoxLayout(); + layout1.setTop(40); + layout1.setLeft(20); + layout1.setSpacing(4); + + var crossDomain = new qx.ui.form.CheckBox("Cross Domain"); + layout1.add(crossDomain); + + layout1.add(new qx.ui.basic.Label("URL:")); + var defaultURL = qx.io.remote.Rpc.makeServerURL(); + if (defaultURL == null) { + defaultURL = "/services/"; + } + var url = new qx.ui.form.TextField(defaultURL); + layout1.add(url); + + layout1.add(new qx.ui.basic.Label("Service path:")); + var service = new qx.ui.form.TextField("qooxdoo.test"); + layout1.add(service); + + var start = new qx.ui.form.Button("Start test"); + layout1.add(start); + + var mycall = null; + var test; + var testNum; + + start.addEventListener("execute", function() { + var obj; + var date; + var dataArray; + + /* + * Create an array of each of the tests. Each array element is itself + * an array of two function: the first to issue the test request, and + * the second to validate the result. + */ + var tests = + [ + [ + function() + { + test = "getCurrentTimestamp"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: now=" + result.now); + layout1.warn("result: jsonDate=" + result.json.toString()); + } + ], + + [ + function() + { + test = "getInteger"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a number, got " + typeof(result) + ": " + (typeof(result) == "number" && isFinite(result) ? "true" : "false")); + } + ], + + [ + function() + { + test = "isInteger"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, 1); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an integer: " + result); + } + ], + + [ + function() + { + test = "getString"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a string: " + (typeof(result) == "string")); + } + ], + + [ + function() + { + test = "isString"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, "Hello World"); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a string: " + result); + } + ], + + [ + function() + { + test = "getNull"; + layout1.warn("Calling '" + test + "'"); + var mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns null: " + (typeof(result) == "object" && mycall === null ? "true" : "false")); + } + ], + + [ + function() + { + test = "isNull"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, null); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns null: " + result); + } + ], + + [ + function() + { + test = "getArrayInteger"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an array: " + ((typeof(result) == "object") && (result instanceof Array))); + } + ], + + [ + function() + { + test = "getArrayString"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an array: " + ((typeof(result) == "object") && (result instanceof Array))); + } + ], + + [ + function() + { + dataArray = new Array(5); + + for (i=0; i<5; i++) + { + dataArray[i] = i; + }; + + test = "isArray"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, dataArray); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an array: " + result); + } + ], + + [ + function() + { + dataArray = new Array(5); + + for (i=0; i<5; i++) + { + dataArray[i] = "Element " + i; + }; + + test = "isArray"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, dataArray); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an array: " + result); + } + ], + + [ + function() + { + test = "getFloat"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a float: " + (typeof(result) == "number")); + } + ], + + [ + function() + { + test = "getObject"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns an object: " + (typeof(result) == "object")); + } + ], + + [ + function() + { + test = "isObject"; + layout1.warn("Calling '" + test + "'"); + obj = new Object(); + obj.s = "Hi there."; + obj.n = 23; + obj.o = new Object(); + obj.o.s = "This is a test."; + mycall = rpc.callAsync(handler, test, obj); + }, + + function(result) + { + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns an object: " + result); + } + ], + + [ + function() + { + test = "isBoolean"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, false); + }, + + function(result) + { + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean: " + result); + } + ], + + [ + function() + { + test = "isBoolean"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, true); + }, + + function(result) + { + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean: " + result); + } + ], + + [ + function() + { + test = "getTrue"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean = true: " + (typeof(result) == "boolean")); + } + ], + + [ + function() + { + test = "getFalse"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + layout1.warn("result: {" + result.toString() + "}"); + layout1.warn("Returns a boolean = false: " + (typeof(result) == "boolean")); + } + ], + + [ + function() + { + Date.prototype.classname = "Date"; + date = new Date(); + test = "getParam"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, date); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + layout1.warn("Returns a date object, got " + (result.classname == date.classname)); + layout1.warn("Returns matching time " + date.getTime() + " = " + result.getTime() + " :" + (result.getTime() == date.getTime())); + } + ], + + [ + function() + { + dataArray = new Array(); + dataArray[0] = true; + dataArray[1] = false; + dataArray[2] = 1; + dataArray[3] = 1.1; + dataArray[4] = "Hello World"; + dataArray[5] = new Array(5); + dataArray[6] = new Object(); + dataArray[7] = new Date(); + + test = "getParams"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test, dataArray[0], dataArray[1], dataArray[2], dataArray[3], dataArray[4], dataArray[5], dataArray[6], dataArray[7]); + }, + + function(result) + { + layout1.warn("result: {" + result + "}"); + + for (i=0; i< dataArray.length; i++) + { + layout1.warn("Returned parameter (" + i + ") value '" + result[i] + "' matches '" + dataArray[i] + "': " + (result[i].toString() == dataArray[i].toString())); + layout1.warn("Returned parameter (" + i + ") type '" + typeof(result[i]) + "' matches '" + typeof(dataArray[i]) + "': " + (typeof(result[i]) == typeof(dataArray[i]))); + }; + } + ], + + [ + function() + { + test = "getError"; + layout1.warn("Calling '" + test + "'"); + mycall = rpc.callAsync(handler, test); + }, + + function(result) + { + // should never get here; we should receive an exception + layout1.warn("ERROR: Should have received an exception! Got: " + result); + } + ] + ]; + + /* + * This is the generic handler, used by each of the tests. It + * ascertains whether an exception occured and alert()s with the + * exception if so; otherwise it calls the result validation function + * and then starts the next test. + */ + handler = function(result, ex, id) { + mycall = null; + if (ex !== null) { + alert("Async(" + id + ") exception: " + ex); + } else { + // display results of the completed test + tests[testNum][1](result); // [][1] = validate response + + // start the next test + ++testNum; + + // Are we done? + if (testNum < tests.length) { + // Nope. Run the next test. + tests[testNum][0](); + } + } + } + + // Determine which transport to use + rpc = new qx.io.remote.Rpc(url.getValue(), service.getValue()); + rpc.setTimeout(10000); + rpc.setCrossDomain(crossDomain.isChecked()); + + // start the first test + testNum = 0; + tests[testNum][0](); // [][0] = request + }); + + var d = qx.ui.core.ClientDocument.getInstance(); + d.add(layout1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_5.html new file mode 100644 index 0000000000..b23cdd2c86 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/RPC_5.html @@ -0,0 +1,95 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> + <script type="text/javascript" src=".qxrpc"></script> + <!-- With the above script, the service URL for a J2EE application can be + automatically determined, no matter on what path it's deployed. --> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p><strong>Only works together with a RPC backend!</strong></p> + <p>Test for RPC functionality.</p> + <p> + This test calls remote function getParams(), passing a defined field in + an object, and an undefined field in an object. Depending on the + setting of qx.core.Settings.jsonEncodeUndefined, the undefined field + should or should not be sent. We also send some (ignored) server data + in this test, if requested. + </p> + </div> + + <script type="text/javascript"> +// qx.Settings.setCustomOfClass("qx.io.remote.Exchange", "enableDebug", true); + qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true); + + qx.core.Init.getInstance().defineMain(function() { + var layout1 = new qx.ui.layout.VerticalBoxLayout(); + layout1.setTop(40); + layout1.setLeft(20); + layout1.setSpacing(4); + + var encodeUndefined = new qx.ui.form.CheckBox("Encode 'undefined' as null"); + layout1.add(encodeUndefined); + + var sendServerData = new qx.ui.form.CheckBox("Send server data"); + layout1.add(sendServerData); + + layout1.add(new qx.ui.basic.Label("URL:")); + var defaultURL = qx.io.remote.Rpc.makeServerURL(); + if (defaultURL == null) { + defaultURL = "/services/"; + } + var url = new qx.ui.form.TextField(defaultURL); + layout1.add(url); + + layout1.add(new qx.ui.basic.Label("Service:")); + var service = new qx.ui.form.TextField("qooxdoo.test"); + layout1.add(service); + + var start = new qx.ui.form.Button("Start test"); + layout1.add(start); + + // We'll be setting url and service upon execute; no need to do it now. + var rpc = new qx.io.remote.Rpc(); + rpc.setTimeout(10000); + var mycall = null; + + start.addEventListener("execute", function() { + // Allow the user to reset the URL and Service on each call + rpc.setUrl(url.getValue()); + rpc.setServiceName(service.getValue()); + rpc.setCrossDomain(false); + + if (sendServerData.isChecked()) { + rpc.setServerData(new Date()); + } else { + rpc.setServerData(undefined); + } + + qx.Settings.setCustomOfClass("qx.io.Json", "encodeUndefined", + encodeUndefined.isChecked()); + + try { + obj = new Object(); + obj.def = "defined"; + var result = rpc.callSync("getParams", obj.undef, obj.def); + alert("Sync result: " + result); + } catch (ex) { + alert("Sync exception: " + ex); + } + }); + + var d = qx.ui.core.ClientDocument.getInstance(); + d.add(layout1); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/SplitPane_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/SplitPane_1.html new file mode 100644 index 0000000000..8fd7b92af5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/SplitPane_1.html @@ -0,0 +1,91 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test for Splitpane functionality with enabled live resize.</p> + </div> + + <script type="text/javascript"> + + qx.core.Init.getInstance().defineMain(function() + { + var frame = new qx.ui.layout.CanvasLayout; + frame.setLocation(20, 48); + frame.setBottom(48); + frame.setRight(300); + frame.setBackgroundColor("#134275"); + frame.setPadding(20); + frame.addToDocument(); + + // the splitpane itself + var splitpane = new qx.ui.splitpane.HorizontalSplitPane("1*", "2*"); + splitpane.setEdge(0); + frame.add(splitpane); + + // left Widget + var leftWidget = new qx.ui.form.TextArea("LeftWidget"); + leftWidget.setWrap(true); + leftWidget.setBackgroundColor(new qx.renderer.color.Color("white")); + leftWidget.setWidth("100%"); + leftWidget.setHeight("100%"); + + // rightWidget (another splitpane) + var rightWidget = new qx.ui.splitpane.VerticalSplitPane; + rightWidget.setHeight("100%"); + rightWidget.setWidth("100%"); + + // add widgets to splitpane + splitpane.addLeft(leftWidget); + splitpane.addRight(rightWidget); + + + + // right top widget + var topWidget = new qx.ui.form.TextArea("Right Top Widget"); + topWidget.setBackgroundColor(new qx.renderer.color.Color("white")); + topWidget.setHeight("100%"); + topWidget.setWidth("100%"); + + // right bottom widget + var bottomWidget = new qx.ui.embed.Iframe("http://www.qooxdoo.org"); + bottomWidget.setHeight("100%"); + bottomWidget.setWidth("100%"); + + // add widgets to right splitpane + rightWidget.addTop(topWidget); + rightWidget.addBottom(bottomWidget); + + + + + var toggleButton = new qx.ui.form.Button("Toggle Layout", "icon/16/actions/view-refresh.png"); + toggleButton.setBottom(48); + toggleButton.setLeft(20); + toggleButton.addToDocument(); + toggleButton.addEventListener("execute", function(e) + { + if (splitpane.getOrientation() == "horizontal") + { + splitpane.setOrientation("vertical"); + rightWidget.setOrientation("horizontal"); + } + else + { + splitpane.setOrientation("horizontal"); + rightWidget.setOrientation("vertical"); + } + }); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_1.html new file mode 100644 index 0000000000..5a4c52aef2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_1.html @@ -0,0 +1,50 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>The default table using divs and nodeValue.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 100; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ left:10, top:30, right:300, bottom:30, border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + }; + + d.add(table); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_2.html new file mode 100644 index 0000000000..281039465e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_2.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>a table using divs and Array.join.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + qx.ui.table.TablePane.USE_ARRAY_JOIN = true; + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 100; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ left:10, top:30, right:300, bottom:30, border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + }; + + d.add(table); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_3.html new file mode 100644 index 0000000000..e03cff3a1f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_3.html @@ -0,0 +1,52 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A table using table elements and nodeValue.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // qx.ui.table.TablePane.USE_TABLE = true; + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 100; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ left:10, top:30, right:300, bottom:30, border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + }; + + d.add(table); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_4.html new file mode 100644 index 0000000000..a8dad6ded5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_4.html @@ -0,0 +1,53 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A table using table elements and Array.join.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + qx.ui.table.TablePane.USE_TABLE = true; + qx.ui.table.TablePane.USE_ARRAY_JOIN = true; + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 100; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ left:10, top:30, right:300, bottom:30, border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + }; + + d.add(table); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_5.html new file mode 100644 index 0000000000..6a7ad4d228 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Table_5.html @@ -0,0 +1,55 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>A table having few rows.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + //qx.log.Logger.ROOT_LOGGER.addAppender(new qx.log.WindowAppender); + + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 20; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ left:10, top:30, right:300, bottom:30, border:qx.renderer.border.BorderPresets.getInstance().thinInset }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + setColumnWidth(0, 80); + setColumnWidth(1, 200); + setColumnWidth(2, 150); + }; + + d.add(table); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_1.html new file mode 100644 index 0000000000..1d434c1211 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_1.html @@ -0,0 +1,227 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Introduce qx.ui.menu.Menu which opens on qx.ui.toolbar.ToolBarMenuButtons.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var tb = new qx.ui.toolbar.ToolBar; + with(tb) + { + setTop(48); + setLeft(20); + setRight(335); + }; + + var m1 = new qx.ui.menu.Menu; + + var mb1 = new qx.ui.menu.Button("Folder"); + var ms1 = new qx.ui.menu.Separator; + var mb2 = new qx.ui.menu.Button("Word Document"); + var mb3 = new qx.ui.menu.Button("Text File"); + var mb4 = new qx.ui.menu.Button("Image"); + + m1.add(mb1, ms1, mb2, mb3, mb4); + d.add(m1); + + + var m2 = new qx.ui.menu.Menu; + + var mb5 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png"); + var mb6 = new qx.ui.menu.Button("Move", "icon/16/actions/edit-cut.png"); + var mb7 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png"); + + m2.add(mb5, mb6, mb7); + d.add(m2); + + + + + var btns1 = [ + { type : "menu", icon : "actions/document-new", label : "New", menu : m1 }, + { type : "menu", icon : "apps/accessories-text-editor", label : "Edit", menu : m2 } + ]; + + var btns2 = [ + { type : "button", icon : "actions/go-up", label : "Upload" }, + { type : "button", icon : "actions/go-down", label : "Download" } + ]; + + var btns3 = [ + { type : "button", icon : "apps/accessories-tip", label : "Tip" }, + { type : "button", icon : "actions/help-faq", label : "Help" } + ]; + + var bars = [ btns1, btns2, btns3 ]; + + function changeLayout(e) { + this.setShow(e.getData()); + }; + + var useParts = true; + + + for (var j=0; j<bars.length; j++) + { + var btns = bars[j]; + + if (useParts) { + var tbp = new qx.ui.toolbar.Part; + }; + + for (var i=0; i<btns.length; i++) + { + var btn = btns[i]; + + switch(btn.type) + { + case "separator": + var o = new qx.ui.toolbar.Separator; + break; + + case "menu": + var o = new qx.ui.toolbar.MenuButton(btn.label, btn.menu, "icon/22/" + btn.icon + ".png", 22, 22); + + // beautiful decoupling: toolbar buttons don't know about radio boxes + + // uncomment this to omit changes on one button + // if (btn.icon != "upload") + d.addEventListener("changeLayout", changeLayout, o ); + break; + + case "button": + var o = new qx.ui.toolbar.Button(btn.label, "icon/22/" + btn.icon + ".png"); + + // beautiful decoupling: toolbar buttons don't know about radio boxes + + // uncomment this to omit changes on one button + // if (btn.icon != "upload") + d.addEventListener("changeLayout", changeLayout, o ); + break; + }; + + if (useParts) + { + tbp.add(o); + } + else + { + tb.add(o); + }; + }; + + if (useParts) { + tb.add(tbp); + }; + }; + + d.add(tb); + + + var rd1 = new qx.ui.form.RadioButton("Show Icons and Label", "both"); + var rd2 = new qx.ui.form.RadioButton("Show Icons", "icon"); + var rd3 = new qx.ui.form.RadioButton("Show Label", "label"); + + with(rd1) + { + setTop(140); + setLeft(20); + setChecked(true); + }; + + with(rd2) + { + setTop(160); + setLeft(20); + }; + + with(rd3) + { + setTop(180); + setLeft(20); + }; + + + var rbm = new qx.manager.selection.RadioManager(); + + rbm.add(rd1); + rbm.add(rd2); + rbm.add(rd3); + + + // beautiful decoupling: radio boxes don't know about toolbar buttons + rbm.addEventListener("changeSelected", function(e) { + d.dispatchEvent( new qx.event.type.DataEvent("changeLayout", e.getData().getValue() ) ); + }); + + d.add(rd1, rd2, rd3); + + + + + + // Alignment + var ra1 = new qx.ui.form.RadioButton("Left Aligned", "left"); + var ra2 = new qx.ui.form.RadioButton("Centered", "center"); + var ra3 = new qx.ui.form.RadioButton("Right Aligned", "right"); + + with(ra1) + { + setTop(140); + setLeft(220); + setChecked(true); + }; + + with(ra2) + { + setTop(160); + setLeft(220); + }; + + with(ra3) + { + setTop(180); + setLeft(220); + }; + + + var ram = new qx.manager.selection.RadioManager(); + + ram.add(ra1); + ram.add(ra2); + ram.add(ra3); + + d.add(ra1, ra2, ra3); + + ram.addEventListener("changeSelected", function(e) { + tb.setHorizontalChildrenAlign(e.getData().getValue()); + }); + + + + + + + + // Icon & Color Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 248); + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 248); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_2.html new file mode 100644 index 0000000000..c967dd2cd3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_2.html @@ -0,0 +1,113 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Create ten toolbars. Stress Test.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var btns1 = [ + { type : "button", icon : "document-new", text : "New" }, + { type : "separator" }, + { type : "button", icon : "edit-copy", text : "Copy" }, + { type : "button", icon : "edit-cut", text : "Cut" }, + { type : "button", icon : "edit-paste", text : "Paste" } + ]; + + var btns2 = [ + { type : "button", icon : "go-up", text : "Upload" }, + { type : "button", icon : "go-down", text : "Download" } + ]; + + var btns3 = [ + { type : "button", icon : "help-faq", text : "Hilfe" } + ]; + + var bars = [ btns1, btns2, btns3 ]; + + function changeLayout(e) { + this.setShow(e.getData()); + }; + + function changeSize(e) { + var v = e.getData(); + var o = v == 22 ? 32 : 22; + + this.setIcon(this.getIcon().replace(o, v)); + }; + + var useParts = true; + + for (var k=0; k<10; k++) + { + var tb = new qx.ui.toolbar.ToolBar; + with(tb) + { + setTop(48+(k*50)); + setLeft(20); + setRight(335); + }; + + for (var j=0; j<bars.length; j++) + { + var btns = bars[j]; + + if (useParts) { + var tbp = new qx.ui.toolbar.Part; + }; + + for (var i=0; i<btns.length; i++) + { + var btn = btns[i]; + + switch(btn.type) + { + case "separator": + var o = new qx.ui.toolbar.Separator; + break; + + case "button": + var o = new qx.ui.toolbar.Button(btn.text, "icon/22/actions/" + btn.icon + ".png"); + + // beautiful decoupling: toolbar buttons don't know about radio boxes + + d.addEventListener("changeLayout", changeLayout, o); + d.addEventListener("changeSize", changeSize, o); + break; + }; + + if (useParts) + { + tbp.add(o); + } + else + { + tb.add(o); + }; + }; + + if (useParts) { + tb.add(tbp); + }; + }; + + d.add(tb); + }; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_3.html new file mode 100644 index 0000000000..e9c9320287 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_3.html @@ -0,0 +1,39 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing the new flash support for qx.ui.toolbar.ToolBarButtons (inherited from qx.ui.basic.Atom).</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var tb = new qx.ui.toolbar.ToolBar; + + tb.setTop(48); + tb.setLeft(20); + tb.setRight(335); + + d.add(tb); + + for (var i=1; i<8; i++) + { + var tbb = new qx.ui.toolbar.Button("Flash #" + i, "icon/22/actions/view-refresh.png", 22, 22, "./image/flash/color/file" + i + ".swf"); + tb.add(tbb); + }; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_4.html new file mode 100644 index 0000000000..290eb5d380 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/ToolBar_4.html @@ -0,0 +1,193 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Again a nice example which shows how to use qx.ui.toolbar.ToolBar as a menubar system.</p> + <p>Added some parts and a new flex zone which aligns the help button to the right edge</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var c1 = new qx.client.Command(); + c1.addEventListener("execute", function(e) { + this.debug("Execute: " + e.getData().getLabel()); + }); + + + + + var m1 = new qx.ui.menu.Menu; + + var mb1_01 = new qx.ui.menu.Button("New", null, c1); + var mb1_02 = new qx.ui.menu.Button("Open", null, c1); + var mb1_03 = new qx.ui.menu.Button("Save", null, c1); + var mb1_04 = new qx.ui.menu.Button("Save as", null, c1); + var mb1_05 = new qx.ui.menu.Button("Close", null, c1); + var mb1_06 = new qx.ui.menu.Button("Restore last saved", null, c1); + + m1.add(mb1_01, mb1_02, mb1_03, mb1_04, mb1_05, mb1_06); + + + var m2 = new qx.ui.menu.Menu; + + var mb2_01 = new qx.ui.menu.Button("Undo", null, c1); + var mb2_02 = new qx.ui.menu.Button("Redo", null, c1); + var mb2_b1 = new qx.ui.menu.Separator(); + var mb2_03 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png", c1); + var mb2_04 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png", c1); + var mb2_05 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png", c1); + var mb2_06 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png", c1); + var mb2_b2 = new qx.ui.menu.Separator(); + var mb2_07 = new qx.ui.menu.Button("Select All", null, c1); + var mb2_08 = new qx.ui.menu.Button("Find", null, c1); + var mb2_09 = new qx.ui.menu.Button("Find Again", null, c1); + + + + + mb2_05.setEnabled(false); + mb2_06.setEnabled(false); + mb2_09.setEnabled(false); + + m2.add(mb2_01, mb2_02, mb2_b1, mb2_03, mb2_04, mb2_05, mb2_06, mb2_b2, mb2_07, mb2_08, mb2_09); + + + var m3 = new qx.ui.menu.Menu; + var m3_suba = new qx.ui.menu.Menu; + var m3_subb = new qx.ui.menu.Menu; + var m3_subc = new qx.ui.menu.Menu; + var m3_subd = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.CheckBox("File List", c1, false); + var mb3_02 = new qx.ui.menu.CheckBox("Syntax Highlighting", c1, true); + var mb3_03 = new qx.ui.menu.CheckBox("Statusbar", c1, true); + var mb3_b1 = new qx.ui.menu.Separator(); + var mb3_04 = new qx.ui.menu.Button("Printer Font", null, null, m3_suba); + var mb3_05 = new qx.ui.menu.Button("Editor Font", null, null, m3_subb); + var mb3_06 = new qx.ui.menu.Button("Export Font", null, null, m3_subc); + var mb3_b2 = new qx.ui.menu.Separator(); + var mb3_07 = new qx.ui.menu.Button("Advanced", null, null, m3_subd); + + m3.add(mb3_01, mb3_02, mb3_03, mb3_b1, mb3_04, mb3_05, mb3_06, mb3_b2, mb3_07); + + var mb3_suba_01 = new qx.ui.menu.Button("Tahoma, 11pt", null, c1); + var mb3_suba_02 = new qx.ui.menu.Button("Tahoma, 12pt", null, c1); + var mb3_suba_03 = new qx.ui.menu.Button("Tahoma, 13pt", null, c1); + var mb3_suba_04 = new qx.ui.menu.Button("Tahoma, 14pt", null, c1); + var mb3_suba_05 = new qx.ui.menu.Button("Tahoma, 15pt", null, c1); + + m3_suba.add(mb3_suba_01, mb3_suba_02, mb3_suba_03, mb3_suba_04, mb3_suba_05); + + var mb3_subb_01 = new qx.ui.menu.Button("Verdana, 11pt", null, c1); + var mb3_subb_02 = new qx.ui.menu.Button("Verdana, 12pt", null, c1); + var mb3_subb_03 = new qx.ui.menu.Button("Verdana, 13pt", null, c1); + var mb3_subb_04 = new qx.ui.menu.Button("Verdana, 14pt", null, c1); + var mb3_subb_05 = new qx.ui.menu.Button("Verdana, 15pt", null, c1); + + m3_subb.add(mb3_subb_01, mb3_subb_02, mb3_subb_03, mb3_subb_04, mb3_subb_05); + + var mb3_subc_01 = new qx.ui.menu.Button("Courier, 11pt", null, c1); + var mb3_subc_02 = new qx.ui.menu.Button("Courier, 12pt", null, c1); + var mb3_subc_03 = new qx.ui.menu.Button("Courier, 13pt", null, c1); + var mb3_subc_04 = new qx.ui.menu.Button("Courier, 14pt", null, c1); + var mb3_subc_05 = new qx.ui.menu.Button("Courier, 15pt", null, c1); + + m3_subc.add(mb3_subc_01, mb3_subc_02, mb3_subc_03, mb3_subc_04, mb3_subc_05); + + var mb3_subd_02_suba = new qx.ui.menu.Menu(); + + var mb3_subd_02_suba_01 = new qx.ui.menu.Button("First", null, c1); + var mb3_subd_02_suba_02 = new qx.ui.menu.Button("Second", null, c1); + var mb3_subd_02_suba_03 = new qx.ui.menu.Button("Third", null, c1); + + mb3_subd_02_suba.add(mb3_subd_02_suba_01, mb3_subd_02_suba_02, mb3_subd_02_suba_03); + + var mb3_subd_01 = new qx.ui.menu.Button("First", null, c1); + var mb3_subd_02 = new qx.ui.menu.Button("Second", null, c1, mb3_subd_02_suba); + var mb3_subd_03 = new qx.ui.menu.Button("Third", null, c1); + + m3_subd.add(mb3_subd_01, mb3_subd_02, mb3_subd_03); + + var m4 = new qx.ui.menu.Menu; + + var m4_suba = new qx.ui.menu.Menu; + + var mb4_01 = new qx.ui.menu.Button("View", null, c1, m4_suba); + var mb4_b1 = new qx.ui.menu.Separator(); + var mb4_02 = new qx.ui.menu.Button("Editor Preferences...", null, c1); + var mb4_03 = new qx.ui.menu.Button("Editor Extensions", null, c1); + var mb4_04 = new qx.ui.menu.Button("Framework Preferences", null, c1); + + m4.add(mb4_01, mb4_b1, mb4_02, mb4_03, mb4_04); + + var mb4_suba_01 = new qx.ui.menu.Button("New Window", null, c1); + var mb4_suba_b1 = new qx.ui.menu.Separator(); + var mb4_suba_02 = new qx.ui.menu.RadioButton("Overlapping", c1, true); + var mb4_suba_03 = new qx.ui.menu.RadioButton("Split Horizontally", c1); + var mb4_suba_04 = new qx.ui.menu.RadioButton("Split Vertically", c1); + var mb4_suba_b2 = new qx.ui.menu.Separator(); + var mb4_suba_05 = new qx.ui.menu.Button("Next Window", null, c1); + var mb4_suba_06 = new qx.ui.menu.Button("Previous Window", null, c1); + + m4_suba.add(mb4_suba_01, mb4_suba_b1, mb4_suba_02, mb4_suba_03, mb4_suba_04, mb4_suba_b2, mb4_suba_05, mb4_suba_06); + + var mb4_manager = new qx.manager.selection.RadioManager("windowMode", [ mb4_suba_02, mb4_suba_03, mb4_suba_04 ]); + + + var m5 = new qx.ui.menu.Menu; + + var mb5_01 = new qx.ui.menu.Button("Help", null, c1); + var mb5_02 = new qx.ui.menu.Button("About", null, c1); + + m5.add(mb5_01, mb5_02); + + d.add(m1, m2, m3, m3_suba, m3_subb, m3_subc, m3_subd, mb3_subd_02_suba, m4, m4_suba, m5); + + + var mb1 = new qx.ui.toolbar.ToolBar; + + mb1.setTop(48); + mb1.setRight(335); + mb1.setLeft(20); + + var mp1 = new qx.ui.toolbar.Part; + var mp2 = new qx.ui.toolbar.Part; + var mp3 = new qx.ui.toolbar.Part; + + mb1.add(mp1, mp2, new qx.ui.basic.HorizontalSpacer, mp3); + + var mbb1 = new qx.ui.toolbar.MenuButton("File", m1); + var mbb2 = new qx.ui.toolbar.MenuButton("Edit", m2); + var mbb3 = new qx.ui.toolbar.MenuButton("View", m3); + var mbb4 = new qx.ui.toolbar.MenuButton("Options", m4); + var mbb5 = new qx.ui.toolbar.MenuButton("Help", m5); + + mp1.add(mbb1, mbb2); + mp2.add(mbb3, mbb4); + mp3.add(mbb5); + + d.add(mb1); + + + + + // Icon & Color Themes + qx.manager.object.ImageManager.getInstance().createThemeList(d, 20, 348); + qx.manager.object.ColorManager.getInstance().createThemeList(d, 220, 348); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_1.html new file mode 100644 index 0000000000..e8256aa2b3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_1.html @@ -0,0 +1,196 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Simple test for qooxdoo's transport implementation using some data for an addressbook.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var lay = new qx.ui.layout.VerticalBoxLayout; + lay.setLocation(20, 48); + lay.setRight(335); + lay.setBottom(48); + qx.ui.core.ClientDocument.getInstance().add(lay); + + + + var fsq = new qx.ui.groupbox.GroupBox("Request"); + fsq.setHeight("auto"); + lay.add(fsq); + + + var hlay = new qx.ui.layout.HorizontalBoxLayout; + hlay.setVerticalChildrenAlign("middle"); + hlay.setSpacing(4); + hlay.auto(); + fsq.add(hlay); + + + var cm1 = new qx.ui.form.ComboBox(); + cm1.add(new qx.ui.form.ListItem("data/persons/anita.xml")); + cm1.add(new qx.ui.form.ListItem("data/persons/harald.xml")); + cm1.add(new qx.ui.form.ListItem("data/persons/lisbeth.xml")); + cm1.add(new qx.ui.form.ListItem("data/persons/paul.xml")); + cm1.setSelected(cm1.getList().getFirstChild()); + cm1.setWidth(200); + cm1.addEventListener("changeSelected", upd); + + hlay.add(cm1); + + + + var async = new qx.ui.form.CheckBox("Async"); + async.setChecked(true); + hlay.add(async); + + + var spin = new qx.ui.form.Spinner(1); + hlay.add(spin); + + + + var btn = new qx.ui.form.Button("Send", "icon/16/actions/dialog-ok.png"); + btn.addEventListener("execute", upd); + hlay.add(btn); + + + var inf = new qx.ui.form.TextField("State"); + inf.setWidth(80); + inf.setReadOnly(true); + hlay.add(inf); + + + var code = new qx.ui.form.TextField("Code"); + code.setWidth(30); + code.setReadOnly(true); + hlay.add(code); + + + var typ = new qx.ui.form.TextField("Type"); + typ.setWidth(80); + typ.setReadOnly(true); + hlay.add(typ); + + + var len = new qx.ui.form.TextField("Length"); + len.setWidth(50); + len.setReadOnly(true); + hlay.add(len); + + + var checken = new qx.ui.form.CheckBox("enabled"); + checken.setChecked(true); + hlay.add(checken); + + checken.addEventListener("changeChecked", function(e) { + qx.io.remote.RequestQueue.getInstance().setEnabled(e.getData()); + }); + + + + + + var fsr = new qx.ui.groupbox.GroupBox("Result"); + fsr.setHeight("1*"); + lay.add(fsr); + + var area = new qx.ui.form.TextArea; + area.setDimension("100%", "100%"); + fsr.add(area); + + + + + + + + + + + function upd(e) + { + var val = cm1.getSelected(); + + if (!val) { + return; + }; + + var req; + for( var i=0, max=parseInt(spin.getValue()); i<max; i++ ) + { + req = new qx.io.remote.Request(val.getLabel(), "GET", qx.util.Mime.TEXT); + + req.setAsynchronous(async.getChecked()); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + + req.setParameter("test1", "value1"); + req.setParameter("test2", "value2"); + req.setParameter("test3", "value3"); + + req.setCrossDomain(false); + + req.addEventListener("sending", function(e) { + inf.setValue("Sending"); + }); + + req.addEventListener("receiving", function(e) { + inf.setValue("Receiving"); + }); + + req.addEventListener("completed", function(e) + { + inf.setValue("Completed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.addEventListener("failed", function(e) + { + inf.setValue("Failed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.addEventListener("timeout", function(e) + { + inf.setValue("Timeout"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.addEventListener("aborted", function(e) + { + inf.setValue("Aborted"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.send(); + }; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_2.html new file mode 100644 index 0000000000..07244865fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_2.html @@ -0,0 +1,189 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing different file sizes with timeouts and other built-in transport features.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var lay = new qx.ui.layout.VerticalBoxLayout; + lay.setLocation(20, 48); + lay.setRight(335); + lay.setBottom(48); + qx.ui.core.ClientDocument.getInstance().add(lay); + + + + var fsq = new qx.ui.groupbox.GroupBox("Request"); + fsq.setHeight("auto"); + lay.add(fsq); + + + var hlay = new qx.ui.layout.HorizontalBoxLayout; + hlay.setVerticalChildrenAlign("middle"); + hlay.setSpacing(4); + hlay.auto(); + fsq.add(hlay); + + + var cm1 = new qx.ui.form.ComboBox(); + cm1.add(new qx.ui.form.ListItem("data/filesize/40kb.xml")); + cm1.add(new qx.ui.form.ListItem("data/filesize/400kb.xml")); + cm1.setSelected(cm1.getList().getFirstChild()); + cm1.setWidth(200); + cm1.addEventListener("changeSelected", upd); + + hlay.add(cm1); + + + + var async = new qx.ui.form.CheckBox("Async"); + async.setChecked(true); + hlay.add(async); + + + var spin = new qx.ui.form.Spinner(1); + hlay.add(spin); + + + + var btn = new qx.ui.form.Button("Send", "icon/16/actions/dialog-ok.png"); + btn.addEventListener("execute", upd); + hlay.add(btn); + + + var inf = new qx.ui.form.TextField("State"); + inf.setWidth(80); + hlay.add(inf); + + + var code = new qx.ui.form.TextField("Code"); + code.setWidth(30); + hlay.add(code); + + + var typ = new qx.ui.form.TextField("Type"); + typ.setWidth(80); + typ.setReadOnly(true); + hlay.add(typ); + + + var len = new qx.ui.form.TextField("Length"); + len.setWidth(50); + len.setReadOnly(true); + hlay.add(len); + + + + + var checken = new qx.ui.form.CheckBox("enabled"); + checken.setChecked(true); + hlay.add(checken); + + checken.addEventListener("changeChecked", function(e) { + qx.io.remote.RequestQueue.getInstance().setEnabled(e.getData()); + }); + + + + + + var fsr = new qx.ui.groupbox.GroupBox("Result"); + fsr.setHeight("1*"); + lay.add(fsr); + + var area = new qx.ui.basic.Label("Disabled because of large filesize"); + fsr.add(area); + + + + + + + + + + function upd(e) + { + var val = cm1.getSelected(); + + if (!val) { + return; + }; + + var req; + for( var i=0, max=parseInt(spin.getValue()); i<max; i++ ) + { + req = new qx.io.remote.Request(val.getLabel(), "GET", qx.util.Mime.TEXT); + + req.setAsynchronous(async.getChecked()); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + + req.setParameter("test1", "value1"); + req.setParameter("test2", "value2"); + req.setParameter("test3", "value3"); + + // Force to testing iframe implementation + // req.setCrossDomain(true); + + req.addEventListener("sending", function(e) { + inf.setValue("Sending"); + }); + + req.addEventListener("receiving", function(e) { + inf.setValue("Receiving"); + }); + + req.addEventListener("completed", function(e) + { + inf.setValue("Completed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.addEventListener("failed", function(e) + { + inf.setValue("Failed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.addEventListener("timeout", function(e) + { + inf.setValue("Timeout"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.addEventListener("aborted", function(e) + { + inf.setValue("Aborted"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.send(); + }; + }; + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_3.html new file mode 100644 index 0000000000..b59fc914e6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_3.html @@ -0,0 +1,114 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing multiple parallel requests of files with different sizes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var lab1 = new qx.ui.basic.Label("40KB"); + var lab2 = new qx.ui.basic.Label("400KB"); + + var spin1 = new qx.ui.form.Spinner(0, 3, 50); + var spin2 = new qx.ui.form.Spinner(0, 3, 20); + + + + + var grid = new qx.ui.layout.GridLayout; + + grid.setLocation(20, 48); + grid.setDimension("auto", "auto"); + grid.setHorizontalSpacing(10); + grid.setVerticalSpacing(4); + grid.setBorder(qx.renderer.border.BorderPresets.getInstance().thinOutset); + grid.setBackgroundColor("white"); + grid.setPadding(10); + + grid.setColumnCount(2); + grid.setRowCount(2); + + grid.setColumnWidth(0, 50); + grid.setColumnWidth(1, 50); + + grid.setRowHeight(0, 18); + grid.setRowHeight(1, 22); + + qx.ui.core.ClientDocument.getInstance().add(grid); + + grid.add(lab1, 0, 0); + grid.add(lab2, 1, 0); + + grid.add(spin1, 0, 1); + grid.add(spin2, 1, 1); + + + + var btn = new qx.ui.form.Button("Send", "icon/16/actions/dialog-ok.png"); + btn.setLocation(20, 120); + qx.ui.core.ClientDocument.getInstance().add(btn); + + + + var area = new qx.ui.form.TextArea(""); + area.setLocation(20, 154); + area.setDimension(192, 400); + qx.ui.core.ClientDocument.getInstance().add(area); + + + + btn.addEventListener("execute", function(e) + { + var s1 = parseInt(spin1.getValue()); + var s2 = parseInt(spin2.getValue()); + + while ((s1+s2) > 0) + { + if (s1 > 0) + { + makeRequest(40); + s1--; + }; + + if (s2 > 0) + { + makeRequest(400); + s2--; + }; + }; + }); + + function makeRequest(size) + { + var req = new qx.io.remote.Request("data/filesize/" + size + "kb.xml", "GET", qx.util.Mime.XML); + + req.addEventListener("completed", function(e) { + area.setValue(area.getValue() + "Request " + size + "kb: completed\n"); + }); + + req.addEventListener("failed", function(e) { + area.setValue(area.getValue() + "Request " + size + "kb: failed\n"); + }); + + req.addEventListener("timeout", function(e) { + area.setValue(area.getValue() + "Request " + size + "kb: timeout\n"); + }); + + req.send(); + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_4.html new file mode 100644 index 0000000000..93349c45d2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_4.html @@ -0,0 +1,198 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Simple test for qooxdoo's transport implementation using some data for an addressbook.</p> + <p>Using text content in this case.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var lay = new qx.ui.layout.VerticalBoxLayout; + lay.setLocation(20, 48); + lay.setRight(335); + lay.setBottom(48); + qx.ui.core.ClientDocument.getInstance().add(lay); + + + + var fsq = new qx.ui.groupbox.GroupBox("Request"); + fsq.setHeight("auto"); + lay.add(fsq); + + + var hlay = new qx.ui.layout.HorizontalBoxLayout; + hlay.setVerticalChildrenAlign("middle"); + hlay.setSpacing(4); + hlay.auto(); + fsq.add(hlay); + + + var cm1 = new qx.ui.form.ComboBox(); + cm1.add(new qx.ui.form.ListItem("data/persons/anita.txt")); + cm1.add(new qx.ui.form.ListItem("data/persons/harald.txt")); + cm1.add(new qx.ui.form.ListItem("data/persons/lisbeth.txt")); + cm1.add(new qx.ui.form.ListItem("data/persons/paul.txt")); + cm1.setSelected(cm1.getList().getFirstChild()); + cm1.setWidth(200); + cm1.addEventListener("changeSelected", upd); + + hlay.add(cm1); + + + + var async = new qx.ui.form.CheckBox("Async"); + async.setChecked(true); + hlay.add(async); + + + var spin = new qx.ui.form.Spinner(1); + hlay.add(spin); + + + + var btn = new qx.ui.form.Button("Send", "icon/16/actions/dialog-ok.png"); + btn.addEventListener("execute", upd); + hlay.add(btn); + + + var inf = new qx.ui.form.TextField("State"); + inf.setWidth(80); + inf.setReadOnly(true); + hlay.add(inf); + + + var code = new qx.ui.form.TextField("Code"); + code.setWidth(30); + code.setReadOnly(true); + hlay.add(code); + + + var typ = new qx.ui.form.TextField("Type"); + typ.setWidth(80); + typ.setReadOnly(true); + hlay.add(typ); + + + var len = new qx.ui.form.TextField("Length"); + len.setWidth(50); + len.setReadOnly(true); + hlay.add(len); + + + var checken = new qx.ui.form.CheckBox("enabled"); + checken.setChecked(true); + hlay.add(checken); + + checken.addEventListener("changeChecked", function(e) { + qx.io.remote.RequestQueue.getInstance().setEnabled(e.getData()); + }); + + + + + + var fsr = new qx.ui.groupbox.GroupBox("Result"); + fsr.setHeight("1*"); + lay.add(fsr); + + var area = new qx.ui.form.TextArea; + area.setDimension("100%", "100%"); + fsr.add(area); + + + + + + + + + + + function upd(e) + { + var val = cm1.getSelected(); + + if (!val) { + return; + }; + + var req; + for( var i=0, max=parseInt(spin.getValue()); i<max; i++ ) + { + req = new qx.io.remote.Request(val.getLabel(), "GET", qx.util.Mime.TEXT); + + req.setAsynchronous(async.getChecked()); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + + req.setParameter("test1", "value1"); + req.setParameter("test2", "value2"); + req.setParameter("test3", "value3"); + + // Force to testing iframe implementation + // req.setCrossDomain(true); + + req.addEventListener("sending", function(e) { + inf.setValue("Sending"); + }); + + req.addEventListener("receiving", function(e) { + inf.setValue("Receiving"); + }); + + req.addEventListener("completed", function(e) + { + inf.setValue("Completed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.addEventListener("failed", function(e) + { + inf.setValue("Failed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.addEventListener("timeout", function(e) + { + inf.setValue("Timeout"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.addEventListener("aborted", function(e) + { + inf.setValue("Aborted"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setValue(e.getData().getContent()); + }); + + req.send(); + }; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_5.html new file mode 100644 index 0000000000..6c7ffb34cd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_5.html @@ -0,0 +1,198 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Simple test for qooxdoo's transport implementation using some data for an addressbook.</p> + <p>Using html content in this case.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var lay = new qx.ui.layout.VerticalBoxLayout; + lay.setLocation(20, 48); + lay.setRight(335); + lay.setBottom(48); + qx.ui.core.ClientDocument.getInstance().add(lay); + + + + var fsq = new qx.ui.groupbox.GroupBox("Request"); + fsq.setHeight("auto"); + lay.add(fsq); + + + var hlay = new qx.ui.layout.HorizontalBoxLayout; + hlay.setVerticalChildrenAlign("middle"); + hlay.setSpacing(4); + hlay.auto(); + fsq.add(hlay); + + + var cm1 = new qx.ui.form.ComboBox(); + cm1.add(new qx.ui.form.ListItem("data/persons/anita.html")); + cm1.add(new qx.ui.form.ListItem("data/persons/harald.html")); + cm1.add(new qx.ui.form.ListItem("data/persons/lisbeth.html")); + cm1.add(new qx.ui.form.ListItem("data/persons/paul.html")); + cm1.setSelected(cm1.getList().getFirstChild()); + cm1.setWidth(200); + cm1.addEventListener("changeSelected", upd); + + hlay.add(cm1); + + + + var async = new qx.ui.form.CheckBox("Async"); + async.setChecked(true); + hlay.add(async); + + + var spin = new qx.ui.form.Spinner(1); + hlay.add(spin); + + + + var btn = new qx.ui.form.Button("Send", "icon/16/actions/dialog-ok.png"); + btn.addEventListener("execute", upd); + hlay.add(btn); + + + var inf = new qx.ui.form.TextField("State"); + inf.setWidth(80); + inf.setReadOnly(true); + hlay.add(inf); + + + var code = new qx.ui.form.TextField("Code"); + code.setWidth(30); + code.setReadOnly(true); + hlay.add(code); + + + var typ = new qx.ui.form.TextField("Type"); + typ.setWidth(80); + typ.setReadOnly(true); + hlay.add(typ); + + + var len = new qx.ui.form.TextField("Length"); + len.setWidth(50); + len.setReadOnly(true); + hlay.add(len); + + + var checken = new qx.ui.form.CheckBox("enabled"); + checken.setChecked(true); + hlay.add(checken); + + checken.addEventListener("changeChecked", function(e) { + qx.io.remote.RequestQueue.getInstance().setEnabled(e.getData()); + }); + + + + + + var fsr = new qx.ui.groupbox.GroupBox("Result"); + fsr.setHeight("1*"); + lay.add(fsr); + + var area = new qx.ui.embed.HtmlEmbed(" "); + area.setDimension("100%", "100%"); + fsr.add(area); + + + + + + + + + + + function upd(e) + { + var val = cm1.getSelected(); + + if (!val) { + return; + }; + + var req; + for( var i=0, max=parseInt(spin.getValue()); i<max; i++ ) + { + req = new qx.io.remote.Request(val.getLabel(), "GET", qx.util.Mime.HTML); + + req.setAsynchronous(async.getChecked()); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + + req.setParameter("test1", "value1"); + req.setParameter("test2", "value2"); + req.setParameter("test3", "value3"); + + // Force to testing iframe implementation + // req.setCrossDomain(true); + + req.addEventListener("sending", function(e) { + inf.setValue("Sending"); + }); + + req.addEventListener("receiving", function(e) { + inf.setValue("Receiving"); + }); + + req.addEventListener("completed", function(e) + { + inf.setValue("Completed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setHtml(e.getData().getContent()); + }); + + req.addEventListener("failed", function(e) + { + inf.setValue("Failed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setHtml(e.getData().getContent()); + }); + + req.addEventListener("timeout", function(e) + { + inf.setValue("Timeout"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setHtml(e.getData().getContent()); + }); + + req.addEventListener("aborted", function(e) + { + inf.setValue("Aborted"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + area.setHtml(e.getData().getContent()); + }); + + req.send(); + }; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_6.html new file mode 100644 index 0000000000..22fac63463 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Transport_6.html @@ -0,0 +1,222 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Simple test for qooxdoo's transport implementation using some data for an addressbook.</p> + <p>Using javascript/json content in this case.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var lay = new qx.ui.layout.VerticalBoxLayout; + lay.setLocation(20, 48); + lay.setRight(335); + lay.setBottom(48); + qx.ui.core.ClientDocument.getInstance().add(lay); + + + + var fsq = new qx.ui.groupbox.GroupBox("Request"); + fsq.setHeight("auto"); + lay.add(fsq); + + + var hlay = new qx.ui.layout.HorizontalBoxLayout; + hlay.setVerticalChildrenAlign("middle"); + hlay.setSpacing(4); + hlay.auto(); + fsq.add(hlay); + + + var cm1 = new qx.ui.form.ComboBox(); + cm1.add(new qx.ui.form.ListItem("data/persons/anita.js")); + cm1.add(new qx.ui.form.ListItem("data/persons/harald.js")); + cm1.add(new qx.ui.form.ListItem("data/persons/lisbeth.js")); + cm1.add(new qx.ui.form.ListItem("data/persons/paul.js")); + cm1.setSelected(cm1.getList().getFirstChild()); + cm1.setWidth(200); + cm1.addEventListener("changeSelected", upd); + + hlay.add(cm1); + + + + var async = new qx.ui.form.CheckBox("Async"); + async.setChecked(true); + hlay.add(async); + + + var spin = new qx.ui.form.Spinner(1); + hlay.add(spin); + + + + var btn = new qx.ui.form.Button("Send", "icon/16/actions/dialog-ok.png"); + btn.addEventListener("execute", upd); + hlay.add(btn); + + + var inf = new qx.ui.form.TextField("State"); + inf.setWidth(80); + inf.setReadOnly(true); + hlay.add(inf); + + + var code = new qx.ui.form.TextField("Code"); + code.setWidth(30); + code.setReadOnly(true); + hlay.add(code); + + + var typ = new qx.ui.form.TextField("Type"); + typ.setWidth(80); + typ.setReadOnly(true); + hlay.add(typ); + + + var len = new qx.ui.form.TextField("Length"); + len.setWidth(50); + len.setReadOnly(true); + hlay.add(len); + + + var checken = new qx.ui.form.CheckBox("enabled"); + checken.setChecked(true); + hlay.add(checken); + + checken.addEventListener("changeChecked", function(e) { + qx.io.remote.RequestQueue.getInstance().setEnabled(e.getData()); + }); + + + + + + var fsr = new qx.ui.groupbox.GroupBox("Result"); + fsr.setHeight("1*"); + lay.add(fsr); + + var area = new qx.ui.layout.VerticalBoxLayout; + area.setSpacing(6); + area.setDimension("100%", "100%"); + fsr.add(area); + + + + var fgivenname = new qx.ui.basic.Label("Given Name"); + var fname = new qx.ui.basic.Label("Name"); + var fage = new qx.ui.basic.Label("Age"); + var fstreet = new qx.ui.basic.Label("Street"); + var fplz = new qx.ui.basic.Label("PLZ"); + var fcity = new qx.ui.basic.Label("City"); + var fcountry = new qx.ui.basic.Label("Country"); + var fphone = new qx.ui.basic.Label("Phone"); + + area.add(fgivenname, fname, fage, fstreet, fplz, fcity, fcountry, fphone); + + + + + + + + function upd(e) + { + var val = cm1.getSelected(); + + if (!val) { + return; + }; + + var req; + for( var i=0, max=parseInt(spin.getValue()); i<max; i++ ) + { + req = new qx.io.remote.Request(val.getLabel(), "GET", qx.util.Mime.JSON); + + req.setAsynchronous(async.getChecked()); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + + req.setParameter("test1", "value1"); + req.setParameter("test2", "value2"); + req.setParameter("test3", "value3"); + + // Force to testing iframe implementation + // req.setCrossDomain(true); + + // This combination couldn't be handled currently + // req.setCrossDomain(true); + // req.setAsynchronous(false); + + req.addEventListener("sending", function(e) { + inf.setValue("Sending"); + }); + + req.addEventListener("receiving", function(e) { + inf.setValue("Receiving"); + }); + + req.addEventListener("completed", function(e) + { + inf.setValue("Completed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + + var vContent = e.getData().getContent(); + + fgivenname.setHtml(vContent.givenName.toString()); + fname.setHtml(vContent.name.toString()); + fage.setHtml(vContent.age.toString()); + fstreet.setHtml(vContent.street.toString()); + fplz.setHtml(vContent.plz.toString()); + fcity.setHtml(vContent.city.toString()); + fcountry.setHtml(vContent.country.toString()); + fphone.setHtml(vContent.phone.toString()); + + qx.ui.core.Widget.flushGlobalQueues(); + }); + + req.addEventListener("failed", function(e) + { + inf.setValue("Failed"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.addEventListener("timeout", function(e) + { + inf.setValue("Timeout"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.addEventListener("aborted", function(e) + { + inf.setValue("Aborted"); + typ.setValue(e.getData().getResponseHeader("Content-Type")); + len.setValue(e.getData().getResponseHeader("Content-Length")); + code.setValue(e.getData().getStatusCode().toString()); + }); + + req.send(); + }; + }; + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_1.html new file mode 100644 index 0000000000..e419453600 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_1.html @@ -0,0 +1,69 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p> + An example of using the Virtual Tree widget with addBranch() and addLeaf() + </p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // tree + var tree = new qx.ui.treevirtual.TreeVirtual("Tree"); + with (tree) + { + set({ + left : 10, + top : 30, + width : 400, + bottom : 30, + border : qx.renderer.border.BorderPresets.getInstance().thinInset + }); + setColumnWidth(0, 400); + }; + + d.add(tree); + + // tree data model + var dataModel = tree.getDataModel(); + + var te; + + var te1 = dataModel.addBranch(null, "Desktop", true); + + dataModel.addBranch(te1, "Files", true); + + te = dataModel.addBranch(te1, "Workspace", true); + dataModel.addLeaf(te, "Windows (C:)"); + dataModel.addLeaf(te, "Documents (D:)"); + + dataModel.addBranch(te1, "Network", true); + dataModel.addBranch(te1, "Trash", true); + + var te2 = dataModel.addBranch(null, "Inbox", true); + + dataModel.addBranch(te2, "Presets", true); + dataModel.addBranch(te2, "Sent", true); + dataModel.addBranch(te2, "Trash", true); + dataModel.addBranch(te2, "Data", true); + dataModel.addBranch(te2, "Edit", true); + + dataModel.setData(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_2.html new file mode 100644 index 0000000000..8c965f93de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_2.html @@ -0,0 +1,98 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>An example of using the Virtual Tree widget providing the array of tree + nodes en bulk instead of issuing a series of addBranch() and addLeaf() + calls. This example also colors some nodes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // tree + var tree = new qx.ui.treevirtual.TreeVirtual("Tree"); + with (tree) + { + set({ + left : 10, + top : 30, + width : 400, + bottom : 30, + border : qx.renderer.border.BorderPresets.getInstance().thinInset + }); + setColumnWidth(0, 400); + }; + + d.add(tree); + + // tree data model + var dataModel = tree.getDataModel(); + + var treeData = []; + + var node = // the root node (not displayed) + { + opened : true, + children : [ 1 ] + }; + treeData.push(node); + + var node = + { + type : qx.ui.treevirtual.SimpleTreeDataModel.Type.BRANCH, + parentNodeId : 0, + label : "My Root", + bSelected : false, + opened : true, + icon : "icon/16/places/folder.png", + iconSelected : "icon/16/folder_open.png", + labelStyle : "background-color:red;color:white", + children : [ 2 ] + }; + treeData.push(node); + + var node = + { + type : qx.ui.treevirtual.SimpleTreeDataModel.Type.BRANCH, + parentNodeId : 1, + label : "A sub-folder", + bSelected : false, + opened : true, + icon : "icon/16/places/folder.png", + iconSelected : "icon/16/folder_open.png", + cellStyle : "background-color:cyan", + children : [ 3 ] + }; + treeData.push(node); + + var node = + { + type : qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF, + parentNodeId : 2, + label : "Third-level leaf", + bSelected : false, + opened : false, + icon : "icon/16/actions/document-new.png", + iconSelected : "icon/16/actions/document-open.png", + children : [ ] + }; + treeData.push(node); + + dataModel.setData(treeData); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_3.html new file mode 100644 index 0000000000..b92df15d4f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_3.html @@ -0,0 +1,84 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test large trees. This one adds a Spam branch with 3000 leaf nodes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + // tree + var tree = new qx.ui.treevirtual.TreeVirtual("Tree"); + with (tree) + { + set({ + left : 10, + top : 30, + width : 400, + bottom : 30, + border : qx.renderer.border.BorderPresets.getInstance().thinInset + }); + setColumnWidth(0, 400); + setAlwaysShowOpenCloseSymbol(true); + }; + + d.add(tree); + + // tree data model + var dataModel = tree.getDataModel(); + + var te1 = dataModel.addBranch(null, "Desktop", true); + dataModel.setState(te1, + { + labelStyle : "background-color: red; color: white;" + }); + + var te; + + dataModel.addBranch(te1, "Files", true); + + te = dataModel.addBranch(te1, "Workspace", true); + dataModel.addLeaf(te, "Windows (C:)"); + dataModel.addLeaf(te, "Documents (D:)"); + + dataModel.addBranch(te1, "Network", true); + + te = dataModel.addBranch(te1, "Trash", true); + dataModel.setState(te, + { + cellStyle : "background-color: cyan;" + }); + + + var te2 = dataModel.addBranch(null, "Inbox", true); + + te = dataModel.addBranch(te2, "Spam", false); + + for (var i = 1; i < 3000; i++) + { + dataModel.addLeaf(te, "Spam Message #" + i); + } + + dataModel.addBranch(te2, "Sent", true); + dataModel.addBranch(te2, "Trash", true); + dataModel.addBranch(te2, "Data", true); + dataModel.addBranch(te2, "Edit", true); + + dataModel.setData(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_4.html new file mode 100644 index 0000000000..3b150f52ba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_4.html @@ -0,0 +1,186 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Show use of events upon tree opening and closing, including adding + nodes dynamically upon tree open and removing the open/close button upon + tree open if the branch contains no children. + </p><p> + Allows controlling selection mode. Labels of selected items are + displayed. + </p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + // tree + var tree = new qx.ui.treevirtual.TreeVirtual("Tree"); + with (tree) + { + set({ + left : 10, + top : 30, + width : 400, + bottom : 30, + border : qx.renderer.border.BorderPresets.getInstance().thinInset + }); + setColumnWidth(0, 400); + setAlwaysShowOpenCloseSymbol(true); + }; + + // Add the tree to the document + tree.addToDocument(); + + // tree data model + var dataModel = tree.getDataModel(); + + var te1 = dataModel.addBranch(null, "Desktop", true); + + var te; + dataModel.addBranch(te1, "Files", true); + + te = dataModel.addBranch(te1, "Workspace", true); + dataModel.addLeaf(te, "Windows (C:)"); + dataModel.addLeaf(te, "Documents (D:)"); + + dataModel.addBranch(te1, "Network", true); + dataModel.addBranch(te1, "Trash", true); + + var te2 = dataModel.addBranch(null, "Inbox", true); + + te = dataModel.addBranch(te2, "Spam", false); + for (var i = 1; i < 3000; i++) + { + dataModel.addLeaf(te, "Spam Message #" + i); + } + + dataModel.addBranch(te2, "Sent", false); + dataModel.addBranch(te2, "Trash", false); + dataModel.addBranch(te2, "Data", false); + dataModel.addBranch(te2, "Edit", false); + + dataModel.setData(); + + var newItem = 1; + + /* + * Each time we get a treeOpenWithContent event, add yet another leaf node + * to the node being opened. + */ + tree.addEventListener("treeOpenWithContent", + function(e) + { + alert('treeOpenWithContent '); + var node = e.getData(); + dataModel.addLeaf(node.nodeId, + newItem.toString(), + false); + newItem++; + }); + + tree.addEventListener("treeClose", + function(e) + { + alert('treeClose '); + }); + + /* + * We handle opening an empty folder specially. We demonstrate how to + * disable the open/close symbol once we've determined there's nothing in + * it. This feature might be used to dynamically retrieve the contents of + * the folder, and if nothing is available, indicate it by removing the + * open/close symbol. + */ + tree.addEventListener("treeOpenWhileEmpty", + function(e) + { + alert('treeOpenWhileEmpty'); + var node = e.getData(); + tree.setState(node.nodeId, { opened : null }); + }); + + + tree.addEventListener("changeSelection", + function(e) + { + var text = "Selected labels:"; + var selectedNodes = e.getData(); + for (i = 0; i < selectedNodes.length; i++) + { + text += "\n " + selectedNodes[i].label; + } + alert('changeSelection: ' + text); + }); + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + commandFrame.set({ top: 48, left: 520, right: 290, height: "auto" }); + commandFrame.addToDocument(); + + // Create a combo box for the selection type + var o = new qx.ui.basic.Atom("Selection Mode: "); + o.set({ top: 6, left: 0 }); + commandFrame.add(o); + + o = new qx.ui.form.ComboBox(); + o.set({ top: 20, left: 4, width: "100%" }); + o.setEditable(false); + + // Add the various selection types + var item = new qx.ui.form.ListItem("No Selection"); + o.add(item); + var item = new qx.ui.form.ListItem("Single Selection"); + o.add(item); + o.setSelected(item); + var item = new qx.ui.form.ListItem("Single Interval Selection"); + o.add(item); + var item = new qx.ui.form.ListItem("Multiple Interval Selection"); + o.add(item); + + // We want to be notified if the selection changes + o.addEventListener( + "changeSelected", + function() + { + switch(this.getValue()) + { + case "No Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.NONE); + break; + + case "Single Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.SINGLE); + break; + + case "Single Interval Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.SINGLE_INTERVAL); + break; + + case "Multiple Interval Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.MULTIPLE_INTERVAL); + break; + } + }); + + commandFrame.add(o); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_5.html new file mode 100644 index 0000000000..08c73e12ea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_5.html @@ -0,0 +1,176 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Demonstrate use of multiple columns in a tree.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + // tree + var tree = new qx.ui.treevirtual.TreeVirtual([ "Tree", "Permissions" ]); + with (tree) + { + set({ + left : 10, + top : 30, + width : 506, + bottom : 30, + border : qx.renderer.border.BorderPresets.getInstance().thinInset + }); + setAlwaysShowOpenCloseSymbol(true); + setColumnWidth(0, 400); + setColumnWidth(1, 100); + }; + + tree.addToDocument(); + + // tree data model + var dataModel = tree.getDataModel(); + + var te1 = dataModel.addBranch(null, "Desktop", true); + dataModel.setState(te1, + { + labelStyle : + "background-color: red; " + + "color: white;" + + "font-weight: bold;" + }); + + var te1_1; + + dataModel.addBranch(te1, "Files", true); + + te1_1 = dataModel.addBranch(te1, "Workspace", true); + te = dataModel.addLeaf(te1_1, "Windows (C:)"); + dataModel.setColumnData(te, 1, "-rwxr-xr-x"); + te = dataModel.addLeaf(te1_1, "Documents (D:)"); + dataModel.setColumnData(te, 1, "-rwxr-xr-x"); + + dataModel.addBranch(te1, "Network", true); + + te = dataModel.addBranch(te1, "Trash", true); + dataModel.setState(te, + { + cellStyle : "background-color: cyan;" + }); + + + var te2 = dataModel.addBranch(null, "Inbox", true); + + te = dataModel.addBranch(te2, "Spam", false); + + for (var i = 1; i < 3000; i++) + { + dataModel.addLeaf(te, "Spam Message #" + i); + } + + dataModel.addBranch(te2, "Sent", false); + dataModel.addBranch(te2, "Trash", false); + dataModel.addBranch(te2, "Data", false); + dataModel.addBranch(te2, "Edit", false); + + dataModel.setData(); + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + commandFrame.set({ top: 48, left: 520, width: "auto", height: "auto" }); + commandFrame.addToDocument(); + + var o = new qx.ui.basic.Atom("Current Selection: "); + o.set({ left: 0, top: 6 }); + commandFrame.add(o); + + o = new qx.ui.form.TextField(); + o.set({ left: 4, right: 0, top: 20, readOnly: true }); + commandFrame.add(o); + tree.addEventListener( + "changeSelection", + function(e) + { + // Get the list of selected nodes. We're in single-selection mode, so + // there will be only one of them. + var nodes = e.getData(); + this.setValue(tree.getHierarchy(nodes[0].nodeId).join('/')); + buttonRemove.setEnabled(true); + }, + o); + + var buttonRemove = new qx.ui.form.Button("Remove"); + buttonRemove.set({ top: 42, left: 0, enabled: false }); + commandFrame.add(buttonRemove); + buttonRemove.addEventListener( + "execute", + function(e) + { + selectedNodes = tree.getSelectedNodes(); + for (var i = 0; i < selectedNodes.length; i++) + { + dataModel.prune(selectedNodes[i].nodeId); + dataModel.setData(); + } + }); + + o = new qx.ui.form.CheckBox("Use tree lines?"); + o.set({ top: 80, left: 0, checked: true }); + commandFrame.add(o); + o.addEventListener("changeChecked", + function(e) + { + tree.setUseTreeLines(e.getData()); + }); + + o = new qx.ui.form.CheckBox("Jens Lautenbacher mode?"); + o.set({ top: 100, left: 0, checked: false }); + commandFrame.add(o); + o.addEventListener("changeChecked", + function(e) + { + tree.setJensLautenbacherMode(e.getData()); + }); + + o = new qx.ui.form.CheckBox("Always show open/close symbol?"); + o.set({ top: 120, left: 0, checked: true }); + commandFrame.add(o); + o.addEventListener("changeChecked", + function(e) + { + tree.setAlwaysShowOpenCloseSymbol(e.getData()); + }); + + o = new qx.ui.form.CheckBox("Remove open/close if found empty?"); + o.set({ top: 140, left: 0, checked: true }); + commandFrame.add(o); + tree.addEventListener("treeOpenWhileEmpty", + function(e) + { + if (this.getChecked()) + { + var node = e.getData(); + tree.setState(node.nodeId, { opened : null }); + } + }, + o); + + o = new qx.ui.form.CheckBox("Open/close click selects row?"); + o.set({ top: 160, left: 0, checked: false }); + commandFrame.add(o); + o.addEventListener("changeChecked", + function(e) + { + tree.setOpenCloseClickSelectsRow(e.getData()); + }); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_6.html new file mode 100644 index 0000000000..65b5b9d397 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/TreeVirtual_6.html @@ -0,0 +1,135 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Demonstrate providing initially-selected tree nodes.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + // tree + var tree = new qx.ui.treevirtual.TreeVirtual("Tree"); + with (tree) + { + set({ + left : 10, + top : 30, + width : 400, + bottom : 30, + border : qx.renderer.border.BorderPresets.getInstance().thinInset + }); + setColumnWidth(0, 400); + setAlwaysShowOpenCloseSymbol(true); + }; + + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.MULTIPLE_INTERVAL); + + // Add the tree to the document + tree.addToDocument(); + + // tree data model + var dataModel = tree.getDataModel(); + + var te1 = dataModel.addBranch(null, "Desktop", true); + + var x; + var te; + dataModel.addBranch(te1, "Files", true); + + te = dataModel.addBranch(te1, "Workspace", true); + x = dataModel.addLeaf(te, "Windows (C:)"); + tree.setState(x, { bSelected : true }); + x = dataModel.addLeaf(te, "Documents (D:)"); + tree.setState(x, { bSelected : true }); + + dataModel.addBranch(te1, "Network", true); + dataModel.addBranch(te1, "Trash", true); + + var te2 = dataModel.addBranch(null, "Inbox", true); + + te = dataModel.addBranch(te2, "Spam", false); + for (var i = 1; i < 3000; i++) + { + dataModel.addLeaf(te, "Spam Message #" + i); + } + + dataModel.addBranch(te2, "Sent", false); + dataModel.addBranch(te2, "Trash", false); + dataModel.addBranch(te2, "Data", false); + dataModel.addBranch(te2, "Edit", false); + + dataModel.setData(); + + var newItem = 1; + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + commandFrame.set({ top: 48, left: 520, right: 290, height: "auto" }); + commandFrame.addToDocument(); + + // Create a combo box for the selection type + var o = new qx.ui.basic.Atom("Selection Mode: "); + o.set({ top: 6, left: 0 }); + commandFrame.add(o); + + o = new qx.ui.form.ComboBox(); + o.set({ top: 20, left: 4, width: "100%" }); + o.setEditable(false); + + // Add the various selection types + var item = new qx.ui.form.ListItem("No Selection"); + o.add(item); + var item = new qx.ui.form.ListItem("Single Selection"); + o.add(item); + var item = new qx.ui.form.ListItem("Single Interval Selection"); + o.add(item); + var item = new qx.ui.form.ListItem("Multiple Interval Selection"); + o.add(item); + o.setSelected(item); + + // We want to be notified if the selection changes + o.addEventListener( + "changeSelected", + function() + { + switch(this.getValue()) + { + case "No Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.NONE); + break; + + case "Single Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.SINGLE); + break; + + case "Single Interval Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.SINGLE_INTERVAL); + break; + + case "Multiple Interval Selection": + tree.setSelectionMode( + qx.ui.treevirtual.TreeVirtual.SelectionMode.MULTIPLE_INTERVAL); + break; + } + }); + + commandFrame.add(o); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_1.html new file mode 100644 index 0000000000..1a7155ce11 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_1.html @@ -0,0 +1,171 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Introducing qx.ui.tree.Tree. A first small example.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var t = new qx.ui.tree.Tree("Root"); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + + + var te1 = new qx.ui.tree.TreeFolder("Desktop"); + t.add(te1); + + desktop = te1; + + var te1_1 = new qx.ui.tree.TreeFolder("Files"); + var te1_2 = new qx.ui.tree.TreeFolder("Workspace"); + var te1_3 = new qx.ui.tree.TreeFolder("Network"); + var te1_4 = new qx.ui.tree.TreeFolder("Trash"); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + + var te1_2_1 = new qx.ui.tree.TreeFile("Windows (C:)"); + var te1_2_2 = new qx.ui.tree.TreeFile("Documents (D:)"); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + var te2 = new qx.ui.tree.TreeFolder("Inbox"); + posteingang = te2; + + var te2_1 = new qx.ui.tree.TreeFolder("Presets"); + var te2_2 = new qx.ui.tree.TreeFolder("Sent"); + var te2_3 = new qx.ui.tree.TreeFolder("Trash"); + var te2_4 = new qx.ui.tree.TreeFolder("Data"); + var te2_5 = new qx.ui.tree.TreeFolder("Edit"); + + + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + + + var vShowItems = new qx.ui.form.Button("Show Items"); + + with(vShowItems) { + setTop(100); + setLeft(0); + }; + + commandFrame.add(vShowItems); + + vShowItems.addEventListener("execute", function(e) { + alert(t.getItems()); + }); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_2.html new file mode 100644 index 0000000000..4c05981f8a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_2.html @@ -0,0 +1,294 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>This example is bigger than the previous one.</p> + </div> + + <div id="control" style="display:none"> + <p> + <strong>Create</strong>: + <br/> + Push into: + <a href="javascript://" onclick="void(root.add(new qx.ui.tree.TreeFile('Foo Bar')))">Root</a> + <a href="javascript://" onclick="void(inbox.add(new qx.ui.tree.TreeFile('Foo Bar')))">Inbox</a> + <a href="javascript://" onclick="void(workspace.add(new qx.ui.tree.TreeFile('Foo Bar')))">Workspace</a> + <a href="javascript://" onclick="void(desktop.add(new qx.ui.tree.TreeFile('Foo Bar')))">Desktop</a> + <a href="javascript://" onclick="void(edit.add(new qx.ui.tree.TreeFile('Foo Bar')))">Edit</a> + <a href="javascript://" onclick="void(spam.add(new qx.ui.tree.TreeFile('Foo Bar')))">Spam</a> + </p> + + <hr/> + + <p> + <strong>Inbox</strong>: + <a href="javascript://" onclick="void(inbox.getParent().remove(inbox))">Delete</a> + <br/> + Push into: + <a href="javascript://" onclick="void(root.add(inbox))">Root</a> + <a href="javascript://" onclick="void(workspace.add(inbox))">Workspace</a> + <a href="javascript://" onclick="void(desktop.add(inbox))">Desktop</a> + <a href="javascript://" onclick="void(edit.add(inbox))">Edit</a> + <a href="javascript://" onclick="void(spam.add(inbox))">Spam</a> + </p> + + <p> + <strong>Workspace</strong>: + <a href="javascript://" onclick="void(workspace.getParent().remove(workspace))">Delete</a> + <br/> + Push into: + <a href="javascript://" onclick="void(root.add(workspace))">Root</a> + <a href="javascript://" onclick="void(inbox.add(workspace))">Inbox</a> + <a href="javascript://" onclick="void(desktop.add(workspace))">Desktop</a> + <a href="javascript://" onclick="void(edit.add(workspace))">Edit</a> + <a href="javascript://" onclick="void(spam.add(workspace))">Spam</a> + <br/> + Push into before: + <a href="javascript://" onclick="void(root.addBefore(workspace, desktop))">Root (before:Desktop)</a> + <a href="javascript://" onclick="void(root.addBefore(workspace, inbox))">Root (before:Inbox)</a> + <a href="javascript://" onclick="void(inbox.addBefore(workspace, spam))">Inbox (before:Spam)</a> + <a href="javascript://" onclick="void(inbox.addBefore(workspace, edit))">Inbox (before:Edit)</a> + <br/> + Push into after: + <a href="javascript://" onclick="void(root.addAfter(workspace, desktop))">Root (after:Desktop)</a> + <a href="javascript://" onclick="void(root.addAfter(workspace, inbox))">Root (after:Inbox)</a> + <a href="javascript://" onclick="void(inbox.addAfter(workspace, spam))">Inbox (after:Spam)</a> + <a href="javascript://" onclick="void(inbox.addAfter(workspace, edit))">Inbox (after:Edit)</a> + <br/> + Add at: + <a href="javascript://" onclick="void(root.addAt(workspace, 0))">Root (at:0)</a> + <a href="javascript://" onclick="void(root.addAt(workspace, 1))">Root (at:1)</a> + <a href="javascript://" onclick="void(root.addAt(workspace, 2))">Root (at:2)</a> + <a href="javascript://" onclick="void(inbox.addAt(workspace, 0))">Inbox (at:0)</a> + <a href="javascript://" onclick="void(inbox.addAt(workspace, 3))">Inbox (at:3)</a> + <a href="javascript://" onclick="void(inbox.addAt(workspace, 5))">Inbox (at:5)</a> + </p> + </div> + + <script type="text/javascript"> + var desktop, workspace, root, inbox, edit, spam; + + qx.core.Init.getInstance().defineMain(function() + { + var t = new qx.ui.tree.Tree("Root"); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + root = t; + + qx.ui.core.ClientDocument.getInstance().add(t); + + var te1 = new qx.ui.tree.TreeFolder("Desktop"); + t.add(te1); + + desktop = te1; + + var te1_1 = new qx.ui.tree.TreeFolder("Files"); + var te1_2 = new qx.ui.tree.TreeFolder("Workspace"); + var te1_3 = new qx.ui.tree.TreeFolder("Network"); + var te1_4 = new qx.ui.tree.TreeFolder("Trash"); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + + var te1_2_1 = new qx.ui.tree.TreeFile("Windows (C:)"); + var te1_2_2 = new qx.ui.tree.TreeFile("Documents (D:)"); + + te1_2.add(te1_2_1, te1_2_2); + + workspace = te1_2; + + + var te2 = new qx.ui.tree.TreeFolder("Inbox"); + inbox = te2; + + var te2_1 = new qx.ui.tree.TreeFolder("Presets"); + var te2_2 = new qx.ui.tree.TreeFolder("Sent"); + var te2_3 = new qx.ui.tree.TreeFolder("Trash"); + var te2_4 = new qx.ui.tree.TreeFolder("Data"); + var te2_5 = new qx.ui.tree.TreeFolder("Edit"); + + edit = te2_5; + + var te2_5_1 = new qx.ui.tree.TreeFolder("Chat"); + var te2_5_2 = new qx.ui.tree.TreeFolder("Pustefix"); + var te2_5_3 = new qx.ui.tree.TreeFolder("TINC"); + + var te2_5_3_1 = new qx.ui.tree.TreeFolder("Announce"); + var te2_5_3_2 = new qx.ui.tree.TreeFolder("Devel"); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + var te2_6 = new qx.ui.tree.TreeFolder("Lists"); + + var te2_6_1 = new qx.ui.tree.TreeFolder("Relations"); + var te2_6_2 = new qx.ui.tree.TreeFolder("Company"); + var te2_6_3 = new qx.ui.tree.TreeFolder("Questions"); + var te2_6_4 = new qx.ui.tree.TreeFolder("Internal"); + var te2_6_5 = new qx.ui.tree.TreeFolder("Products"); + var te2_6_6 = new qx.ui.tree.TreeFolder("Press"); + var te2_6_7 = new qx.ui.tree.TreeFolder("Development"); + var te2_6_8 = new qx.ui.tree.TreeFolder("Competition"); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + var te2_7 = new qx.ui.tree.TreeFolder("Personal"); + + var te2_7_1 = new qx.ui.tree.TreeFolder("Bugs"); + var te2_7_2 = new qx.ui.tree.TreeFolder("Family"); + var te2_7_3 = new qx.ui.tree.TreeFolder("Projects"); + var te2_7_4 = new qx.ui.tree.TreeFolder("Holiday"); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + var te2_8 = new qx.ui.tree.TreeFolder("Big"); + + for (var i=0;i<10; i++) { + te2_8.add(new qx.ui.tree.TreeFolder("Item " + i)); + }; + + var te2_9 = new qx.ui.tree.TreeFolder("Spam"); + spam = te2_9; + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + + + + + + + + + var ct1 = new qx.ui.basic.Label(document.getElementById("control").innerHTML); + + with(ct1) + { + setWidth(300); + setRight(335); + + setHeight(null); + setTop(48); + setBottom(48); + + setOverflow("hidden"); + setStyleProperty("whiteSpace", "normal"); + + setBackgroundColor("white"); + setBorder(qx.renderer.border.BorderPresets.getInstance().groove); + setPadding(10); + }; + + qx.ui.core.ClientDocument.getInstance().add(ct1); + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_3.html new file mode 100644 index 0000000000..28e6569855 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_3.html @@ -0,0 +1,201 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Nothing special, like the previous example but here the tree lines are by default off.</p> + <p>This allows you to easily compare the performance costs for the tree lines: Just compare this and the previous example.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var t = new qx.ui.tree.Tree("Root"); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + setUseTreeLines(false); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + + var te1 = new qx.ui.tree.TreeFolder("Desktop"); + t.add(te1); + + desktop = te1; + + var te1_1 = new qx.ui.tree.TreeFolder("Files"); + var te1_2 = new qx.ui.tree.TreeFolder("Workspace"); + var te1_3 = new qx.ui.tree.TreeFolder("Network"); + var te1_4 = new qx.ui.tree.TreeFolder("Trash"); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + + var te1_2_1 = new qx.ui.tree.TreeFile("Windows (C:)"); + var te1_2_2 = new qx.ui.tree.TreeFile("Documents (D:)"); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + var te2 = new qx.ui.tree.TreeFolder("Inbox"); + posteingang = te2; + + var te2_1 = new qx.ui.tree.TreeFolder("Presets"); + var te2_2 = new qx.ui.tree.TreeFolder("Sent"); + var te2_3 = new qx.ui.tree.TreeFolder("Trash"); + var te2_4 = new qx.ui.tree.TreeFolder("Data"); + var te2_5 = new qx.ui.tree.TreeFolder("Edit"); + + editieren = te2_5; + + var te2_5_1 = new qx.ui.tree.TreeFolder("Chat"); + var te2_5_2 = new qx.ui.tree.TreeFolder("Pustefix"); + var te2_5_3 = new qx.ui.tree.TreeFolder("TINC"); + + var te2_5_3_1 = new qx.ui.tree.TreeFolder("Announce"); + var te2_5_3_2 = new qx.ui.tree.TreeFolder("Devel"); + + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + var te2_6 = new qx.ui.tree.TreeFolder("Lists"); + + var te2_6_1 = new qx.ui.tree.TreeFolder("Relations"); + var te2_6_2 = new qx.ui.tree.TreeFolder("Company"); + var te2_6_3 = new qx.ui.tree.TreeFolder("Questions"); + var te2_6_4 = new qx.ui.tree.TreeFolder("Internal"); + var te2_6_5 = new qx.ui.tree.TreeFolder("Products"); + var te2_6_6 = new qx.ui.tree.TreeFolder("Press"); + var te2_6_7 = new qx.ui.tree.TreeFolder("Development"); + var te2_6_8 = new qx.ui.tree.TreeFolder("Competition"); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + var te2_7 = new qx.ui.tree.TreeFolder("Personal"); + + var te2_7_1 = new qx.ui.tree.TreeFolder("Bugs"); + var te2_7_2 = new qx.ui.tree.TreeFolder("Family"); + var te2_7_3 = new qx.ui.tree.TreeFolder("Projects"); + var te2_7_4 = new qx.ui.tree.TreeFolder("Holiday"); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + var te2_8 = new qx.ui.tree.TreeFolder("Big"); + + for (var i=0;i<50; i++) { + te2_8.add(new qx.ui.tree.TreeFolder("Item " + i)); + }; + + var te2_9 = new qx.ui.tree.TreeFolder("Spam"); + spam = te2_9; + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + t.add(te2); + qx.ui.core.ClientDocument.getInstance().add(t); + + + + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(false); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_4.html new file mode 100644 index 0000000000..f5d92844bb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_4.html @@ -0,0 +1,40 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test an empty tree</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var t = new qx.ui.tree.Tree("Root"); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_5.html new file mode 100644 index 0000000000..03ceb54281 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_5.html @@ -0,0 +1,148 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Drag and Drop between trees and inside a tree.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + function handleDragStart(e) + { + e.addData("qx.ui.tree.AbstractTreeElement", e.getCurrentTarget()); + e.addAction("move"); + e.startDrag(); + }; + + function handleDragDrop(e) + { + var vType = e.getDropDataTypes()[0]; + var vSource = e.getData(vType); + var vTarget = e.getCurrentTarget(); + + vSource.getTree().getManager().deselectAll(); + vTarget.add(vSource); + + e.stopPropagation(); + }; + + function supportsDrop(vDragCache) { + return !vDragCache.sourceWidget.contains(this); + }; + + function handleDragOver(e) + { + var l = e.getTarget().getLabelObject(); + l.setStyleProperty("textDecoration", "underline"); + }; + + function handleDragOut(e) + { + var l = e.getTarget().getLabelObject(); + l.removeStyleProperty("textDecoration"); + }; + + + + var treeSource = new qx.ui.tree.Tree("Source"); + + with(treeSource) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + + addEventListener("dragdrop", handleDragDrop); + addEventListener("dragover", handleDragOver); + addEventListener("dragout", handleDragOut); + + setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + }; + + qx.ui.core.ClientDocument.getInstance().add(treeSource); + + for (var i=1, f; i<4; i++) + { + f = new qx.ui.tree.TreeFolder("Folder " + i); + + f.addEventListener("dragstart", handleDragStart); + f.addEventListener("dragdrop", handleDragDrop); + f.addEventListener("dragover", handleDragOver); + f.addEventListener("dragout", handleDragOut); + + f.setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + f.supportsDrop = supportsDrop; + + treeSource.add(f); + + for (var j=1, g; j<4; j++) + { + g = new qx.ui.tree.TreeFolder("Subfolder " + j); + + g.addEventListener("dragstart", handleDragStart); + g.addEventListener("dragdrop", handleDragDrop); + g.addEventListener("dragover", handleDragOver); + g.addEventListener("dragout", handleDragOut); + + g.setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + g.supportsDrop = supportsDrop; + + f.add(g); + + for (var k=1, h; k<4; k++) + { + h = new qx.ui.tree.TreeFile("File " + k); + + h.addEventListener("dragstart", handleDragStart); + + g.add(h); + }; + }; + }; + + + + + var treeDest = new qx.ui.tree.Tree("Dest"); + + with(treeDest) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(240); + setWidth(200); + setBottom(48); + + addEventListener("dragdrop", handleDragDrop); + addEventListener("dragover", handleDragOver); + addEventListener("dragout", handleDragOut); + + setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + }; + + qx.ui.core.ClientDocument.getInstance().add(treeDest); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_6.html new file mode 100644 index 0000000000..67f0dc42b2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_6.html @@ -0,0 +1,231 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Drag and Drop between trees and inside a tree.</p> + <p>Added support for positioned move/insert (not complete yet!)</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var vLastIndex = null; + + function handleDragStart(e) + { + e.addData("qx.ui.tree.AbstractTreeElement", e.getCurrentTarget()); + e.addAction("move"); + e.startDrag(); + }; + + function handleDragDrop(e) + { + var vType = e.getDropDataTypes()[0]; + var vSource = e.getData(vType); + var vTarget = e.getCurrentTarget(); + + vSource.getTree().getManager().deselectAll(); + + // this.debug("Add At: " + vLastIndex); + + vLastIndex == null ? vTarget.addAtEnd(vSource) : vTarget.addBefore(vSource, vLastIndex); + vLastIndex = null; + + e.stopPropagation(); + treeMarkerLine.setStyleProperty("display", "none"); + }; + + function supportsDrop(vDragCache) { + return !vDragCache.sourceWidget.contains(this); + }; + + function handleDragOver(e) + { + var l = e.getTarget().getLabelObject(); + l.setStyleProperty("textDecoration", "underline"); + }; + + function handleDragOut(e) + { + var l = e.getTarget().getLabelObject(); + l.removeStyleProperty("textDecoration"); + }; + + function handleDragEnd(e) + { + vLastIndex = null; + treeMarkerLine.setStyleProperty("display", "none"); + }; + + function handleDragMove(e) + { + vLastIndex = null; + + var vTarget = e.getTarget(); + + if (!vTarget || !(vTarget instanceof qx.ui.tree.TreeFolder)) + { + treeMarkerLine.setStyleProperty("display", "none"); + return; + }; + + var vContainer = vTarget.getContainerObject(); + + if (!vContainer) + { + treeMarkerLine.setStyleProperty("display", "none"); + return; + }; + + var vChildren = vContainer.getVisibleChildren(); + var vChildrenLength = vChildren.length; + var vEventTop = e.getPageY(); + + for (var i=0, vChild, vTop; i<vChildrenLength; i++) + { + vChild = vChildren[i]; + + vTop = qx.html.Location.getPageBoxTop(vChild.getElement()); + if ((vTop - vEventTop) > -4 && (vTop - vEventTop) < 4) + { + if (vEventTop > vTop && vChild.isFirstChild()) { + continue; + }; + + treeMarkerLine._applyRuntimeTop(vTop+1); + treeMarkerLine._applyRuntimeLeft(QxDom.getComputedPageBoxLeft(vChild.getLabelObject().getElement()) - 20); + + treeMarkerLine.removeStyleProperty("display"); + + // this.debug("Index: " + vLastIndex + " :: " + vEventTop + " <> " + vTop); + vLastIndex = vChild; + + return; + }; + }; + + treeMarkerLine.setStyleProperty("display", "none"); + }; + + + + var treeMarkerLine = new qx.ui.basic.Terminator; + + treeMarkerLine.setHeight(2); + treeMarkerLine.setBackgroundColor("#335EA8"); + treeMarkerLine.setWidth(20); + treeMarkerLine.setZIndex(1e7); + treeMarkerLine.setAnonymous(true); + treeMarkerLine.setStyleProperty("display", "none"); + + qx.ui.core.ClientDocument.getInstance().add(treeMarkerLine); + + + + var treeSource = new qx.ui.tree.Tree("Source"); + + with(treeSource) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + + addEventListener("dragdrop", handleDragDrop); + addEventListener("dragover", handleDragOver); + addEventListener("dragout", handleDragOut); + addEventListener("dragmove", handleDragMove); + + setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + }; + + qx.ui.core.ClientDocument.getInstance().add(treeSource); + + for (var i=1, f; i<3; i++) + { + f = new qx.ui.tree.TreeFolder("Folder " + i); + + f.addEventListener("dragstart", handleDragStart); + f.addEventListener("dragdrop", handleDragDrop); + f.addEventListener("dragover", handleDragOver); + f.addEventListener("dragout", handleDragOut); + f.addEventListener("dragend", handleDragEnd); + + f.setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + f.supportsDrop = supportsDrop; + + treeSource.add(f); + + for (var j=1, g; j<6; j++) + { + g = new qx.ui.tree.TreeFolder("Subfolder " + j); + + g.addEventListener("dragstart", handleDragStart); + g.addEventListener("dragdrop", handleDragDrop); + g.addEventListener("dragover", handleDragOver); + g.addEventListener("dragout", handleDragOut); + g.addEventListener("dragend", handleDragEnd); + + g.setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + g.supportsDrop = supportsDrop; + + f.add(g); + + for (var k=1, h; k<9; k++) + { + h = new qx.ui.tree.TreeFile("File " + k); + + h.addEventListener("dragstart", handleDragStart); + + g.add(h); + }; + }; + }; + + + + + + + var treeDest = new qx.ui.tree.Tree("Dest"); + + with(treeDest) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(240); + setWidth(200); + setBottom(48); + + addEventListener("dragdrop", handleDragDrop); + addEventListener("dragover", handleDragOver); + addEventListener("dragout", handleDragOut); + addEventListener("dragmove", handleDragMove); + + setDropDataTypes(["qx.ui.tree.AbstractTreeElement"]); + }; + + qx.ui.core.ClientDocument.getInstance().add(treeDest); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_7.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_7.html new file mode 100644 index 0000000000..057160a268 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Tree_7.html @@ -0,0 +1,233 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Trying dynamic Folder and File creation and deletion.</p> + </div> + + <script type="text/javascript"> + + function createItems (t) { + var te1 = new qx.ui.tree.TreeFolder("Desktop"); + t.add(te1); + + desktop = te1; + + var te1_1 = new qx.ui.tree.TreeFolder("Files"); + var te1_2 = new qx.ui.tree.TreeFolder("Workspace"); + var te1_3 = new qx.ui.tree.TreeFolder("Network"); + var te1_4 = new qx.ui.tree.TreeFolder("Trash"); + + te1.add(te1_1, te1_2, te1_3, te1_4); + + + var te1_2_1 = new qx.ui.tree.TreeFile("Windows (C:)"); + var te1_2_2 = new qx.ui.tree.TreeFile("Documents (D:)"); + + te1_2.add(te1_2_1, te1_2_2); + + arbeitsplatz = te1_2; + + + var te2 = new qx.ui.tree.TreeFolder("Inbox"); + posteingang = te2; + + var te2_1 = new qx.ui.tree.TreeFolder("Presets"); + var te2_2 = new qx.ui.tree.TreeFolder("Sent"); + var te2_3 = new qx.ui.tree.TreeFolder("Trash"); + var te2_4 = new qx.ui.tree.TreeFolder("Data"); + var te2_5 = new qx.ui.tree.TreeFolder("Edit"); + + t.add(te2); + } + + qx.core.Init.getInstance().defineMain(function() + { + var t = new qx.ui.tree.Tree("Root"); + + with(t) + { + setBackgroundColor(255); + setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + setOverflow("scrollY"); + + setHeight(null); + setTop(48); + setLeft(20); + setWidth(200); + setBottom(48); + }; + + qx.ui.core.ClientDocument.getInstance().add(t); + + + + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + + with(commandFrame) + { + setTop(48); + setLeft(250); + + setWidth("auto"); + setHeight("auto"); + }; + + qx.ui.core.ClientDocument.getInstance().add(commandFrame); + + + + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + + with(tCurrentLabel) + { + setLeft(0); + setTop(0); + }; + + commandFrame.add(tCurrentLabel); + + + + var tCurrentInput = new qx.ui.form.TextField; + + with(tCurrentInput) + { + setLeft(0); + setRight(0); + setTop(20); + + setReadOnly(true); + }; + + commandFrame.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + if(e.getData()[0]) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + this.debug('classname: ' + e.getData()[0].classname); + } + else { + tCurrentInput.setValue(''); + } + }); + + + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + + with(tDoubleClick) { + setTop(60); + setLeft(0); + }; + + commandFrame.add(tDoubleClick); + + tDoubleClick.addEventListener("changeChecked", function(e) { t.setUseDoubleClick(e.getData()); }); + + + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + + with(tTreeLines) { + setTop(80); + setLeft(0); + setChecked(true); + }; + + commandFrame.add(tTreeLines); + + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + + + + + var vShowItems = new qx.ui.form.Button("Show Items"); + + with(vShowItems) { + setTop(100); + setLeft(0); + }; + + commandFrame.add(vShowItems); + + vShowItems.addEventListener("execute", function(e) { + alert(t.getItems()); + }); + + + var vDestroyTreeContent = new qx.ui.form.Button("Destroy tree content"); + + with(vDestroyTreeContent) { + setTop(180); + setLeft(0); + }; + + commandFrame.add(vDestroyTreeContent); + + vDestroyTreeContent.addEventListener("execute", function(e) { + t.destroyContent(); + }); + + + var vCreateItems = new qx.ui.form.Button("Create items"); + + with(vCreateItems) { + setTop(140); + setLeft(0); + }; + + commandFrame.add(vCreateItems); + + vCreateItems.addEventListener("execute", function(e) { + createItems(t); + }); + + var vDestroySelectedItem = new qx.ui.form.Button("Destroy selected item"); + + with(vDestroySelectedItem) { + setTop(220); + setLeft(0); + }; + + commandFrame.add(vDestroySelectedItem); + + vDestroySelectedItem.addEventListener("execute", function(e) { + var vItem = t.getManager().getSelectedItem(); + if(vItem) { + vItem.destroy(); + } + }); + + + var vDestroyContenSelectedItem = new qx.ui.form.Button("Destroy content of selected item"); + + with(vDestroyContenSelectedItem) { + setTop(260); + setLeft(0); + }; + + commandFrame.add(vDestroyContenSelectedItem); + + vDestroyContenSelectedItem.addEventListener("execute", function(e) { + var vItem = t.getManager().getSelectedItem(); + if(vItem && vItem instanceof qx.ui.tree.TreeFolder) { + vItem.destroyContent(); + } + }); + + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Umlauts_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Umlauts_1.html new file mode 100644 index 0000000000..f321919cbb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Umlauts_1.html @@ -0,0 +1,26 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Test some Umlauts methods from the String.prototype.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + alert("Umlauts Short: " + qx.util.Normalization.umlautsShort("äöüÄÖÜß")) + alert("Umlauts Long: " + qx.util.Normalization.umlautsLong("äöüÄÖÜß")) + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_1.html new file mode 100644 index 0000000000..5c820b0bda --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_1.html @@ -0,0 +1,1257 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.VerticalBoxLayout widget. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var cl_white = new qx.renderer.color.Color("white"); + var cl_blue = new qx.renderer.color.Color("blue"); + var cl_yellow = new qx.renderer.color.Color("yellow"); + var cl_green = new qx.renderer.color.Color("green"); + var cl_orange = new qx.renderer.color.Color("orange"); + var cl_purple = new qx.renderer.color.Color("purple"); + var cl_aqua = new qx.renderer.color.Color("aqua"); + var cl_fuchsia = new qx.renderer.color.Color("fuchsia"); + + /* *********************************************** + + EXAMPLE ONE: + TOP ALIGN + + *********************************************** */ + + var hbl1 = new qx.ui.layout.VerticalBoxLayout; + + hbl1.setTop(48); + hbl1.setLeft(20); + hbl1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl1.setWidth("auto") + hbl1.setBottom(48); + + hbl1.setSpacing(4); + hbl1.setPadding(8); + + hbl1.setHorizontalChildrenAlign("right"); + + + var w1_1 = new qx.ui.layout.CanvasLayout; + w1_1.setHeight(25); + w1_1.setWidth(25); + w1_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_1.setBackgroundColor(cl_white); + // w1_1.setMaxWidth(40); + + var w1_2 = new qx.ui.layout.CanvasLayout; + w1_2.setHeight(25); + w1_2.setWidth(25); + w1_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_2.setBackgroundColor(cl_blue); + w1_2.setRight(10); + + var w1_3 = new qx.ui.layout.CanvasLayout; + w1_3.setHeight(25); + w1_3.setWidth("100%"); + w1_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_3.setBackgroundColor(cl_yellow); + + var w1_4 = new qx.ui.layout.CanvasLayout; + w1_4.setHeight(25); + w1_4.setWidth(25); + w1_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_4.setBackgroundColor(cl_green); + + var w1_5 = new qx.ui.layout.CanvasLayout; + w1_5.setHeight(40); + // w1_5.setWidth(25); + w1_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_5.setBackgroundColor(cl_orange); + + var w1_6 = new qx.ui.layout.CanvasLayout; + w1_6.setHeight(25); + w1_6.setWidth(25); + w1_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_6.setBackgroundColor(cl_purple); + w1_6.setLeft(15); + w1_6.setTop(-25); + + var w1_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w1_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w1_9 = new qx.ui.layout.CanvasLayout; + w1_9.setHeight(25); + w1_9.setWidth(25); + w1_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_9.setBackgroundColor(cl_aqua); + + var w1_10 = new qx.ui.layout.CanvasLayout; + w1_10.setHeight(25); + w1_10.setWidth(25); + w1_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_10.setBackgroundColor(cl_fuchsia); + + var hbl1_click = 0; + hbl1.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl1_click) + { + case 0: + this.setBottom(null); + this.setHeight("auto"); + break; + + case 1: + this.setWidth(30); + break; + + case 2: + this.setWidth(80); + break; + + case 3: + this.setWidth("auto"); + break; + + case 4: + this.setHeight(200); + break; + + case 5: + this.setHeight(null); + this.setBottom(48); + hbl1_click = 0; + return; + }; + + hbl1_click++; + }); + + w1_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w1_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w1_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w1_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w1_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w1_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w1_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w1_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w1_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w1_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl1.add(w1_1, w1_2, w1_3, w1_4, w1_5, w1_6, w1_7, w1_8, w1_9, w1_10); + d.add(hbl1); + + + + + + /* *********************************************** + + EXAMPLE TWO: + BOTTOM ALIGN + + *********************************************** */ + + var hbl2 = new qx.ui.layout.VerticalBoxLayout; + + hbl2.setLeft(110); + hbl2.setTop(48); + hbl2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl2.setWidth("auto"); + hbl2.setBottom(48); + + hbl2.setSpacing(4); + hbl2.setPadding(8); + + hbl2.setVerticalChildrenAlign("bottom"); + hbl2.setHorizontalChildrenAlign("center"); + + + var w2_1 = new qx.ui.layout.CanvasLayout; + w2_1.setHeight(25); + w2_1.setWidth(25); + w2_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_1.setBackgroundColor(cl_white); + // w2_1.setMaxWidth(40); + + var w2_2 = new qx.ui.layout.CanvasLayout; + w2_2.setHeight(25); + w2_2.setWidth(25); + w2_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_2.setBackgroundColor(cl_blue); + w2_2.setRight(10); + + var w2_3 = new qx.ui.layout.CanvasLayout; + w2_3.setHeight(25); + w2_3.setWidth("100%"); + w2_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_3.setBackgroundColor(cl_yellow); + + var w2_4 = new qx.ui.layout.CanvasLayout; + w2_4.setHeight(25); + w2_4.setWidth(25); + w2_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_4.setBackgroundColor(cl_green); + + var w2_5 = new qx.ui.layout.CanvasLayout; + w2_5.setHeight(40); + // w2_5.setWidth(25); + w2_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_5.setBackgroundColor(cl_orange); + + var w2_6 = new qx.ui.layout.CanvasLayout; + w2_6.setHeight(25); + w2_6.setWidth(25); + w2_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_6.setBackgroundColor(cl_purple); + w2_6.setLeft(15); + w2_6.setTop(-25); + + var w2_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w2_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w2_9 = new qx.ui.layout.CanvasLayout; + w2_9.setHeight(25); + w2_9.setWidth(25); + w2_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_9.setBackgroundColor(cl_aqua); + + var w2_10 = new qx.ui.layout.CanvasLayout; + w2_10.setHeight(25); + w2_10.setWidth(25); + w2_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_10.setBackgroundColor(cl_fuchsia); + w2_10.foo = true; + + + var hbl2_click = 0; + hbl2.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl2_click) + { + case 0: + this.setBottom(null); + this.setHeight("auto"); + break; + + case 1: + this.setWidth(30); + break; + + case 2: + this.setWidth(80); + break; + + case 3: + this.setWidth("auto"); + break; + + case 4: + this.setHeight(200); + break; + + case 5: + this.setHeight(null); + this.setBottom(48); + hbl2_click = 0; + return; + }; + + hbl2_click++; + }); + + w2_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w2_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w2_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w2_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w2_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w2_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w2_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w2_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w2_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w2_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl2.add(w2_1, w2_2, w2_3, w2_4, w2_5, w2_6, w2_7, w2_8, w2_9, w2_10); + d.add(hbl2); + + + /* *********************************************** + + EXAMPLE THREE: + CENTER ALIGN + + *********************************************** */ + + var hbl3 = new qx.ui.layout.VerticalBoxLayout; + + hbl3.setLeft(200); + hbl3.setTop(48); + hbl3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl3.setWidth("auto"); + hbl3.setBottom(48); + + hbl3.setSpacing(4); + hbl3.setPadding(8); + + hbl3.setVerticalChildrenAlign("middle"); + + + + var w3_1 = new qx.ui.layout.CanvasLayout; + w3_1.setHeight(25); + w3_1.setWidth(25); + w3_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_1.setBackgroundColor(cl_white); + // w3_1.setMaxWidth(40); + + var w3_2 = new qx.ui.layout.CanvasLayout; + w3_2.setHeight(25); + w3_2.setWidth(25); + w3_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_2.setBackgroundColor(cl_blue); + w3_2.setRight(10); + + var w3_3 = new qx.ui.layout.CanvasLayout; + w3_3.setHeight(25); + w3_3.setWidth("100%"); + w3_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_3.setBackgroundColor(cl_yellow); + + var w3_4 = new qx.ui.layout.CanvasLayout; + w3_4.setHeight(25); + w3_4.setWidth(25); + w3_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_4.setBackgroundColor(cl_green); + + var w3_5 = new qx.ui.layout.CanvasLayout; + w3_5.setHeight(40); + // w3_5.setWidth(25); + w3_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_5.setBackgroundColor(cl_orange); + + var w3_6 = new qx.ui.layout.CanvasLayout; + w3_6.setHeight(25); + w3_6.setWidth(25); + w3_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_6.setBackgroundColor(cl_purple); + w3_6.setLeft(15); + w3_6.setTop(-25); + + var w3_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w3_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w3_9 = new qx.ui.layout.CanvasLayout; + w3_9.setHeight(25); + w3_9.setWidth(25); + w3_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_9.setBackgroundColor(cl_aqua); + + var w3_10 = new qx.ui.layout.CanvasLayout; + w3_10.setHeight(25); + w3_10.setWidth(25); + w3_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_10.setBackgroundColor(cl_fuchsia); + + + var hbl3_click = 0; + hbl3.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl3_click) + { + case 0: + this.setBottom(null); + this.setHeight("auto"); + break; + + case 1: + this.setWidth(30); + break; + + case 2: + this.setWidth(80); + break; + + case 3: + this.setWidth("auto"); + break; + + case 4: + this.setHeight(200); + break; + + case 5: + this.setHeight(null); + this.setBottom(48); + hbl3_click = 0; + return; + }; + + hbl3_click++; + }); + + w3_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w3_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w3_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w3_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w3_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w3_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w3_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w3_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w3_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w3_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl3.add(w3_1, w3_2, w3_3, w3_4, w3_5, w3_6, w3_7, w3_8, w3_9, w3_10); + d.add(hbl3); + + + + + /* *********************************************** + + EXAMPLE FOUR: + TOP ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl4 = new qx.ui.layout.VerticalBoxLayout; + + hbl4.setLeft(290); + hbl4.setTop(48); + hbl4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl4.setHeight(null); + hbl4.setBottom(48); + + hbl4.setSpacing(4); + hbl4.setPadding(8); + hbl4.setReverseChildrenOrder(true); + hbl4.setHorizontalChildrenAlign("right"); + + hbl4.setWidth(80); + + + + var w4_1 = new qx.ui.layout.CanvasLayout; + w4_1.setHeight(25); + w4_1.setWidth(25); + w4_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_1.setBackgroundColor(cl_white); + // w4_1.setMaxWidth(40); + + var w4_2 = new qx.ui.layout.CanvasLayout; + w4_2.setHeight(25); + w4_2.setWidth(25); + w4_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_2.setBackgroundColor(cl_blue); + w4_2.setRight(10); + + var w4_3 = new qx.ui.layout.CanvasLayout; + w4_3.setHeight(25); + w4_3.setWidth("100%"); + w4_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_3.setBackgroundColor(cl_yellow); + + var w4_4 = new qx.ui.layout.CanvasLayout; + w4_4.setHeight(25); + w4_4.setWidth(25); + w4_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_4.setBackgroundColor(cl_green); + + var w4_5 = new qx.ui.layout.CanvasLayout; + w4_5.setHeight(40); + // w4_5.setWidth(25); + w4_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_5.setBackgroundColor(cl_orange); + + var w4_6 = new qx.ui.layout.CanvasLayout; + w4_6.setHeight(25); + w4_6.setWidth(25); + w4_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_6.setBackgroundColor(cl_purple); + w4_6.setLeft(15); + w4_6.setTop(-25); + + var w4_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w4_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w4_9 = new qx.ui.layout.CanvasLayout; + w4_9.setHeight(25); + w4_9.setWidth(25); + w4_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_9.setBackgroundColor(cl_aqua); + + var w4_10 = new qx.ui.layout.CanvasLayout; + w4_10.setHeight(25); + w4_10.setWidth(25); + w4_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_10.setBackgroundColor(cl_fuchsia); + + + var hbl4_click = 0; + hbl4.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl4_click) + { + case 0: + this.setBottom(null); + this.setHeight("auto"); + break; + + case 1: + this.setWidth(30); + break; + + case 2: + this.setWidth("auto"); + break; + + case 3: + this.setWidth(80); + break; + + case 4: + this.setHeight(200); + break; + + case 5: + this.setHeight(null); + this.setBottom(48); + hbl4_click = 0; + return; + }; + + hbl4_click++; + }); + + w4_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w4_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w4_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w4_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w4_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w4_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w4_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w4_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w4_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w4_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl4.add(w4_1, w4_2, w4_3, w4_4, w4_5, w4_6, w4_7, w4_8, w4_9, w4_10); + d.add(hbl4); + + + + + /* *********************************************** + + EXAMPLE FIVE: + BOTTOM ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl5 = new qx.ui.layout.VerticalBoxLayout; + + hbl5.setLeft(380); + hbl5.setTop(48); + hbl5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl5.setHeight(null); + hbl5.setBottom(48); + + hbl5.setSpacing(4); + hbl5.setPadding(8); + + hbl5.setVerticalChildrenAlign("bottom"); + hbl5.setReverseChildrenOrder(true); + hbl5.setHorizontalChildrenAlign("center"); + + hbl5.setWidth(80); + + + var w5_1 = new qx.ui.layout.CanvasLayout; + w5_1.setHeight(25); + w5_1.setWidth(25); + w5_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_1.setBackgroundColor(cl_white); + // w5_1.setMaxWidth(40); + + var w5_2 = new qx.ui.layout.CanvasLayout; + w5_2.setHeight(25); + w5_2.setWidth(25); + w5_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_2.setBackgroundColor(cl_blue); + w5_2.setRight(10); + + var w5_3 = new qx.ui.layout.CanvasLayout; + w5_3.setHeight(25); + w5_3.setWidth("100%"); + w5_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_3.setBackgroundColor(cl_yellow); + + var w5_4 = new qx.ui.layout.CanvasLayout; + w5_4.setHeight(25); + w5_4.setWidth(25); + w5_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_4.setBackgroundColor(cl_green); + + var w5_5 = new qx.ui.layout.CanvasLayout; + w5_5.setHeight(40); + // w5_5.setWidth(25); + w5_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_5.setBackgroundColor(cl_orange); + + var w5_6 = new qx.ui.layout.CanvasLayout; + w5_6.setHeight(25); + w5_6.setWidth(25); + w5_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_6.setBackgroundColor(cl_purple); + w5_6.setLeft(15); + w5_6.setTop(-25); + + var w5_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w5_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w5_9 = new qx.ui.layout.CanvasLayout; + w5_9.setHeight(25); + w5_9.setWidth(25); + w5_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_9.setBackgroundColor(cl_aqua); + + var w5_10 = new qx.ui.layout.CanvasLayout; + w5_10.setHeight(25); + w5_10.setWidth(25); + w5_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_10.setBackgroundColor(cl_fuchsia); + + + var hbl5_click = 0; + hbl5.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl5_click) + { + case 0: + this.setBottom(null); + this.setHeight("auto"); + break; + + case 1: + this.setWidth(30); + break; + + case 2: + this.setWidth("auto"); + break; + + case 3: + this.setWidth(80); + break; + + case 4: + this.setHeight(200); + break; + + case 5: + this.setHeight(null); + this.setBottom(48); + hbl5_click = 0; + return; + }; + + hbl5_click++; + }); + + w5_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w5_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w5_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w5_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w5_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w5_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w5_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w5_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w5_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w5_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl5.add(w5_1, w5_2, w5_3, w5_4, w5_5, w5_6, w5_7, w5_8, w5_9, w5_10); + d.add(hbl5); + + + + + + + + + /* *********************************************** + + EXAMPLE SIX: + CENTER ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl6 = new qx.ui.layout.VerticalBoxLayout; + + hbl6.setLeft(470); + hbl6.setTop(48); + hbl6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl6.setHeight(null); + hbl6.setBottom(48); + + hbl6.setSpacing(4); + hbl6.setPadding(8); + + hbl6.setVerticalChildrenAlign("middle"); + hbl6.setReverseChildrenOrder(true); + hbl6.setWidth(80); + + + var w6_1 = new qx.ui.layout.CanvasLayout; + w6_1.setHeight(25); + w6_1.setWidth(25); + w6_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_1.setBackgroundColor(cl_white); + // w6_1.setMaxWidth(40); + + var w6_2 = new qx.ui.layout.CanvasLayout; + w6_2.setHeight(25); + w6_2.setWidth(25); + w6_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_2.setBackgroundColor(cl_blue); + w6_2.setRight(10); + + var w6_3 = new qx.ui.layout.CanvasLayout; + w6_3.setHeight(25); + w6_3.setWidth("100%"); + w6_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_3.setBackgroundColor(cl_yellow); + + var w6_4 = new qx.ui.layout.CanvasLayout; + w6_4.setHeight(25); + w6_4.setWidth(25); + w6_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_4.setBackgroundColor(cl_green); + + var w6_5 = new qx.ui.layout.CanvasLayout; + w6_5.setHeight(40); + // w6_5.setWidth(25); + w6_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_5.setBackgroundColor(cl_orange); + + var w6_6 = new qx.ui.layout.CanvasLayout; + w6_6.setHeight(25); + w6_6.setWidth(25); + w6_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_6.setBackgroundColor(cl_purple); + w6_6.setLeft(15); + w6_6.setTop(-25); + + var w6_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w6_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w6_9 = new qx.ui.layout.CanvasLayout; + w6_9.setHeight(25); + w6_9.setWidth(25); + w6_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_9.setBackgroundColor(cl_aqua); + + var w6_10 = new qx.ui.layout.CanvasLayout; + w6_10.setHeight(25); + w6_10.setWidth(25); + w6_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_10.setBackgroundColor(cl_fuchsia); + + + var hbl6_click = 0; + hbl6.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl6_click) + { + case 0: + this.setBottom(null); + this.setHeight("auto"); + break; + + case 1: + this.setWidth(30); + break; + + case 2: + this.setWidth("auto"); + break; + + case 3: + this.setWidth(80); + break; + + case 4: + this.setHeight(200); + break; + + case 5: + this.setHeight(null); + this.setBottom(48); + hbl6_click = 0; + return; + }; + + hbl6_click++; + }); + + w6_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w6_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w6_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w6_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w6_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w6_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w6_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w6_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w6_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w6_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl6.add(w6_1, w6_2, w6_3, w6_4, w6_5, w6_6, w6_7, w6_8, w6_9, w6_10); + d.add(hbl6); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_2.html new file mode 100644 index 0000000000..e0c55bc67d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_2.html @@ -0,0 +1,1227 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.VerticalBoxLayout widget. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var cl_white = new qx.renderer.color.Color("white"); + var cl_blue = new qx.renderer.color.Color("blue"); + var cl_yellow = new qx.renderer.color.Color("yellow"); + var cl_green = new qx.renderer.color.Color("green"); + var cl_orange = new qx.renderer.color.Color("orange"); + var cl_purple = new qx.renderer.color.Color("purple"); + var cl_aqua = new qx.renderer.color.Color("aqua"); + var cl_fuchsia = new qx.renderer.color.Color("fuchsia"); + + /* *********************************************** + + EXAMPLE ONE: + TOP ALIGN + + *********************************************** */ + + var hbl1 = new qx.ui.layout.VerticalBoxLayout; + + hbl1.setTop(48); + hbl1.setLeft(20); + hbl1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl1.setWidth("auto"); + hbl1.setBottom(48); + + hbl1.setSpacing(4); + hbl1.setPadding(8); + + hbl1.setHorizontalChildrenAlign("right"); + + + var w1_1 = new qx.ui.layout.CanvasLayout; + w1_1.setHeight(25); + w1_1.setWidth(25); + w1_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_1.setBackgroundColor(cl_white); + // w1_1.setMaxWidth(40); + + var w1_2 = new qx.ui.layout.CanvasLayout; + w1_2.setHeight(25); + w1_2.setWidth(25); + w1_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_2.setBackgroundColor(cl_blue); + w1_2.setRight(10); + + var w1_3 = new qx.ui.layout.CanvasLayout; + w1_3.setHeight(25); + w1_3.setWidth("100%"); + w1_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_3.setBackgroundColor(cl_yellow); + + var w1_4 = new qx.ui.layout.CanvasLayout; + w1_4.setHeight(25); + w1_4.setWidth(25); + w1_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_4.setBackgroundColor(cl_green); + + var w1_5 = new qx.ui.layout.CanvasLayout; + w1_5.setHeight("15%"); + // w1_5.setWidth(25); + w1_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_5.setBackgroundColor(cl_orange); + + var w1_6 = new qx.ui.layout.CanvasLayout; + w1_6.setHeight(25); + w1_6.setWidth(25); + w1_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_6.setBackgroundColor(cl_purple); + w1_6.setLeft(15); + w1_6.setTop(-25); + + var w1_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w1_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w1_9 = new qx.ui.layout.CanvasLayout; + w1_9.setHeight(25); + w1_9.setWidth(25); + w1_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_9.setBackgroundColor(cl_aqua); + + var w1_10 = new qx.ui.layout.CanvasLayout; + w1_10.setHeight(25); + w1_10.setWidth(25); + w1_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w1_10.setBackgroundColor(cl_fuchsia); + + var hbl1_click = 0; + hbl1.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl1_click) + { + case 0: + this.setWidth(30); + break; + + case 1: + this.setWidth(80); + break; + + case 2: + this.setWidth("auto"); + break; + + case 3: + this.setHeight(200); + break; + + case 4: + this.setHeight(null); + this.setBottom(48); + hbl1_click = 0; + return; + }; + + hbl1_click++; + }); + + w1_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w1_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w1_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w1_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w1_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w1_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w1_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w1_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w1_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w1_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl1.add(w1_1, w1_2, w1_3, w1_4, w1_5, w1_6, w1_7, w1_8, w1_9, w1_10); + d.add(hbl1); + + + + + + /* *********************************************** + + EXAMPLE TWO: + BOTTOM ALIGN + + *********************************************** */ + + var hbl2 = new qx.ui.layout.VerticalBoxLayout; + + hbl2.setLeft(110); + hbl2.setTop(48); + hbl2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl2.setWidth("auto"); + hbl2.setBottom(48); + + hbl2.setSpacing(4); + hbl2.setPadding(8); + + hbl2.setVerticalChildrenAlign("bottom"); + hbl2.setHorizontalChildrenAlign("center"); + + + var w2_1 = new qx.ui.layout.CanvasLayout; + w2_1.setHeight(25); + w2_1.setWidth(25); + w2_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_1.setBackgroundColor(cl_white); + // w2_1.setMaxWidth(40); + + var w2_2 = new qx.ui.layout.CanvasLayout; + w2_2.setHeight(25); + w2_2.setWidth(25); + w2_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_2.setBackgroundColor(cl_blue); + w2_2.setRight(10); + + var w2_3 = new qx.ui.layout.CanvasLayout; + w2_3.setHeight(25); + w2_3.setWidth("100%"); + w2_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_3.setBackgroundColor(cl_yellow); + + var w2_4 = new qx.ui.layout.CanvasLayout; + w2_4.setHeight(25); + w2_4.setWidth(25); + w2_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_4.setBackgroundColor(cl_green); + + var w2_5 = new qx.ui.layout.CanvasLayout; + w2_5.setHeight("15%"); + // w2_5.setWidth(25); + w2_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_5.setBackgroundColor(cl_orange); + + var w2_6 = new qx.ui.layout.CanvasLayout; + w2_6.setHeight(25); + w2_6.setWidth(25); + w2_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_6.setBackgroundColor(cl_purple); + w2_6.setLeft(15); + w2_6.setTop(-25); + + var w2_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w2_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w2_9 = new qx.ui.layout.CanvasLayout; + w2_9.setHeight(25); + w2_9.setWidth(25); + w2_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_9.setBackgroundColor(cl_aqua); + + var w2_10 = new qx.ui.layout.CanvasLayout; + w2_10.setHeight(25); + w2_10.setWidth(25); + w2_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w2_10.setBackgroundColor(cl_fuchsia); + w2_10.foo = true; + + + var hbl2_click = 0; + hbl2.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl2_click) + { + case 0: + this.setWidth(30); + break; + + case 1: + this.setWidth(80); + break; + + case 2: + this.setWidth("auto"); + break; + + case 3: + this.setHeight(200); + break; + + case 4: + this.setHeight(null); + this.setBottom(48); + hbl2_click = 0; + return; + }; + + hbl2_click++; + }); + + w2_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w2_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w2_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w2_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w2_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w2_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w2_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w2_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w2_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w2_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl2.add(w2_1, w2_2, w2_3, w2_4, w2_5, w2_6, w2_7, w2_8, w2_9, w2_10); + d.add(hbl2); + + + /* *********************************************** + + EXAMPLE THREE: + CENTER ALIGN + + *********************************************** */ + + var hbl3 = new qx.ui.layout.VerticalBoxLayout; + + hbl3.setLeft(200); + hbl3.setTop(48); + hbl3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl3.setWidth("auto"); + hbl3.setBottom(48); + + hbl3.setSpacing(4); + hbl3.setPadding(8); + + hbl3.setVerticalChildrenAlign("middle"); + + + + var w3_1 = new qx.ui.layout.CanvasLayout; + w3_1.setHeight(25); + w3_1.setWidth(25); + w3_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_1.setBackgroundColor(cl_white); + // w3_1.setMaxWidth(40); + + var w3_2 = new qx.ui.layout.CanvasLayout; + w3_2.setHeight(25); + w3_2.setWidth(25); + w3_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_2.setBackgroundColor(cl_blue); + w3_2.setRight(10); + + var w3_3 = new qx.ui.layout.CanvasLayout; + w3_3.setHeight(25); + w3_3.setWidth("100%"); + w3_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_3.setBackgroundColor(cl_yellow); + + var w3_4 = new qx.ui.layout.CanvasLayout; + w3_4.setHeight(25); + w3_4.setWidth(25); + w3_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_4.setBackgroundColor(cl_green); + + var w3_5 = new qx.ui.layout.CanvasLayout; + w3_5.setHeight("15%"); + // w3_5.setWidth(25); + w3_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_5.setBackgroundColor(cl_orange); + + var w3_6 = new qx.ui.layout.CanvasLayout; + w3_6.setHeight(25); + w3_6.setWidth(25); + w3_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_6.setBackgroundColor(cl_purple); + w3_6.setLeft(15); + w3_6.setTop(-25); + + var w3_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w3_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w3_9 = new qx.ui.layout.CanvasLayout; + w3_9.setHeight(25); + w3_9.setWidth(25); + w3_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_9.setBackgroundColor(cl_aqua); + + var w3_10 = new qx.ui.layout.CanvasLayout; + w3_10.setHeight(25); + w3_10.setWidth(25); + w3_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w3_10.setBackgroundColor(cl_fuchsia); + + + var hbl3_click = 0; + hbl3.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl3_click) + { + case 0: + this.setWidth(30); + break; + + case 1: + this.setWidth(80); + break; + + case 2: + this.setWidth("auto"); + break; + + case 3: + this.setHeight(200); + break; + + case 4: + this.setHeight(null); + this.setBottom(48); + hbl3_click = 0; + return; + }; + + hbl3_click++; + }); + + w3_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w3_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w3_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w3_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w3_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w3_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w3_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w3_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w3_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w3_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl3.add(w3_1, w3_2, w3_3, w3_4, w3_5, w3_6, w3_7, w3_8, w3_9, w3_10); + d.add(hbl3); + + + + + /* *********************************************** + + EXAMPLE FOUR: + TOP ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl4 = new qx.ui.layout.VerticalBoxLayout; + + hbl4.setLeft(290); + hbl4.setTop(48); + hbl4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl4.setHeight(null); + hbl4.setBottom(48); + + hbl4.setSpacing(4); + hbl4.setPadding(8); + hbl4.setReverseChildrenOrder(true); + hbl4.setHorizontalChildrenAlign("right"); + + hbl4.setWidth(80); + + + + var w4_1 = new qx.ui.layout.CanvasLayout; + w4_1.setHeight(25); + w4_1.setWidth(25); + w4_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_1.setBackgroundColor(cl_white); + // w4_1.setMaxWidth(40); + + var w4_2 = new qx.ui.layout.CanvasLayout; + w4_2.setHeight(25); + w4_2.setWidth(25); + w4_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_2.setBackgroundColor(cl_blue); + w4_2.setRight(10); + + var w4_3 = new qx.ui.layout.CanvasLayout; + w4_3.setHeight(25); + w4_3.setWidth("100%"); + w4_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_3.setBackgroundColor(cl_yellow); + + var w4_4 = new qx.ui.layout.CanvasLayout; + w4_4.setHeight(25); + w4_4.setWidth(25); + w4_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_4.setBackgroundColor(cl_green); + + var w4_5 = new qx.ui.layout.CanvasLayout; + w4_5.setHeight("15%"); + // w4_5.setWidth(25); + w4_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_5.setBackgroundColor(cl_orange); + + var w4_6 = new qx.ui.layout.CanvasLayout; + w4_6.setHeight(25); + w4_6.setWidth(25); + w4_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_6.setBackgroundColor(cl_purple); + w4_6.setLeft(15); + w4_6.setTop(-25); + + var w4_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w4_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w4_9 = new qx.ui.layout.CanvasLayout; + w4_9.setHeight(25); + w4_9.setWidth(25); + w4_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_9.setBackgroundColor(cl_aqua); + + var w4_10 = new qx.ui.layout.CanvasLayout; + w4_10.setHeight(25); + w4_10.setWidth(25); + w4_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w4_10.setBackgroundColor(cl_fuchsia); + + + var hbl4_click = 0; + hbl4.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl4_click) + { + case 0: + this.setWidth(30); + break; + + case 1: + this.setWidth("auto"); + break; + + case 2: + this.setWidth(80); + break; + + case 3: + this.setHeight(200); + break; + + case 4: + this.setHeight(null); + this.setBottom(48); + hbl4_click = 0; + return; + }; + + hbl4_click++; + }); + + w4_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w4_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w4_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w4_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w4_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w4_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w4_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w4_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w4_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w4_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl4.add(w4_1, w4_2, w4_3, w4_4, w4_5, w4_6, w4_7, w4_8, w4_9, w4_10); + d.add(hbl4); + + + + + /* *********************************************** + + EXAMPLE FIVE: + BOTTOM ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl5 = new qx.ui.layout.VerticalBoxLayout; + + hbl5.setLeft(380); + hbl5.setTop(48); + hbl5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl5.setHeight(null); + hbl5.setBottom(48); + + hbl5.setSpacing(4); + hbl5.setPadding(8); + + hbl5.setVerticalChildrenAlign("bottom"); + hbl5.setReverseChildrenOrder(true); + hbl5.setHorizontalChildrenAlign("center"); + + hbl5.setWidth(80); + + + var w5_1 = new qx.ui.layout.CanvasLayout; + w5_1.setHeight(25); + w5_1.setWidth(25); + w5_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_1.setBackgroundColor(cl_white); + // w5_1.setMaxWidth(40); + + var w5_2 = new qx.ui.layout.CanvasLayout; + w5_2.setHeight(25); + w5_2.setWidth(25); + w5_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_2.setBackgroundColor(cl_blue); + w5_2.setRight(10); + + var w5_3 = new qx.ui.layout.CanvasLayout; + w5_3.setHeight(25); + w5_3.setWidth("100%"); + w5_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_3.setBackgroundColor(cl_yellow); + + var w5_4 = new qx.ui.layout.CanvasLayout; + w5_4.setHeight(25); + w5_4.setWidth(25); + w5_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_4.setBackgroundColor(cl_green); + + var w5_5 = new qx.ui.layout.CanvasLayout; + w5_5.setHeight("15%"); + // w5_5.setWidth(25); + w5_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_5.setBackgroundColor(cl_orange); + + var w5_6 = new qx.ui.layout.CanvasLayout; + w5_6.setHeight(25); + w5_6.setWidth(25); + w5_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_6.setBackgroundColor(cl_purple); + w5_6.setLeft(15); + w5_6.setTop(-25); + + var w5_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w5_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w5_9 = new qx.ui.layout.CanvasLayout; + w5_9.setHeight(25); + w5_9.setWidth(25); + w5_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_9.setBackgroundColor(cl_aqua); + + var w5_10 = new qx.ui.layout.CanvasLayout; + w5_10.setHeight(25); + w5_10.setWidth(25); + w5_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w5_10.setBackgroundColor(cl_fuchsia); + + + var hbl5_click = 0; + hbl5.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl5_click) + { + case 0: + this.setWidth(30); + break; + + case 1: + this.setWidth("auto"); + break; + + case 2: + this.setWidth(80); + break; + + case 3: + this.setHeight(200); + break; + + case 4: + this.setHeight(null); + this.setBottom(48); + hbl5_click = 0; + return; + }; + + hbl5_click++; + }); + + w5_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w5_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w5_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w5_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w5_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w5_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w5_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w5_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w5_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w5_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl5.add(w5_1, w5_2, w5_3, w5_4, w5_5, w5_6, w5_7, w5_8, w5_9, w5_10); + d.add(hbl5); + + + + + + + + + /* *********************************************** + + EXAMPLE SIX: + CENTER ALIGN, REVERTED CHILDREN ORDER + + *********************************************** */ + + var hbl6 = new qx.ui.layout.VerticalBoxLayout; + + hbl6.setLeft(470); + hbl6.setTop(48); + hbl6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl6.setHeight(null); + hbl6.setBottom(48); + + hbl6.setSpacing(4); + hbl6.setPadding(8); + + hbl6.setVerticalChildrenAlign("middle"); + hbl6.setReverseChildrenOrder(true); + hbl6.setWidth(80); + + + var w6_1 = new qx.ui.layout.CanvasLayout; + w6_1.setHeight(25); + w6_1.setWidth(25); + w6_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_1.setBackgroundColor(cl_white); + // w6_1.setMaxWidth(40); + + var w6_2 = new qx.ui.layout.CanvasLayout; + w6_2.setHeight(25); + w6_2.setWidth(25); + w6_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_2.setBackgroundColor(cl_blue); + w6_2.setRight(10); + + var w6_3 = new qx.ui.layout.CanvasLayout; + w6_3.setHeight(25); + w6_3.setWidth("100%"); + w6_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_3.setBackgroundColor(cl_yellow); + + var w6_4 = new qx.ui.layout.CanvasLayout; + w6_4.setHeight(25); + w6_4.setWidth(25); + w6_4.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_4.setBackgroundColor(cl_green); + + var w6_5 = new qx.ui.layout.CanvasLayout; + w6_5.setHeight("15%"); + // w6_5.setWidth(25); + w6_5.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_5.setBackgroundColor(cl_orange); + + var w6_6 = new qx.ui.layout.CanvasLayout; + w6_6.setHeight(25); + w6_6.setWidth(25); + w6_6.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_6.setBackgroundColor(cl_purple); + w6_6.setLeft(15); + w6_6.setTop(-25); + + var w6_7 = new qx.ui.basic.Image("icon/32/apps/accessories-clock.png"); + + var w6_8 = new qx.ui.basic.Image("icon/32/actions/format-color.png"); + + var w6_9 = new qx.ui.layout.CanvasLayout; + w6_9.setHeight(25); + w6_9.setWidth(25); + w6_9.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_9.setBackgroundColor(cl_aqua); + + var w6_10 = new qx.ui.layout.CanvasLayout; + w6_10.setHeight(25); + w6_10.setWidth(25); + w6_10.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + w6_10.setBackgroundColor(cl_fuchsia); + + + var hbl6_click = 0; + hbl6.addEventListener("click", function(e) + { + if (e.getTarget()!=this) { + return; + }; + + switch(hbl6_click) + { + case 0: + this.setWidth(30); + break; + + case 1: + this.setWidth("auto"); + break; + + case 2: + this.setWidth(80); + break; + + case 3: + this.setHeight(200); + break; + + case 4: + this.setHeight(null); + this.setBottom(48); + hbl6_click = 0; + return; + }; + + hbl6_click++; + }); + + w6_1.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(65); + this.setWidth(65); + this.setBorder(new qx.renderer.border.Border(6, "double", "black")); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + }; + }); + + w6_2.addEventListener("click", function(e) { + this.getMarginBottom() == 0 ? this.setMarginBottom(10) : this.setMarginBottom(0); + }); + + w6_3.addEventListener("click", function(e) { + this.getMinHeight() == -Infinity ? this.setMinHeight(100) : this.setMinHeight(-Infinity); + }); + + w6_4.addEventListener("click", function(e) { + this.getHeight() == 25 ? this.setHeight(50) : this.setHeight(25); + }); + + w6_5.addEventListener("click", function(e) { + this.getHeight() == 40 ? this.setHeight(80) : this.setHeight(40); + }); + + w6_6.addEventListener("click", function(e) { + this.getTop() == -25 ? this.setTop(25) : this.setTop(-25); + }); + + w6_7.addEventListener("click", function(e) { + this.getSource() == "icon/32/apps/accessories-clock.png" ? this.setSource("icon/64/apps/accessories-clock.png") : this.setSource("icon/32/apps/accessories-clock.png"); + }); + + w6_8.addEventListener("click", function(e) { + this.getSource() == "icon/32/actions/format-color.png" ? this.setSource("icon/16/actions/format-color.png") : this.setSource("icon/32/actions/format-color.png"); + }); + + w6_9.addEventListener("click", function(e) + { + if (this.getLeft() == null) + { + this.setLeft(20); + this.setTop(-10); + } + else + { + this.setLeft(null); + this.setTop(null); + }; + }); + + w6_10.addEventListener("click", function(e) + { + if (this.getHeight() == 25) + { + this.setHeight(10); + this.setWidth(10); + this.setTop(-5); + this.setRight(15); + } + else + { + this.setHeight(25); + this.setWidth(25); + this.setTop(null); + this.setRight(null); + }; + }); + + + + hbl6.add(w6_1, w6_2, w6_3, w6_4, w6_5, w6_6, w6_7, w6_8, w6_9, w6_10); + d.add(hbl6); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_3.html new file mode 100644 index 0000000000..7e9efb07b4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/VerticalBoxLayout_3.html @@ -0,0 +1,552 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + Tests for the new implementation of the qx.ui.layout.VerticalBoxLayout widget.<br/> + <br/> + 1. Simple testing, one static and one flex child<br/> + 2. Two flex children with the same priority<br/> + 3. The same as #2, but the second has the doubled priority compared to the first<br/> + <br/> + + 4. The same as #3, but now the second child has a max-height of 50px<br/> + 5. The same as #4, but now with enabled "advancedFlexAllocation"<br/> + <br/> + + 6. The same as #3, but now the second has a min height of 300px<br/> + 7. The same as #6, but now with enabled "advancedFlexAllocation"<br/> + <br/> + + 8. Three children with the priorities: 1, 2 and 3. The second has a maxHeight of 50px<br/> + 9. The same as #8, but now with enabled "advancedFlexAllocation"<br/> + <br/> + + 10. Three children with the priorities: 1, 2 and 3. Added a few mouse actions.<br/> + 11. Three children with the priorities: 1, a static height of 80px and 3.<br/> + 12. The same as #11, but configured as 'auto' height. + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + /* *********************************************** + + EXAMPLE 1: + + *********************************************** */ + + var te1 = new qx.ui.basic.Label("#1"); + te1.setLocation(20, 48); + d.add(te1); + + var hbl1 = new qx.ui.layout.VerticalBoxLayout; + hbl1.setTop(78); + hbl1.setLeft(20); + hbl1.setBottom(48); + hbl1.setHeight(null); + hbl1.setWidth("auto"); + hbl1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl1.setSpacing(4); + hbl1.setPadding(2); + d.add(hbl1); + + var t1_1 = new qx.ui.basic.Terminator; + t1_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t1_1.setHeight(20); + t1_1.setWidth(10); + t1_1.setBackgroundColor("green"); + hbl1.add(t1_1); + + t1_1.addEventListener("click", function() { + this.setHeight(this.getHeight() == 20 ? 100 : 20); + }); + + var t1_2 = new qx.ui.basic.Terminator; + t1_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t1_2.setHeight("1*"); + t1_2.setWidth(10); + t1_2.setBackgroundColor("blue"); + hbl1.add(t1_2); + + + + + /* *********************************************** + + EXAMPLE 2: + + *********************************************** */ + + var te2 = new qx.ui.basic.Label("#2"); + te2.setLocation(40, 48); + d.add(te2); + + var hbl2 = new qx.ui.layout.VerticalBoxLayout; + hbl2.setTop(78); + hbl2.setLeft(40); + hbl2.setBottom(48); + hbl2.setHeight(null); + hbl2.setWidth("auto"); + hbl2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl2.setSpacing(4); + hbl2.setPadding(2); + d.add(hbl2); + + var t2_1 = new qx.ui.basic.Terminator; + t2_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t2_1.setHeight("1*"); + t2_1.setWidth(10); + t2_1.setBackgroundColor("green"); + hbl2.add(t2_1); + + var t2_2 = new qx.ui.basic.Terminator; + t2_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t2_2.setHeight("1*"); + t2_2.setWidth(10); + t2_2.setBackgroundColor("blue"); + hbl2.add(t2_2); + + + + + + + /* *********************************************** + + EXAMPLE 3: + + *********************************************** */ + + var te3 = new qx.ui.basic.Label("#3"); + te3.setLocation(60, 48); + d.add(te3); + + var hbl3 = new qx.ui.layout.VerticalBoxLayout; + hbl3.setTop(78); + hbl3.setLeft(60); + hbl3.setBottom(48); + hbl3.setHeight(null); + hbl3.setWidth("auto"); + hbl3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl3.setSpacing(4); + hbl3.setPadding(2); + d.add(hbl3); + + var t3_1 = new qx.ui.basic.Terminator; + t3_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t3_1.setHeight("1*"); + t3_1.setWidth(10); + t3_1.setBackgroundColor("green"); + hbl3.add(t3_1); + + var t3_2 = new qx.ui.basic.Terminator; + t3_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t3_2.setHeight("2*"); + t3_2.setWidth(10); + t3_2.setBackgroundColor("blue"); + hbl3.add(t3_2); + + + + + /* *********************************************** + + EXAMPLE 4: + + *********************************************** */ + + var te4 = new qx.ui.basic.Label("#4"); + te4.setLocation(100, 48); + d.add(te4); + + var hbl4 = new qx.ui.layout.VerticalBoxLayout; + hbl4.setTop(78); + hbl4.setLeft(100); + hbl4.setBottom(48); + hbl4.setHeight(null); + hbl4.setWidth("auto"); + hbl4.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl4.setSpacing(4); + hbl4.setPadding(2); + d.add(hbl4); + + var t4_1 = new qx.ui.basic.Terminator; + t4_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t4_1.setHeight("1*"); + t4_1.setWidth(10); + t4_1.setBackgroundColor("green"); + hbl4.add(t4_1); + + var t4_2 = new qx.ui.basic.Terminator; + t4_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t4_2.setHeight("2*"); + t4_2.setWidth(10); + t4_2.setMaxHeight(50); + t4_2.setBackgroundColor("blue"); + hbl4.add(t4_2); + + + + + /* *********************************************** + + EXAMPLE 5: + + *********************************************** */ + + var te5 = new qx.ui.basic.Label("#5"); + te5.setLocation(120, 48); + d.add(te5); + + var hbl5 = new qx.ui.layout.VerticalBoxLayout; + hbl5.setTop(78); + hbl5.setLeft(120); + hbl5.setBottom(48); + hbl5.setHeight(null); + hbl5.setWidth("auto"); + hbl5.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl5.setSpacing(4); + hbl5.setPadding(2); + hbl5.setUseAdvancedFlexAllocation(true); + d.add(hbl5); + + var t5_1 = new qx.ui.basic.Terminator; + t5_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t5_1.setHeight("1*"); + t5_1.setWidth(10); + t5_1.setBackgroundColor("green"); + hbl5.add(t5_1); + + var t5_2 = new qx.ui.basic.Terminator; + t5_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t5_2.setHeight("2*"); + t5_2.setWidth(10); + t5_2.setMaxHeight(50); + t5_2.setBackgroundColor("blue"); + hbl5.add(t5_2); + + + + + /* *********************************************** + + EXAMPLE 6: + + *********************************************** */ + + var te6 = new qx.ui.basic.Label("#6"); + te6.setLocation(160, 48); + d.add(te6); + + var hbl6 = new qx.ui.layout.VerticalBoxLayout; + hbl6.setTop(78); + hbl6.setLeft(160); + hbl6.setBottom(48); + hbl6.setHeight(null); + hbl6.setWidth("auto"); + hbl6.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl6.setSpacing(4); + hbl6.setPadding(2); + d.add(hbl6); + + var t6_1 = new qx.ui.basic.Terminator; + t6_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t6_1.setHeight("1*"); + t6_1.setWidth(10); + t6_1.setBackgroundColor("green"); + hbl6.add(t6_1); + + var t6_2 = new qx.ui.basic.Terminator; + t6_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t6_2.setHeight("2*"); + t6_2.setWidth(10); + t6_2.setMinHeight(300); + t6_2.setBackgroundColor("blue"); + hbl6.add(t6_2); + + + + + /* *********************************************** + + EXAMPLE 7: + + *********************************************** */ + + var te7 = new qx.ui.basic.Label("#7"); + te7.setLocation(180, 48); + d.add(te7); + + var hbl7 = new qx.ui.layout.VerticalBoxLayout; + hbl7.setTop(78); + hbl7.setLeft(180); + hbl7.setBottom(48); + hbl7.setHeight(null); + hbl7.setWidth("auto"); + hbl7.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl7.setSpacing(4); + hbl7.setPadding(2); + hbl7.setUseAdvancedFlexAllocation(true); + d.add(hbl7); + + var t7_1 = new qx.ui.basic.Terminator; + t7_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t7_1.setHeight("1*"); + t7_1.setWidth(10); + t7_1.setBackgroundColor("green"); + hbl7.add(t7_1); + + var t7_2 = new qx.ui.basic.Terminator; + t7_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t7_2.setHeight("2*"); + t7_2.setWidth(10); + t7_2.setMinHeight(300); + t7_2.setBackgroundColor("blue"); + hbl7.add(t7_2); + + + + + /* *********************************************** + + EXAMPLE 8: + + *********************************************** */ + + var te8 = new qx.ui.basic.Label("#8"); + te8.setLocation(220, 48); + d.add(te8); + + var hbl8 = new qx.ui.layout.VerticalBoxLayout; + hbl8.setTop(78); + hbl8.setLeft(220); + hbl8.setBottom(48); + hbl8.setHeight(null); + hbl8.setWidth("auto"); + hbl8.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl8.setSpacing(4); + hbl8.setPadding(2); + d.add(hbl8); + + var t8_1 = new qx.ui.basic.Terminator; + t8_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t8_1.setHeight("1*"); + t8_1.setWidth(10); + t8_1.setBackgroundColor("green"); + hbl8.add(t8_1); + + var t8_2 = new qx.ui.basic.Terminator; + t8_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t8_2.setHeight("2*"); + t8_2.setWidth(10); + t8_2.setBackgroundColor("blue"); + t8_2.setMaxHeight(50); + hbl8.add(t8_2); + + var t8_3 = new qx.ui.basic.Terminator; + t8_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t8_3.setHeight("3*"); + t8_3.setWidth(10); + t8_3.setBackgroundColor("red"); + hbl8.add(t8_3); + + + + /* *********************************************** + + EXAMPLE 9: + + *********************************************** */ + + var te9 = new qx.ui.basic.Label("#9"); + te9.setLocation(240, 48); + d.add(te9); + + var hbl9 = new qx.ui.layout.VerticalBoxLayout; + hbl9.setTop(78); + hbl9.setLeft(240); + hbl9.setBottom(48); + hbl9.setHeight(null); + hbl9.setWidth("auto"); + hbl9.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl9.setSpacing(4); + hbl9.setPadding(2); + hbl9.setUseAdvancedFlexAllocation(true); + d.add(hbl9); + + var t9_1 = new qx.ui.basic.Terminator; + t9_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t9_1.setHeight("1*"); + t9_1.setWidth(10); + t9_1.setBackgroundColor("green"); + hbl9.add(t9_1); + + var t9_2 = new qx.ui.basic.Terminator; + t9_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t9_2.setHeight("2*"); + t9_2.setWidth(10); + t9_2.setBackgroundColor("blue"); + t9_2.setMaxHeight(50); + hbl9.add(t9_2); + + var t9_3 = new qx.ui.basic.Terminator; + t9_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t9_3.setHeight("3*"); + t9_3.setWidth(10); + t9_3.setBackgroundColor("red"); + hbl9.add(t9_3); + + + + + /* *********************************************** + + EXAMPLE 10: + + *********************************************** */ + + var te10 = new qx.ui.basic.Label("#10"); + te10.setLocation(280, 48); + d.add(te10); + + var hbl10 = new qx.ui.layout.VerticalBoxLayout; + hbl10.setTop(78); + hbl10.setLeft(280); + hbl10.setBottom(48); + hbl10.setHeight(null); + hbl10.setWidth("auto"); + hbl10.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl10.setSpacing(4); + hbl10.setPadding(2); + hbl10.setUseAdvancedFlexAllocation(true); + d.add(hbl10); + + var t10_1 = new qx.ui.basic.Terminator; + t10_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t10_1.setHeight("1*"); + t10_1.setWidth(10); + t10_1.setBackgroundColor("green"); + t10_1.addEventListener("click", function(e) { this.setHeight(this.getHeight() == "1*" ? "4*" : "1*"); }); + hbl10.add(t10_1); + + var t10_2 = new qx.ui.basic.Terminator; + t10_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t10_2.setHeight("2*"); + t10_2.setWidth(10); + t10_2.setBackgroundColor("blue"); + t10_2.addEventListener("click", function(e) { this.setHeight(this.getHeight() == "2*" ? "1*" : "2*"); }); + hbl10.add(t10_2); + + var t10_3 = new qx.ui.basic.Terminator; + t10_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t10_3.setHeight("3*"); + t10_3.setWidth(10); + t10_3.setBackgroundColor("red"); + t10_3.addEventListener("click", function(e) { this.setHeight(this.getHeight() == "3*" ? "6*" : "3*"); }); + hbl10.add(t10_3); + + + + + /* *********************************************** + + EXAMPLE 11: + + *********************************************** */ + + var te11 = new qx.ui.basic.Label("#11"); + te11.setLocation(300, 48); + d.add(te11); + + var hbl11 = new qx.ui.layout.VerticalBoxLayout; + hbl11.setTop(78); + hbl11.setLeft(300); + hbl11.setBottom(48); + hbl11.setHeight(null); + hbl11.setWidth("auto"); + hbl11.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl11.setSpacing(4); + hbl11.setPadding(2); + d.add(hbl11); + + var t11_1 = new qx.ui.basic.Terminator; + t11_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t11_1.setHeight("1*"); + t11_1.setWidth(10); + t11_1.setBackgroundColor("green"); + hbl11.add(t11_1); + + var t11_2 = new qx.ui.basic.Terminator; + t11_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t11_2.setHeight(80); + t11_2.setWidth(10); + t11_2.setBackgroundColor("blue"); + hbl11.add(t11_2); + + var t11_3 = new qx.ui.basic.Terminator; + t11_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t11_3.setHeight("3*"); + t11_3.setWidth(10); + t11_3.setBackgroundColor("red"); + hbl11.add(t11_3); + + + + + /* *********************************************** + + EXAMPLE 12: + + *********************************************** */ + + var te12 = new qx.ui.basic.Label("#13"); + te12.setLocation(320, 48); + d.add(te12); + + var hbl12 = new qx.ui.layout.VerticalBoxLayout; + hbl12.setTop(78); + hbl12.setLeft(320); + hbl12.setWidth("auto"); + hbl12.setHeight("auto"); + hbl12.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + hbl12.setSpacing(4); + hbl12.setPadding(2); + d.add(hbl12); + + var t12_1 = new qx.ui.basic.Terminator; + t12_1.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t12_1.setHeight("1*"); + t12_1.setWidth(10); + t12_1.setBackgroundColor("green"); + hbl12.add(t12_1); + + var t12_2 = new qx.ui.basic.Terminator; + t12_2.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t12_2.setHeight(80); + t12_2.setWidth(10); + t12_2.setBackgroundColor("blue"); + hbl12.add(t12_2); + + var t12_3 = new qx.ui.basic.Terminator; + t12_3.setBorder(qx.renderer.border.BorderPresets.getInstance().black); + t12_3.setHeight("3*"); + t12_3.setWidth(10); + t12_3.setBackgroundColor("red"); + hbl12.add(t12_3); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_1.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_1.html new file mode 100644 index 0000000000..211bcabc51 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_1.html @@ -0,0 +1,179 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Who Framed Roger Rabbit?</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var w0 = new qx.ui.layout.CanvasLayout; + w0.set({left:20, top:48, right: 335, bottom: 48, backgroundColor:"Background", border:qx.renderer.border.BorderPresets.getInstance().inset}); + w0.setOverflow("hidden"); + d.add(w0); + + var w1 = new qx.ui.window.Window("First Window"); + w1.setSpace(20, 400, 20, 250); + w0.add(w1); + + var w2 = new qx.ui.window.Window("Second Window", "icon/16/categories/applications-graphics.png"); + w2.setSpace(200, 300, 80, 350); + w0.add(w2); + + var w3 = new qx.ui.window.Window("Third Window", "icon/16/categories/applications-internet.png"); + w3.setSpace(100, 300, 200, 200); + w3.setMaxWidth(450); + w3.setMaxHeight(300); + w0.add(w3); + + + + + var a1 = new qx.ui.basic.Atom("Welcome to your first own Window.<br/>Have fun!", "icon/32/apps/accessories-archiver.png"); + a1.set({ top: 4, left: 4 }); + w1.add(a1); + + + + var tf1 = new qx.ui.pageview.tabview.TabView; + tf1.set({ left: 10, top: 52, right: 10, bottom: 10 }); + + var t1_1 = new qx.ui.pageview.tabview.Button("Explore"); + var t1_2 = new qx.ui.pageview.tabview.Button("Internet"); + var t1_3 = new qx.ui.pageview.tabview.Button("Future"); + + t1_1.setChecked(true); + + tf1.getBar().add(t1_1, t1_2, t1_3); + + var p1_1 = new qx.ui.pageview.tabview.Page(t1_1); + var p1_2 = new qx.ui.pageview.tabview.Page(t1_2); + var p1_3 = new qx.ui.pageview.tabview.Page(t1_3); + + tf1.getPane().add(p1_1, p1_2, p1_3); + + w1.add(tf1); + + + + var at1 = new qx.ui.basic.Atom("Second Window", "icon/22/apps/accessories-clock.png"); + at1.setLocation(4, 4); + w2.add(at1); + + + var at2 = new qx.ui.basic.Atom("Third Window", "icon/48/categories/applications-graphics.png"); + at2.setLocation(4, 4); + w3.add(at2); + + + + + + + var fs1 = new qx.ui.groupbox.GroupBox("Settings"); + fs1.setLocation(4, 30); + fs1.setRight(4); + fs1.setBottom(4); + + + var chk1 = new qx.ui.form.CheckBox("Show Icon"); + chk1.setLocation(0, 0); + chk1.setChecked(true); + chk1.addEventListener("changeChecked", function(e) { + w2.setShowIcon(e.getData()); + }); + + var chk2 = new qx.ui.form.CheckBox("Show Caption"); + chk2.setLocation(0, 20); + chk2.setChecked(true); + chk2.addEventListener("changeChecked", function(e) { + w2.setShowCaption(e.getData()); + }); + + + + var chk3 = new qx.ui.form.CheckBox("Resizeable"); + chk3.setLocation(0, 50); + chk3.setChecked(true); + chk3.addEventListener("changeChecked", function(e) { + w2.setResizeable(e.getData()); + }); + + var chk4 = new qx.ui.form.CheckBox("Moveable"); + chk4.setLocation(0, 70); + chk4.setChecked(true); + chk4.addEventListener("changeChecked", function(e) { + w2.setMoveable(e.getData()); + }); + + + + var chk5 = new qx.ui.form.CheckBox("Show Close"); + chk5.setLocation(0, 100); + chk5.setChecked(true); + chk5.addEventListener("changeChecked", function(e) { + w2.setShowClose(e.getData()); + }); + + var chk6 = new qx.ui.form.CheckBox("Show Maximize/Restore"); + chk6.setLocation(0, 120); + chk6.setChecked(true); + chk6.addEventListener("changeChecked", function(e) { + w2.setShowMaximize(e.getData()); + }); + + var chk7 = new qx.ui.form.CheckBox("Show Minimize"); + chk7.setLocation(0, 140); + chk7.setChecked(true); + chk7.addEventListener("changeChecked", function(e) { + w2.setShowMinimize(e.getData()); + }); + + + + var chk8 = new qx.ui.form.CheckBox("Allow Close"); + chk8.setLocation(0, 170); + chk8.setChecked(true); + chk8.addEventListener("changeChecked", function(e) { + w2.setAllowClose(e.getData()); + }); + + var chk9 = new qx.ui.form.CheckBox("Allow Maximize"); + chk9.setLocation(0, 190); + chk9.setChecked(true); + chk9.addEventListener("changeChecked", function(e) { + w2.setAllowMaximize(e.getData()); + }); + + var chk10 = new qx.ui.form.CheckBox("Allow Minimize"); + chk10.setLocation(0, 210); + chk10.setChecked(true); + chk10.addEventListener("changeChecked", function(e) { + w2.setAllowMinimize(e.getData()); + }); + + + fs1.add(chk1, chk2, chk3, chk4, chk5, chk6, chk7, chk8, chk9, chk10); + w2.add(fs1); + + + w1.open(); + w2.open(); + w3.open(); + }); + </script> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_2.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_2.html new file mode 100644 index 0000000000..60b220ab96 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_2.html @@ -0,0 +1,54 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Testing auto dimension possibility of qx.ui.window.Window.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + var w1 = new qx.ui.window.Window("First Window"); + w1.getPane().setPadding(10); + w1.setLocation(100, 100); + w1.setWidth("auto"); + w1.setHeight("auto"); + + d.add(w1); + + var a1 = new qx.ui.basic.Atom("Welcome to your first own Window.<br/>Have fun!", "icon/32/actions/favorite-add.png"); + a1.set({ top: 0, left: 100 }); + w1.add(a1); + + var chk1 = new qx.ui.form.CheckBox("Show Statusbar"); + chk1.set({ top: 45, left: 0 }); + + chk1.addEventListener("changeChecked", function(e) { + w1.setShowStatusbar(e.getData()); + }); + + var btn1 = new qx.ui.form.Button("Yes", "icon/16/actions/dialog-ok.png"); + btn1.set({ top: 70, left : 0 }); + + var btn2 = new qx.ui.form.Button("No", "icon/16/actions/dialog-cancel.png"); + btn2.set({ top: 70, right : 0 }); + + w1.add(chk1, btn1, btn2); + + w1.open(); + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_3.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_3.html new file mode 100644 index 0000000000..6358dce19a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_3.html @@ -0,0 +1,99 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Modal dialog with qx.ui.form.TextField and qx.ui.form.TextArea</p> + </div> + + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + + var d = qx.ui.core.ClientDocument.getInstance(); + var txtfld; + + var dialogEditFrage = new qx.ui.window.Window("Edit", "icon/16/apps/accessories-text-editor.png"); + + with(dialogEditFrage) { + setSpace(300, 400, 100, 300); + setModal(true); + + setShowClose(false); + + var qx_widget = new qx.ui.basic.Atom('Question'); + with(qx_widget) + { + setHorizontalChildrenAlign('right'); + set({top:10,left:10,width:'20%'}); + }; + add(qx_widget); + + qx_widget = txtfld = new qx.ui.form.TextArea(); + with (qx_widget) { + set({top:10,right:10,width:'70%'}) + }; + add(qx_widget); + + qx_widget = new qx.ui.basic.Atom('Type'); + with(qx_widget) + { + setHorizontalChildrenAlign('right'); + set({top:70,left:10,width:'20%'}); + }; + add(qx_widget); + + qx_widget = new qx.ui.form.TextField(); + with (qx_widget) { + set({top:70,right:10,width:'70%'}) + }; + add(qx_widget); + + + var btnOK = new qx.ui.form.Button("OK", "icon/16/actions/dialog-ok.png"); + var btnCancel = new qx.ui.form.Button("Cancel", "icon/16/actions/dialog-cancel.png"); + var btnSetText = new qx.ui.form.Button("Reload", "icon/16/actions/view-refresh.png"); + + btnOK.set({ bottom : 10, right : 10 }); + btnCancel.set({ bottom : 10, left : 10 }); + btnSetText.set({ bottom : 10, left : 100 }); + + btnCancel.addEventListener("execute", function(e) { + dialogEditFrage.close(); + }); + btnOK.addEventListener("execute", function(e) { + dialogEditFrage.close(); + }); + + btnSetText.addEventListener("execute", function(e) { + txtfld.setValue("Some Text here!"); + txtfld.setFocused(true); + }); + + add(btnOK, btnCancel, btnSetText); + } + + + var btnOpen = new qx.ui.form.Button("Open the dialog"); + btnOpen.set({ top : 50, left : 20 }); + btnOpen.addEventListener("click", function(e) { + dialogEditFrage.open(); + }); + + d.add(btnOpen,dialogEditFrage); + }); + + </script> + +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_4.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_4.html new file mode 100644 index 0000000000..6930d54081 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_4.html @@ -0,0 +1,104 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Dialog with qx.ui.form.TextField and qx.ui.form.TextArea</p> + <p>Testing minimize handling.</p> + </div> + + + <script type="text/javascript" language="JavaScript"> + + qx.core.Init.getInstance().defineMain(function() { + + var d = qx.ui.core.ClientDocument.getInstance(); + var txtfld; + + var dialogEditFrage = new qx.ui.window.Window("Edit", "icon/16/apps/accessories-text-editor.png"); + with(dialogEditFrage) { + setSpace(300, 400, 100, 300); + + setShowClose(false); + + var qx_widget = new qx.ui.basic.Atom('Question'); + with(qx_widget) + { + setHorizontalChildrenAlign('right'); + set({top:10,left:10,width:'20%'}); + }; + add(qx_widget); + + qx_widget = txtfld = new qx.ui.form.TextArea(); + with (qx_widget) { + set({top:10,right:10,width:'70%'}) + } + add(qx_widget); + + qx_widget = new qx.ui.basic.Atom('Type'); + with(qx_widget) + { + setHorizontalChildrenAlign('right'); + set({top:70,left:10,width:'20%'}); + }; + add(qx_widget); + + qx_widget = new qx.ui.form.TextField(); + with (qx_widget) { + set({top:70,right:10,width:'70%'}) + } + add(qx_widget); + + + var btnOK = new qx.ui.form.Button("OK", "icon/16/actions/dialog-ok.png"); + var btnCancel = new qx.ui.form.Button("Cancel", "icon/16/actions/dialog-cancel.png"); + var btnSetText = new qx.ui.form.Button("Reload", "icon/16/actions/view-refresh.png"); + + btnOK.set({ bottom : 10, right : 10 }); + btnCancel.set({ bottom : 10, left : 10 }); + btnSetText.set({ bottom : 10, left : 100 }); + + btnCancel.addEventListener("execute", function(e) { + dialogEditFrage.close(); + }); + btnOK.addEventListener("execute", function(e) { + dialogEditFrage.close(); + }); + + btnSetText.addEventListener("execute", function(e) { + txtfld.setValue("Some Text here!"); + txtfld.setFocused(true); + }); + + add(btnOK, btnCancel, btnSetText); + } + + + var btnOpen = new qx.ui.form.Button("Open the dialog"); + btnOpen.set({ top : 50, left : 20 }); + btnOpen.addEventListener("click", function(e) { + dialogEditFrage.open(); + }); + + var btnRestore = new qx.ui.form.Button("Restore the dialog"); + btnRestore.set({ top : 80, left : 20 }); + btnRestore.addEventListener("click", function(e) { + dialogEditFrage.restore(); + }); + + d.add(btnOpen,btnRestore,dialogEditFrage); + }); + + </script> + +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_5.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_5.html new file mode 100644 index 0000000000..f4112b5939 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_5.html @@ -0,0 +1,221 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Some tests for zIndex handling for different widgets.</p> + </div> + + <script type="text/javascript"> + qx.core.Init.getInstance().defineMain(function() + { + var d = qx.ui.core.ClientDocument.getInstance(); + + + var btnaler = new qx.ui.form.Button("Open Alert", "icon/16/status/dialog-error.png"); + btnaler.setLocation(450, 50); + qx.ui.core.ClientDocument.getInstance().add(btnaler); + + + var aler = new qx.ui.popup.PopupAtom("Attention", "icon/128/status/dialog-error.png"); + aler.setLocation(40, 70); + aler.setBackgroundColor("yellow"); + aler.setOpacity(0.5); + qx.ui.core.ClientDocument.getInstance().add(aler); + + btnaler.addEventListener("execute", function(e) + { + aler.show(); + }); + + + + var bar = new qx.ui.basic.Terminator; + bar.setLocation(0, 0); + bar.setWidth(50); + bar.setBottom(0); + bar.setBackgroundColor("black"); + bar.setOpacity(0.5); + bar.setZIndex(1e7); + qx.ui.core.ClientDocument.getInstance().add(bar); + + + + + var w1 = new qx.ui.window.Window("Application Window"); + w1.setSpace(20, 400, 48, 250); + d.add(w1); + + + + var m1 = new qx.ui.menu.Menu; + + var mb11 = new qx.ui.menu.Button("Open"); + var mb12 = new qx.ui.menu.Button("Save"); + var mb13 = new qx.ui.menu.Button("Close"); + var mb14 = new qx.ui.menu.Button("Exit"); + + m1.add(mb11, mb12, mb13, mb14); + + var m2 = new qx.ui.menu.Menu; + + var mb21 = new qx.ui.menu.Button("Cut"); + var mb22 = new qx.ui.menu.Button("Copy"); + var mb23 = new qx.ui.menu.Button("Paste"); + + m2.add(mb21, mb22, mb23); + + var m3 = new qx.ui.menu.Menu; + + var mb31 = new qx.ui.menu.Button("Toolbars"); + var mb32 = new qx.ui.menu.Button("Options"); + + m3.add(mb31, mb32); + + var m4 = new qx.ui.menu.Menu; + + var mb41 = new qx.ui.menu.Button("Help"); + var mb42 = new qx.ui.menu.Button("Info"); + + m4.add(mb41, mb42); + + qx.ui.core.ClientDocument.getInstance().add(m1, m2, m3, m4); + + + + + + + + var t1 = new qx.ui.toolbar.ToolBar; + + t1.setLocation(0, 0); + t1.setRight(0); + + var tb1 = new qx.ui.toolbar.MenuButton("File", m1); + var tb2 = new qx.ui.toolbar.MenuButton("Edit", m2); + var tb3 = new qx.ui.toolbar.MenuButton("View", m3); + var tb4 = new qx.ui.toolbar.MenuButton("Help", m4); + + t1.add(tb1, tb2, tb3, tb4); + + w1.add(t1); + + var tt1 = new qx.ui.popup.ToolTip("File Menu Button"); + var tt2 = new qx.ui.popup.ToolTip("Edit Menu Button"); + var tt3 = new qx.ui.popup.ToolTip("View Menu Button"); + var tt4 = new qx.ui.popup.ToolTip("Help Menu Button"); + + tb1.setToolTip(tt1); + tb2.setToolTip(tt2); + tb3.setToolTip(tt3); + tb4.setToolTip(tt4); + + qx.ui.core.ClientDocument.getInstance().add(tt1, tt2, tt3, tt4); + + + + + + + + + var c1 = new qx.ui.form.ComboBox; + + c1.setLocation(0, 35); + + c1.getList().add(new qx.ui.form.ListItem("Item 1")); + c1.getList().add(new qx.ui.form.ListItem("Item 2")); + c1.getList().add(new qx.ui.form.ListItem("Item 3")); + c1.getList().add(new qx.ui.form.ListItem("Item 4")); + c1.getList().add(new qx.ui.form.ListItem("Item 5")); + + w1.add(c1); + + + + + + var square = new qx.ui.basic.Terminator; + square.setDimension(50, 50); + square.setLocation(0, 70); + square.setBackgroundColor("blue"); + w1.add(square); + + + var p1 = new qx.ui.popup.PopupAtom("Hello World"); + p1.setBorder(4, "solid", "red"); + p1.setBackgroundColor("yellow"); + p1.setLocation(0, 70); + p1.setAutoHide(false); + w1.add(p1); + + var p2 = new qx.ui.popup.PopupAtom("Hello World"); + p2.setBorder(4, "solid", "yellow"); + p2.setBackgroundColor("red"); + p2.setLocation(30, 70); + p2.setAutoHide(false); + w1.add(p2); + + + var btn1 = new qx.ui.form.Button("Show1"); + btn1.setLocation(140, 70); + w1.add(btn1); + + var btn2 = new qx.ui.form.Button("Hide1"); + btn2.setLocation(190, 70); + w1.add(btn2); + + btn1.addEventListener("execute", function(e) { + p1.show(); + }); + + btn2.addEventListener("execute", function(e) { + p1.hide(); + }); + + + + var btn3 = new qx.ui.form.Button("Show2"); + btn3.setLocation(250, 70); + w1.add(btn3); + + var btn4 = new qx.ui.form.Button("Hide2"); + btn4.setLocation(300, 70); + w1.add(btn4); + + btn3.addEventListener("execute", function(e) { + p2.show(); + }); + + btn4.addEventListener("execute", function(e) { + p2.hide(); + }); + + + + w1.open(); + + + + + + var w2 = new qx.ui.window.Window("Test 2"); + w2.setDimension(400, 200); + w2.setLocation(200, 200); + qx.ui.core.ClientDocument.getInstance().add(w2); + w2.show(); + + }); + </script> +</body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_6.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_6.html new file mode 100644 index 0000000000..9f84b0e6ec --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/Window_6.html @@ -0,0 +1,109 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Sample</title> + <link type="text/css" rel="stylesheet" href="../../css/layout.css"/> + <!--[if IE]> + <link type="text/css" rel="stylesheet" href="../../css/layout_ie.css"/> + <![endif]--> + <script type="text/javascript" src="../../script/sample.js"></script> +</head> +<body> + <script type="text/javascript" src="../../script/layout.js"></script> + + <div id="demoDescription"> + <p>Dialog with qx.ui.form.TextField and qx.ui.form.TextArea</p> + <p>Testing initial focus handling.</p> + </div> + + + <script type="text/javascript" language="JavaScript"> + + + qx.core.Init.getInstance().defineMain(function() { + + var d = qx.ui.core.ClientDocument.getInstance(); + var txtfld; + + var dialogEditFrage = new qx.ui.window.Window("Edit", "icon/16/apps/accessories-text-editor.png"); + + + with(dialogEditFrage) { + setSpace(300, 400, 100, 300); + + setShowClose(false); + + var qxObj = new qx.ui.basic.Atom('Question'); + with(qxObj) + { + setHorizontalChildrenAlign('right'); + set({top:10,left:10,width:'20%'}); + }; + add(qxObj); + + qxObj = txtfld = new qx.ui.form.TextArea(); + with (qxObj) { + set({top:10,right:10,width:'70%'}) + } + add(qxObj); + + txtfld.addEventListener("appear", function(e) { + this.focus(); + }); + + qxObj = new qx.ui.basic.Atom('Type'); + with(qxObj) + { + setHorizontalChildrenAlign('right'); + set({top:70,left:10,width:'20%'}); + }; + add(qxObj); + + qxObj = new qx.ui.form.TextField(); + with (qxObj) { + set({top:70,right:10,width:'70%'}) + } + add(qxObj); + + + var btnOK = new qx.ui.form.Button("OK", "icon/16/actions/dialog-ok.png"); + var btnCancel = new qx.ui.form.Button("Cancel", "icon/16/actions/dialog-cancel.png"); + var btnSetFocus = new qx.ui.form.Button("Set Focus To First Field", "icon/16/actions/view-refresh.png"); + + btnOK.set({ bottom : 10, right : 10 }); + btnCancel.set({ bottom : 10, left : 10 }); + btnSetFocus.set({ bottom : 10, left : 100 }); + + btnCancel.addEventListener("execute", function(e) { + dialogEditFrage.close(); + }); + btnOK.addEventListener("execute", function(e) { + dialogEditFrage.close(); + }); + + btnSetFocus.addEventListener("execute", function(e) { + txtfld.focus(); + }); + + add(btnOK, btnCancel, btnSetFocus); + } + + var btnOpen = new qx.ui.form.Button("Open the dialog"); + btnOpen.set({ top : 50, left : 20 }); + btnOpen.addEventListener("click", function(e) { + dialogEditFrage.open(); + }); + + var btnRestore = new qx.ui.form.Button("Restore the dialog"); + btnRestore.set({ top : 80, left : 20 }); + btnRestore.addEventListener("click", function(e) { + dialogEditFrage.restore(); + }); + + d.add(btnOpen,btnRestore,dialogEditFrage); + }); + + </script> + +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/bigFont.css b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/bigFont.css new file mode 100644 index 0000000000..568085d899 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/bigFont.css @@ -0,0 +1,3 @@ +.box { + font-size: large; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/boldFont.css b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/boldFont.css new file mode 100644 index 0000000000..c7f3aca388 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/boldFont.css @@ -0,0 +1,3 @@ +.box { + font-weight: bold; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/filesize/400kb.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/filesize/400kb.xml new file mode 100644 index 0000000000..0f448c2f85 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/filesize/400kb.xml @@ -0,0 +1,10224 @@ +<?xml version="1.0" encoding="ISO-8859-15"?> +<all> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +</all> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/filesize/40kb.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/filesize/40kb.xml new file mode 100644 index 0000000000..8cc7bd573f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/filesize/40kb.xml @@ -0,0 +1,1003 @@ +<?xml version="1.0" encoding="ISO-8859-15"?> +<all> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +<data>abcdefghijklmnopqrstuvwxyz</data> +</all> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.html new file mode 100644 index 0000000000..44c7219ef4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.html @@ -0,0 +1,11 @@ +<html> + <body> + <h1>Anita Hummel</h1> + <p>42</p> + <p>Getho Bals</p> + <p>22432</p> + <p>Paris</p> + <p>France</p> + <p>0044.44930209</p> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.js new file mode 100644 index 0000000000..6f348b6aea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.js @@ -0,0 +1,10 @@ +{ + "name" : "Hummel", + "givenName" : "Anita", + "age" : 42, + "street" : "Getho Bals", + "plz" : 22432, + "city" : "Paris", + "country" : "France", + "phone" : "0044.44930209" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.txt b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.txt new file mode 100644 index 0000000000..a8a98376eb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.txt @@ -0,0 +1,8 @@ +name = Hummel +givenName = Anita +age = 42 +street = Getho Bals +plz = 22432 +city = Paris +country = France +phone = 0044.44930209 diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.xml new file mode 100644 index 0000000000..ecad1f77aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/anita.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<result> + <name>Hummel</name> + <givenName>Anita</givenName> + <age>42</age> + <street>Getho Bals</street> + <plz>22432</plz> + <city>Paris</city> + <country>France</country> + <phone>0044.44930209</phone> +</result> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.html new file mode 100644 index 0000000000..610c1584aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.html @@ -0,0 +1,11 @@ +<html> + <body> + <h1>Harald Schmidt</h1> + <p>65</p> + <p>Karlsruher Allee</p> + <p>78392</p> + <p>Stuttgart</p> + <p>Germany</p> + <p>0049.750930302</p> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.js new file mode 100644 index 0000000000..f593737448 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.js @@ -0,0 +1,10 @@ +{ + "name" : "Schmidt", + "givenName" : "Harald", + "age" : 65, + "street" : "Karlsruher Allee", + "plz" : 78392, + "city" : "Stuttgart", + "country" : "Germany", + "phone" : "0049.750930302" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.txt b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.txt new file mode 100644 index 0000000000..215a27dd9e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.txt @@ -0,0 +1,8 @@ +name = Schmidt +givenName = Harald +age = 65 +street = Karlsruher Allee +plz = 78392 +city = Stuttgart +country = Germany +phone = 0049.750930302 diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.xml new file mode 100644 index 0000000000..425a8fdc21 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/harald.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<result> + <name>Schmidt</name> + <givenName>Harald</givenName> + <age>65</age> + <street>Karlsruher Allee</street> + <plz>78392</plz> + <city>Stuttgart</city> + <country>Germany</country> + <phone>0049.750930302</phone> +</result> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.html new file mode 100644 index 0000000000..e2a5a55504 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.html @@ -0,0 +1,11 @@ +<html> + <body> + <h1>Lisbeth Meyer</h1> + <p>74</p> + <p>Burlington Plaza</p> + <p>32323</p> + <p>New York</p> + <p>United States</p> + <p>0030.302020234</p> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.js new file mode 100644 index 0000000000..40dfd03463 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.js @@ -0,0 +1,10 @@ +{ + "name" : "Meyer", + "givenName" : "Lisbeth", + "age" : 74, + "street" : "Burlington Plaza", + "plz" : 32323, + "city" : "New York", + "country" : "United States", + "phone" : "0030.302020234" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.txt b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.txt new file mode 100644 index 0000000000..def297f12a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.txt @@ -0,0 +1,8 @@ +name = Meyer +givenName = Lisbeth +age = 74 +street = Burlington Plaza +plz = 32323 +city = New York +country = United States +phone = 0030.302020234 diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.xml new file mode 100644 index 0000000000..a67a98d4ae --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/lisbeth.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<result> + <name>Meyer</name> + <givenName>Lisbeth</givenName> + <age>74</age> + <street>Burlington Plaza</street> + <plz>32323</plz> + <city>New York</city> + <country>United States</country> + <phone>0030.302020234</phone> +</result> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.html new file mode 100644 index 0000000000..f43ad8b091 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.html @@ -0,0 +1,11 @@ +<html> + <body> + <h1>Paul Fuettner</h1> + <p>27</p> + <p>Bismarckstrasse</p> + <p>33990</p> + <p>Garbsen</p> + <p>Germany</p> + <p>0049.57232067</p> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.js new file mode 100644 index 0000000000..9739f477bb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.js @@ -0,0 +1,10 @@ +{ + "name" : "Fuettner", + "givenName" : "Paul", + "age" : 27, + "street" : "Bismarckstrasse", + "plz" : 33990, + "city" : "Garbsen", + "country" : "Germany", + "phone" : "0049.57232067" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.txt b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.txt new file mode 100644 index 0000000000..c79abc65a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.txt @@ -0,0 +1,8 @@ +name = Fuettner +givenName = Paul +age = 27 +street = Bismarckstrasse +plz = 33990 +city = Garbsen +country = Germany +phone = 0049.57232067 diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.xml new file mode 100644 index 0000000000..3ddfa44b29 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/data/persons/paul.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<result> + <name>Fuettner</name> + <givenName>Paul</givenName> + <age>27</age> + <street>Bismarckstrasse</street> + <plz>33990</plz> + <city>Garbsen</city> + <country>Germany</country> + <phone>0049.57232067</phone> +</result> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file1.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file1.swf Binary files differnew file mode 100644 index 0000000000..2e6d69a3fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file1.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file10.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file10.swf Binary files differnew file mode 100644 index 0000000000..eeafa9a8f3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file10.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file2.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file2.swf Binary files differnew file mode 100644 index 0000000000..51c8f0ff76 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file2.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file3.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file3.swf Binary files differnew file mode 100644 index 0000000000..0b6b56be85 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file3.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file4.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file4.swf Binary files differnew file mode 100644 index 0000000000..746baa8cd9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file4.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file5.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file5.swf Binary files differnew file mode 100644 index 0000000000..a3333e1c31 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file5.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file6.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file6.swf Binary files differnew file mode 100644 index 0000000000..2cad550081 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file6.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file7.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file7.swf Binary files differnew file mode 100644 index 0000000000..b5f4eb4ddf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file7.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file8.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file8.swf Binary files differnew file mode 100644 index 0000000000..54c9a11edc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file8.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file9.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file9.swf Binary files differnew file mode 100644 index 0000000000..cc41ff1c10 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/color/file9.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/fo_tester.fla b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/fo_tester.fla Binary files differnew file mode 100644 index 0000000000..afd4bb6134 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/fo_tester.fla diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/fo_tester.swf b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/fo_tester.swf Binary files differnew file mode 100644 index 0000000000..8e0b966bca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/flash/fo_tester.swf diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/grid_dialog_box.png b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/grid_dialog_box.png Binary files differnew file mode 100644 index 0000000000..2bc24a8018 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/image/grid_dialog_box.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/index.html new file mode 100644 index 0000000000..ac16317e80 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/html/test/index.html @@ -0,0 +1,8 @@ +<html> + <head> + <script type="text/javascript">window.location.href="Atom_1.html";</script> + </head> + <body> + <a href="Atom1.html">Continue...</a> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/index.html new file mode 100644 index 0000000000..73fbb2015a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/index.html @@ -0,0 +1,122 @@ +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <title>qooxdoo demo</title> + <style type="text/css"> + *{ + box-sizing: border-box; + -moz-box-sizing: border-box; + margin: 0; + padding: 0; + } + + body{ + font-size: 12px; + font-family: Arial, "Bitstream Vera Sans", Verdana, sans-serif; + margin: 0; + padding: 0; + } + + p{ + margin: 6px 0; + } + + #demoHead, + #demoFoot{ + position: absolute; + left: 0px; + right: 0px; + width: 100%; + background: #134275; + padding: 5px 8px; + color: #DEFF83; + font-weight: bold; + overflow: hidden; + z-index: 1000000000; + } + + #demoHead{ + top: 0px; + } + + #demoHead span{ + font-weight: normal; + color: white; + } + + img{ + box-sizing: content-box; + -moz-box-sizing: content-box; + } + + #content{ + margin: 40px 20px 0; + width: 400px; + } + + h1{ + font-size: 22px; + margin-bottom: 20px; + color: #134275; + } + + h2{ + font-size: 16px; + color: #134275; + margin-bottom: 10px; + } + + h3{ + font-size: 14px; + color: #1D65B3; + } + + a{ + color: #335EA8; + } + + li{ + margin-left: 16px; + list-style: square; + margin-bottom: 20px; + } + + p{ + font-size: 12px; + } + + ul ul{ + margin-top: 20px; + } + + p.note{ + padding: 10px; + background: #F3FFD1; + color: #444444; + margin: 20px 0; + } + </style> +</head> +<body> + <div id="demoHead">qooxdoo: <span>The new era of web interface development</span></div> + + <div id="content" style="position:absolute;top:0px;left:0px"> + + <h1>qooxdoo <span>samples</demo></h1> + <ul> + <li> + <h2><a href="html/example/index.html">Example</a></h2> + <p>Easily to understand examples. The basic features of each qooxdoo widget is demonstrated in a separate example. This section is probably the one you are looking for!</p> + </li> + <li> + <h2><a href="html/test/index.html">Test</a></h2> + <p>These tests demonstrate internal functionality of qooxdoo. Not really useful for the typical qooxdoo user, but needed for developers to test some complex layout stuff, performance related problems and more. The tests may not always be up-to-date and functioning!</p> + </li> + <li> + <h2><a href="html/performance/index.html">Performance</a></h2> + <p>These tests are used to test performance of different javascript/qooxdoo rountines and allows them to compare them with each other</p> + </li> + </ul> + </div> +</body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/translation/C.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/translation/C.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/source/translation/C.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/tool/layout.py b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/tool/layout.py new file mode 100755 index 0000000000..b37ff7090a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/sample/tool/layout.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys, os, optparse, codecs + + + +basic = u""" +qx.log.Logger.ROOT_LOGGER.removeAllAppenders(); +qx.log.Logger.ROOT_LOGGER.addAppender(new qx.log.DivAppender("demoDebug")); + +document.write('<div id="demoHead">qooxdoo: <span>The new era of web development</span></div>'); +document.write('<div id="demoFoot">'); +document.write('[<a href="javascript:qx.dev.Pollution.consoleInfo(\"window\");">Global Pollution</a>]  '); +document.write('[<a href="javascript:qx.core.Object.summary();">Object Summary</a>]  '); +document.write('</div>'); +document.write('<div id="demoDebug"></div>'); +document.write('<div id="demoFrame"> </div>'); + +(function(sitemap) +{ + document.write('<select id="demoFiles" onchange="if(this.options[this.selectedIndex].value)window.location.href=this.options[this.selectedIndex].value">'); + var url = window.location.pathname.split('/'); + var basename = window.location.href.substring(0, window.location.href.lastIndexOf("/")); + var cat = url[url.length-2]; + var file = url[url.length-1]; + + var pages = sitemap[cat]; + pages.sort(); + + var index = pages.indexOf(file); + + for( var i=0; i<pages.length; i++ ) + { + var href = window.location.href; + var page = cat + "/" + pages[i]; + var pageuri = "../" + page; + var pageid = pages[i].replace(".html", "").replace("_", " "); + document.write('<option value="' + pageuri + '"'); + if(href.lastIndexOf(page) === href.length-page.length) { + document.write(' selected="selected"'); + + } + document.write('>' + pageid + '</option>'); + } + document.write('</select>'); + + document.write('<div id="demoJump">'); + if (index > 0) { + document.write("<button onclick='window.location.href=\\"" + basename + '/' + pages[index-1] + "\\"'><</button>"); + } + if (index < pages.length-1) { + document.write("<button onclick='window.location.href=\\"" + basename + '/' + pages[index+1] + "\\"'>></button>"); + } + document.write('</div>'); + +})(%s); + +(function() +{ + var url = location.href; + var pos = url.indexOf("/html/")+6; + var split = url.substring(pos).split("/"); + var category = split[0]; + category = category.charAt(0).toUpperCase() + category.substring(1); + var pagename = split[1].replace(".html", "").replace(/_/g, " "); + pagename = pagename.charAt(0).toUpperCase() + pagename.substring(1); + + document.title = "qooxdoo » Demo » Sample » " + category + " » " + pagename; + + if (window.location.href.indexOf("demo.qooxdoo.org") != -1) + { + document.write('<script type="text/javascript">var a_vars = []; var pagename=""; var phpmyvisitesSite = 5; var phpmyvisitesURL = "http://counter.qooxdoo.org/phpmyvisites.php";</script>'); + document.write('<script type="text/javascript" src="http://counter.qooxdoo.org/phpmyvisites.js"></script>'); + document.write('<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"></script>'); + document.write('<script type="text/javascript">_uacct = "UA-415440-1"; function urchinStart() { urchinTracker() }; if(window.addEventListener)window.addEventListener("load", urchinStart, false); else if(window.attachEvent)window.attachEvent("onload", urchinStart);</script>'); + } +})(); +""" + + +def main(dist, scan): + res = "" + res += "{" + + firstCategory = True + # for category in os.listdir(scan): + for category in [ "example", "test", "performance" ]: + if category == ".svn": + continue + + if not firstCategory: + res += "," + + res += category + ":[" + + firstItem = True + for item in os.listdir(os.path.join(scan, category)): + if item == ".svn": + continue + + if os.path.splitext(item)[1] != ".html": + continue + + if item == "index.html": + continue + + if not firstItem: + res += "," + + res += '"%s"' % item + + firstItem = False + + res += "]" + firstCategory = False + + res += "}" + + distdir = os.path.dirname(dist) + + if not os.path.exists(distdir): + os.makedirs(distdir) + + content = basic % res + + outputFile = codecs.open(dist, encoding="utf-8", mode="w", errors="replace") + outputFile.write(content) + outputFile.flush() + outputFile.close() + + + + +if __name__ == '__main__': + try: + parser = optparse.OptionParser() + + (options, args) = parser.parse_args() + + dist = args[0] + scan = args[1] + + main(dist, scan) + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/Makefile new file mode 100644 index 0000000000..027d0cc7dd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/Makefile @@ -0,0 +1,106 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################ +# BASIC SETTINGS +################################################################################ + +# +# Location of your qooxdoo distribution +# Could be relative from this location or absolute +# +QOOXDOO_PATH = ../../.. + +# +# The same as above, but from the webserver point of view +# Starting point is the application HTML file of the source folder. +# In most cases just add a "/.." compared to above +# +QOOXDOO_URI = ../../../.. + +# +# Namespace of your application e.g. custom +# +APPLICATION_NAMESPACE = showcase + +# +# Titles used in your API viewer and during the build process +# +APPLICATION_MAKE_TITLE = SHOWCASE +APPLICATION_API_TITLE = ShowCase + +# +# Additional files (space separated list) +# +APPLICATION_FILES = index.html + +# +# Locales to include +# +APPLICATION_LOCALES = de de_DE en en_US es es_ES fr fr_FR + +# +# full locales used for the online version +# +#APPLICATION_LOCALES = ar de de_AT de_DE en en_US es es_ES fr fr_FR it ru sv tr zh + + + +################################################################################ +# ADVANCED SETTINGS +################################################################################ + +# +# Enable resource filtering in API viewer +# +APPLICATION_RESOURCE_FILTER = true + +# +# We don't need the full source code +# +APPLICATION_COMPLETE_SOURCE = false + +# +# Disable line breaks +# +APPLICATION_LINEBREAKS_BUILD = false +APPLICATION_LINEBREAKS_SOURCE = false + +# +# qooxdoo.org sync +# +APPLICATION_PUBLISH_PATH = root@qooxdoo.org:/var/www/qooxdoo/demo/$(FRAMEWORK_VERSION)/$(APPLICATION_NAMESPACE) + + + + + +################################################################################ +# INCLUDE CORE +################################################################################ + +ifneq ($(QOOXDOO_PATH),PLEASE_DEFINE_QOOXDOO_PATH) + include $(QOOXDOO_PATH)/frontend/framework/tool/make/targets.mk + include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk +endif + +error: + @echo " * Please configure QOOXDOO_PATH" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/class/showcase/Application.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/class/showcase/Application.js new file mode 100644 index 0000000000..0224160b91 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/class/showcase/Application.js @@ -0,0 +1,1504 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.icontheme/16/*) +#embed(qx.icontheme/22/*) +#embed(qx.icontheme/32/*) +#embed(qx.icontheme/48/*) + +#load(qx.theme.icon.Nuvola) +#load(qx.theme.icon.NuoveXT) +#load(qx.theme.icon.CrystalClear) +#load(qx.theme.icon.VistaInspirate) + +#load(qx.theme.color.System) +#load(qx.theme.color.WindowsClassic) +#load(qx.theme.color.WindowsLunaBlue) +#load(qx.theme.color.WindowsLunaGreen) +#load(qx.theme.color.WindowsLunaSilver) + +************************************************************************ */ + +qx.OO.defineClass("showcase.Application", qx.component.AbstractApplication, +function () { + qx.component.AbstractApplication.call(this); +}); + +qx.Proto.main = function(e) +{ + qx.core.Object.call(this); + + var barView = new qx.ui.pageview.buttonview.ButtonView; + + barView.setLocation(10, 10); + barView.setRight(10); + barView.setBottom(10); + + barView.addToDocument(); + + this._createPage(barView, "Form", "icon/32/apps/accessories-text-editor.png", this._createFormDemo(), "threedface"); + this._createPage(barView, "Tooltip", "icon/32/actions/system-run.png", this._createTooltipDemo()); + this._createPage(barView, "Menu and Toolbar", "icon/32/devices/video-display.png", this._createToolbarDemo()); + this._createPage(barView, "Tab", "icon/32/places/user-desktop.png", this._createTabDemo(), "threedface", true); + this._createPage(barView, "Tree", "icon/32/actions/view-pane-tree.png", this._createTreeDemo(), "threedface"); + this._createPage(barView, "List", "icon/32/actions/view-pane-detailed.png", this._createListDemo(), "threedface"); + this._createPage(barView, "ListView", "icon/32/actions/view-pane-icon.png", this._createListViewDemo(), "threedface"); + this._createPage(barView, "Table", "icon/32/actions/view-pane-column.png", this._createTableDemo(), "threedface", true); + this._createPage(barView, "Localization", "icon/32/apps/accessories-archiver.png", this._createLocalizationDemo(), "threedface"); + this._createPage(barView, "Native Window", "icon/32/devices/video-display.png", this._createNativeWindowDemo(), "threedface"); + this._createPage(barView, "Internal Window", "icon/32/apps/preferences-desktop-theme.png", this._createInternalWindowDemo(), null, true); + this._createPage(barView, "Themes", "icon/32/apps/preferences-desktop-wallpaper.png", this._createThemesDemo()); +}; + + +qx.Proto._createPage = function(barView, title, iconUrl, widget, backgroundColor, scrolls) { + var bt = new qx.ui.pageview.buttonview.Button(title, iconUrl); + if (barView.getBar().isEmpty()) { + bt.setChecked(true); + } + + barView.getBar().add(bt); + + var page = new qx.ui.pageview.buttonview.Page(bt); + barView.getPane().add(page); + + page.set({ left:0, right:0, top:0, bottom:0 }); + + widget.setLocation(0, 0); + widget.set({ left:0, right:0, bottom:0, right:0 }); + if (!scrolls) { + widget.set({ height:null, width:null, overflow:"auto" }); + } + + if (backgroundColor) { + page.setBackgroundColor(backgroundColor); + } + + page.add(widget); + + return page; +} + + +qx.Proto._createFormDemo = function() { + var main = new qx.ui.layout.VerticalBoxLayout; + main.setPadding(10); + + var groupWidth = 285; + + // fields + var group1 = new qx.ui.groupbox.GroupBox("Some controls", "icon/16/apps/preferences.png"); + group1.setDimension("auto", "auto"); + main.add(group1); + + var gl = new qx.ui.layout.GridLayout; + group1.add(gl); + + gl.setDimension(groupWidth - 26, "auto"); + gl.setColumnCount(2); + gl.setRowCount(6); + gl.setVerticalSpacing(4); + gl.setHorizontalSpacing(6); + + gl.setColumnWidth(0, 70); + gl.setColumnWidth(1, 180); + + //gl.setColumnHorizontalAlignment(0, "right"); + gl.setColumnVerticalAlignment(0, "middle"); + + gl.setRowHeight(0, 20); + gl.setRowHeight(1, 20); + gl.setRowHeight(2, 20); + gl.setRowHeight(3, 20); + gl.setRowHeight(4, 70); + gl.setRowHeight(5, 20); + + gl.add(new qx.ui.basic.Label("Name"), 0, 0); + gl.add(new qx.ui.form.TextField, 1, 0); + gl.add(new qx.ui.basic.Label("Amount"), 0, 1); + gl.add(new qx.ui.form.Spinner, 1, 1); + gl.add(new qx.ui.basic.Label("Type"), 0, 2); + + var combo = new qx.ui.form.ComboBox; + combo.add(new qx.ui.form.ListItem("CD")); //, "icon/16/cd.png")); + combo.add(new qx.ui.form.ListItem("Clock")); //, "icon/16/apps/accessories-clock.png")); + combo.add(new qx.ui.form.ListItem("Modem")); //, "icon/16/apps/internet-download-manager.png")); + combo.add(new qx.ui.form.ListItem("Network")); //, "icon/16/categories/applications-internet.png")); + combo.add(new qx.ui.form.ListItem("Sound")); //, "icon/16/apps/multimedia-volume-control.png")); + combo.add(new qx.ui.form.ListItem("PDA")); //, "icon/16/pda.png")); + combo.add(new qx.ui.form.ListItem("Printer")); //, "icon/16/devices/printer.png")); + combo.add(new qx.ui.form.ListItem("Scanner")); //, "icon/16/devices/scanner.png")); + combo.add(new qx.ui.form.ListItem("TV")); //, "icon/16/devices/video-display.png")); + gl.add(combo, 1, 2); + + gl.add(new qx.ui.basic.Label("E-Mail"), 0, 3); + gl.add(new qx.ui.form.TextField, 1, 3); + + var label6 = new qx.ui.basic.Label("Comment"); + label6.setVerticalAlign("top"); + label6.setVerticalAlign("top"); + gl.add(label6, 0, 4); + + gl.add(new qx.ui.form.TextArea, 1, 4); + + var input7 = new qx.ui.form.Button("Submit", "icon/16/actions/dialog-ok.png"); + input7.setHorizontalAlign("right"); + gl.add(input7, 1, 5); + + // Checkboxes + var group2 = new qx.ui.groupbox.GroupBox("Some settings"); + group2.setDimension(groupWidth, "auto"); + main.add(group2); + + var bl = new qx.ui.layout.VerticalBoxLayout; + group2.add(bl); + + bl.add(new qx.ui.form.CheckBox("Permit others to view my favorites")); + + var chb = new qx.ui.form.CheckBox("Use the very high bitrate"); + chb.setChecked(true); + bl.add(chb); + + // Radio buttons + var group3 = new qx.ui.groupbox.GroupBox("Network speed", "icon/16/categories/applications-internet.png"); + group3.setDimension(groupWidth, "auto"); + main.add(group3); + + var bl = new qx.ui.layout.VerticalBoxLayout; + group3.add(bl); + + var radio1 = new qx.ui.form.RadioButton("Modem"); + var radio2 = new qx.ui.form.RadioButton("DSL"); + var radio3 = new qx.ui.form.RadioButton("Direct link"); + radio2.setChecked(true); + bl.add(radio1, radio2, radio3); + new qx.manager.selection.RadioManager("network", [radio1, radio2, radio3]); + + return main; +} + + +qx.Proto._createTooltipDemo = function() { + var main = new qx.ui.layout.HorizontalBoxLayout; + main.setPadding(10); + main.setSpacing(10); + + var c1 = new qx.ui.basic.Atom("Hover me", "icon/32/actions/system-run.png"); + c1.setPadding(5); + c1.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c1.setBackgroundColor(new qx.renderer.color.Color("#BDD2EF")); + c1.setToolTip(new qx.ui.popup.ToolTip("Look at this")); + main.add(c1); + + var c2 = new qx.ui.basic.Atom("Hover me", "icon/32/apps/accessories-archiver.png"); + c2.setPadding(5); + c2.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c2.setBackgroundColor(new qx.renderer.color.Color("#D1DFAD")); + c2.setToolTip(new qx.ui.popup.ToolTip("Images are also possible", "icon/16/actions/help-about.png")); + main.add(c2); + + var c3 = new qx.ui.basic.Atom("Hover me", "icon/32/apps/accessories-disk-usage.png"); + c3.setPadding(5); + c3.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + c3.setBackgroundColor(new qx.renderer.color.Color("#D1A4AD")); + var tip3 = new qx.ui.popup.ToolTip('Such a great tooltip with a show timeout of 50ms.<br>And <b>H</b><span style="color:red">T</span><i>M</i><u>L</u>', "icon/32/apps/accessories-disk-usage.png"); + tip3.setShowInterval(50); + c3.setToolTip(tip3); + main.add(c3); + + return main; +} + + +qx.Proto._createToolbarDemo = function() { + var doc = qx.ui.core.ClientDocument.getInstance(); + + var main = new qx.ui.layout.VerticalBoxLayout; + main.setPadding(10); + + // Menu + var m1 = new qx.ui.menu.Menu; + var mb1_01 = new qx.ui.menu.Button("New", "icon/16/actions/document-new.png"); + var mb1_02 = new qx.ui.menu.Button("Open", "icon/16/actions/document-open.png"); + var mb1_03 = new qx.ui.menu.Button("Save", "icon/16/actions/document-save.png"); + var mb1_04 = new qx.ui.menu.Button("Save as", "icon/16/actions/document-save-as.png"); + var mb1_05 = new qx.ui.menu.Button("Close", "icon/16/actions/stop.png"); + var mb1_06 = new qx.ui.menu.Button("Restore last saved", "icon/16/actions/view-refresh.png"); + m1.add(mb1_01, mb1_02, mb1_03, mb1_04, mb1_05, mb1_06); + + var m2 = new qx.ui.menu.Menu; + var mb2_01 = new qx.ui.menu.Button("Undo", "icon/16/actions/edit-undo.png"); + var mb2_02 = new qx.ui.menu.Button("Redo", "icon/16/actions/edit-redo.png"); + var mb2_b1 = new qx.ui.menu.Separator(); + var mb2_03 = new qx.ui.menu.Button("Cut", "icon/16/actions/edit-cut.png"); + var mb2_04 = new qx.ui.menu.Button("Copy", "icon/16/actions/edit-copy.png"); + var mb2_05 = new qx.ui.menu.Button("Paste", "icon/16/actions/edit-paste.png"); + var mb2_06 = new qx.ui.menu.Button("Delete", "icon/16/actions/edit-delete.png"); + var mb2_b2 = new qx.ui.menu.Separator(); + var mb2_07 = new qx.ui.menu.Button("Select All"); + var mb2_08 = new qx.ui.menu.Button("Find", "icon/16/actions/edit-find.png"); + var mb2_09 = new qx.ui.menu.Button("Find Again"); + mb2_05.setEnabled(false); + mb2_06.setEnabled(false); + mb2_09.setEnabled(false); + m2.add(mb2_01, mb2_02, mb2_b1, mb2_03, mb2_04, mb2_05, mb2_06, mb2_b2, mb2_07, mb2_08, mb2_09); + + var m3 = new qx.ui.menu.Menu; + var m3_suba = new qx.ui.menu.Menu; + var m3_subb = new qx.ui.menu.Menu; + var m3_subc = new qx.ui.menu.Menu; + var m3_subd = new qx.ui.menu.Menu; + + var mb3_01 = new qx.ui.menu.CheckBox("File List", null, false); + var mb3_02 = new qx.ui.menu.CheckBox("Syntax Highlighting", null, true); + var mb3_03 = new qx.ui.menu.CheckBox("Statusbar", null, true); + var mb3_b1 = new qx.ui.menu.Separator(); + var mb3_04 = new qx.ui.menu.Button("Printer Font", null, null, m3_suba); + var mb3_05 = new qx.ui.menu.Button("Editor Font", null, null, m3_subb); + var mb3_06 = new qx.ui.menu.Button("Export Font", null, null, m3_subc); + var mb3_b2 = new qx.ui.menu.Separator(); + var mb3_07 = new qx.ui.menu.Button("Advanced", null, null, m3_subd); + m3.add(mb3_01, mb3_02, mb3_03, mb3_b1, mb3_04, mb3_05, mb3_06, mb3_b2, mb3_07); + + var mb3_suba_01 = new qx.ui.menu.Button("Tahoma, 11pt"); + var mb3_suba_02 = new qx.ui.menu.Button("Tahoma, 12pt"); + var mb3_suba_03 = new qx.ui.menu.Button("Tahoma, 13pt"); + var mb3_suba_04 = new qx.ui.menu.Button("Tahoma, 14pt"); + var mb3_suba_05 = new qx.ui.menu.Button("Tahoma, 15pt"); + m3_suba.add(mb3_suba_01, mb3_suba_02, mb3_suba_03, mb3_suba_04, mb3_suba_05); + + var mb3_subb_01 = new qx.ui.menu.Button("Verdana, 11pt"); + var mb3_subb_02 = new qx.ui.menu.Button("Verdana, 12pt"); + var mb3_subb_03 = new qx.ui.menu.Button("Verdana, 13pt"); + var mb3_subb_04 = new qx.ui.menu.Button("Verdana, 14pt"); + var mb3_subb_05 = new qx.ui.menu.Button("Verdana, 15pt"); + m3_subb.add(mb3_subb_01, mb3_subb_02, mb3_subb_03, mb3_subb_04, mb3_subb_05); + + var mb3_subc_01 = new qx.ui.menu.Button("Courier, 11pt"); + var mb3_subc_02 = new qx.ui.menu.Button("Courier, 12pt"); + var mb3_subc_03 = new qx.ui.menu.Button("Courier, 13pt"); + var mb3_subc_04 = new qx.ui.menu.Button("Courier, 14pt"); + var mb3_subc_05 = new qx.ui.menu.Button("Courier, 15pt"); + m3_subc.add(mb3_subc_01, mb3_subc_02, mb3_subc_03, mb3_subc_04, mb3_subc_05); + + var mb3_subd_02_suba = new qx.ui.menu.Menu(); + var mb3_subd_02_suba_01 = new qx.ui.menu.Button("First"); + var mb3_subd_02_suba_02 = new qx.ui.menu.Button("Second"); + var mb3_subd_02_suba_03 = new qx.ui.menu.Button("Third"); + mb3_subd_02_suba.add(mb3_subd_02_suba_01, mb3_subd_02_suba_02, mb3_subd_02_suba_03); + + var mb3_subd_01 = new qx.ui.menu.Button("First"); + var mb3_subd_02 = new qx.ui.menu.Button("Second", null, null, mb3_subd_02_suba); + var mb3_subd_03 = new qx.ui.menu.Button("Third"); + + m3_subd.add(mb3_subd_01, mb3_subd_02, mb3_subd_03); + + var m4 = new qx.ui.menu.Menu; + var m4_suba = new qx.ui.menu.Menu; + + var mb4_01 = new qx.ui.menu.Button("View", null, null, m4_suba); + var mb4_b1 = new qx.ui.menu.Separator(); + var mb4_02 = new qx.ui.menu.Button("Editor Preferences...", "icon/16/apps/preferences.png"); + var mb4_03 = new qx.ui.menu.Button("Editor Extensions", "icon/16/apps/accessories-disk-usage.png"); + var mb4_04 = new qx.ui.menu.Button("Framework Preferences"); + + m4.add(mb4_01, mb4_b1, mb4_02, mb4_03, mb4_04); + + var mb4_suba_01 = new qx.ui.menu.Button("New Window"); + var mb4_suba_b1 = new qx.ui.menu.Separator(); + var mb4_suba_02 = new qx.ui.menu.RadioButton("Overlapping", null, true); + var mb4_suba_03 = new qx.ui.menu.RadioButton("Split Horizontally"); + var mb4_suba_04 = new qx.ui.menu.RadioButton("Split Vertically"); + var mb4_suba_b2 = new qx.ui.menu.Separator(); + var mb4_suba_05 = new qx.ui.menu.Button("Next Window"); + var mb4_suba_06 = new qx.ui.menu.Button("Previous Window"); + + m4_suba.add(mb4_suba_01, mb4_suba_b1, mb4_suba_02, mb4_suba_03, mb4_suba_04, mb4_suba_b2, mb4_suba_05, mb4_suba_06); + + var mb4_manager = new qx.manager.selection.RadioManager("windowMode", [ mb4_suba_02, mb4_suba_03, mb4_suba_04 ]); + + var m5 = new qx.ui.menu.Menu; + var mb5_01 = new qx.ui.menu.Button("Help", "icon/16/actions/help-about.png"); + var mb5_02 = new qx.ui.menu.Button("About", "icon/16/actions/system-run.png"); + m5.add(mb5_01, mb5_02); + + doc.add(m1, m2, m3, m3_suba, m3_subb, m3_subc, m3_subd, mb3_subd_02_suba, m4, m4_suba, m5); + + var mb1 = new qx.ui.toolbar.ToolBar; + var mbb1 = new qx.ui.toolbar.MenuButton("File", m1); + var mbb2 = new qx.ui.toolbar.MenuButton("Edit", m2); + var mbb3 = new qx.ui.toolbar.MenuButton("View", m3); + var mbb4 = new qx.ui.toolbar.MenuButton("Options", m4); + var mbb5 = new qx.ui.toolbar.MenuButton("Help", m5); + mb1.add(mbb1, mbb2, mbb3, mbb4, mbb5); + main.add(mb1); + + // Toolbar + function changeLayout(e) { + this.setShow(e.getData()); + } + + function changeSize(e) { + var v = e.getData(); + var o = v == 22 ? 32 : 22; + + this.setIcon(this.getIcon().replace(o, v)); + } + + function createButton(text, icon, clazz, checked) { + if (! clazz) { + clazz = qx.ui.toolbar.Button; + } + + var button = new clazz(text, "icon/22/actions/" + icon + ".png"); + doc.addEventListener("changeLayout", changeLayout, button); + doc.addEventListener("changeSize", changeSize, button); + + if (checked) { + button.setChecked(true); + } + + return button; + } + + var tb = new qx.ui.toolbar.ToolBar; + main.add(tb); + + var part = new qx.ui.toolbar.Part; + tb.add(part); + part.add(createButton("New", "document-new")); + part.add(new qx.ui.toolbar.Separator); + part.add(createButton("Copy", "edit-copy")); + part.add(createButton("Cut", "edit-cut")); + part.add(createButton("Paste", "edit-paste")); + + var part = new qx.ui.toolbar.Part; + tb.add(part); + part.add(createButton("Check", "edit-add", qx.ui.toolbar.CheckBox, true)); + + var part = new qx.ui.toolbar.Part; + tb.add(part); + var radio1 = createButton("Radio1", "view-pane-column", qx.ui.toolbar.RadioButton); + var radio2 = createButton("Radio2", "view-pane-detailed", qx.ui.toolbar.RadioButton, true); + var radio3 = createButton("Radio3", "view-pane-icon", qx.ui.toolbar.RadioButton); + part.add(radio1, radio2, radio3); + new qx.manager.selection.RadioManager(null, [radio1, radio2, radio3]); + + // Toolbar manipulation + var hor = new qx.ui.layout.HorizontalBoxLayout; + hor.setDimension("auto", "auto"); + hor.set({ spacing:10, marginTop:20 }); + main.add(hor); + + var vert = new qx.ui.layout.VerticalBoxLayout; + vert.setDimension("auto", "auto"); + hor.add(vert); + + var radio1 = new qx.ui.form.RadioButton("Show Icons and Label", "both"); + var radio2 = new qx.ui.form.RadioButton("Show Icons", "icon"); + var radio3 = new qx.ui.form.RadioButton("Show Label", "label"); + radio1.setChecked(true); + vert.add(radio1, radio2, radio3); + var rbm = new qx.manager.selection.RadioManager(null, [radio1, radio2, radio3]); + rbm.addEventListener("changeSelected", function(e) { + doc.dispatchEvent( new qx.event.type.DataEvent("changeLayout", e.getData().getValue() ) ); + }); + + // Alignment + var vert = new qx.ui.layout.VerticalBoxLayout; + vert.setDimension("auto", "auto"); + hor.add(vert); + + var radio1 = new qx.ui.form.RadioButton("Left Aligned", "left"); + var radio2 = new qx.ui.form.RadioButton("Centered", "center"); + var radio3 = new qx.ui.form.RadioButton("Right Aligned", "right"); + radio1.setChecked(true); + vert.add(radio1, radio2, radio3); + var rbm = new qx.manager.selection.RadioManager(null, [radio1, radio2, radio3]); + rbm.addEventListener("changeSelected", function(e) { + tb.setHorizontalChildrenAlign(e.getData().getValue()); + }); + + // Icon Sizes + var vert = new qx.ui.layout.VerticalBoxLayout; + vert.setDimension("auto", "auto"); + hor.add(vert); + + var button = new qx.ui.form.Button("Icons: 22 Pixel", "icon/16/actions/format-color.png"); + button.setHorizontalAlign("center"); + button.addEventListener("execute", function(e) { + doc.dispatchEvent(new qx.event.type.DataEvent("changeSize", 22)); + }); + vert.add(button); + + var button = new qx.ui.form.Button("Icons: 32 Pixel", "icon/16/actions/format-color.png"); + button.setHorizontalAlign("center"); + button.addEventListener("execute", function(e) { + doc.dispatchEvent(new qx.event.type.DataEvent("changeSize", 32)); + }); + vert.add(button); + + return main; +} + + +qx.Proto._createTabDemo = function() { + var main = new qx.ui.layout.HorizontalBoxLayout; + main.setPadding(10); + main.set({ width:"100%", height:"100%", spacing:10 }); + + // Tab view + var tf1 = new qx.ui.pageview.tabview.TabView; + tf1.set({ width:"1*" }); + main.add(tf1); + + var t1_1 = new qx.ui.pageview.tabview.Button("Edit"); + var t1_2 = new qx.ui.pageview.tabview.Button("Find"); + var t1_3 = new qx.ui.pageview.tabview.Button("Backup"); + t1_1.setChecked(true); + tf1.getBar().add(t1_1, t1_2, t1_3); + + var p1_1 = new qx.ui.pageview.tabview.Page(t1_1); + var p1_2 = new qx.ui.pageview.tabview.Page(t1_2); + var p1_3 = new qx.ui.pageview.tabview.Page(t1_3); + tf1.getPane().add(p1_1, p1_2, p1_3); + + p1_2.add(new qx.ui.form.TextField("Find Anywhere")); + p1_3.add(new qx.ui.form.TextField("Backup Input")); + + var c1 = new qx.ui.form.CheckBox("Place bar on top"); + var c2 = new qx.ui.form.CheckBox("Align tabs to left"); + + c1.setTop(0); + c1.setChecked(true); + + c2.setTop(20); + c2.setChecked(true); + + p1_1.add(c1, c2); + + c1.addEventListener("changeChecked", function(e) { + tf1.setPlaceBarOnTop(e.getData()); + }); + + c2.addEventListener("changeChecked", function(e) { + tf1.setAlignTabsToLeft(e.getData()); + }); + + // Inner tab view + var tf2 = new qx.ui.pageview.tabview.TabView; + tf2.set({ left: 0, top: 50, right: 0, bottom: 0 }); + p1_2.add(tf2); + + var t2_1 = new qx.ui.pageview.tabview.Button("Search for Files", "icon/16/actions/document-open.png"); + var t2_2 = new qx.ui.pageview.tabview.Button("Search the Web", "icon/16/categories/applications-internet.png"); + var t2_3 = new qx.ui.pageview.tabview.Button("Search in Mails", "icon/16/apps/internet-email-client.png"); + t2_1.setChecked(true); + tf2.getBar().add(t2_1, t2_2, t2_3); + + var p2_1 = new qx.ui.pageview.tabview.Page(t2_1); + var p2_2 = new qx.ui.pageview.tabview.Page(t2_2); + var p2_3 = new qx.ui.pageview.tabview.Page(t2_3); + tf2.getPane().add(p2_1, p2_2, p2_3); + + var t2_1 = new qx.ui.form.TextField("Files..."); + var t2_2 = new qx.ui.form.TextField("Web..."); + var t2_3 = new qx.ui.form.TextField("Mails..."); + + t2_1.set({ top: 2, left: 0, width: 140 }); + t2_2.set({ top: 2, left: 0, width: 140 }); + t2_3.set({ top: 2, left: 0, width: 140 }); + + p2_1.add(t2_1); + p2_2.add(t2_2); + p2_3.add(t2_3); + + var b2_1 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + var b2_2 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + var b2_3 = new qx.ui.form.Button("Search", "icon/16/actions/edit-find.png"); + + b2_1.set({ top: 0, left: 150 }); + b2_2.set({ top: 0, left: 150 }); + b2_3.set({ top: 0, left: 150 }); + + p2_1.add(b2_1); + p2_2.add(b2_2); + p2_3.add(b2_3); + + function dosearch(e) { + alert("Searching..."); + } + + b2_1.addEventListener("click", dosearch); + b2_2.addEventListener("click", dosearch); + b2_3.addEventListener("click", dosearch); + + // Bar view + var bs = new qx.ui.pageview.buttonview.ButtonView; + bs.set({ width:"1*", barPosition:"left" }); + main.add(bs); + + var bsb1 = new qx.ui.pageview.buttonview.Button("Display", "icon/16/devices/video-display.png"); + var bsb2 = new qx.ui.pageview.buttonview.Button("Colorize", "icon/16/actions/format-color.png"); + var bsb3 = new qx.ui.pageview.buttonview.Button("Icons", "icon/16/apps/preferences-desktop-theme.png"); + var bsb4 = new qx.ui.pageview.buttonview.Button("Applications", "icon/16/actions/system-run.png"); + var bsb5 = new qx.ui.pageview.buttonview.Button("System", "icon/16/devices/video-display.png"); + + bsb1.setChecked(true); + + bsb1.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb2.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb3.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb4.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + bsb5.set({ iconPosition: "left", horizontalChildrenAlign: "left" }); + + bs.getBar().add(bsb1, bsb2, bsb3, bsb4, bsb5); + bs.getBar().setHorizontalChildrenAlign("center"); + bs.getBar().setVerticalChildrenAlign("bottom"); + + var p1 = new qx.ui.pageview.buttonview.Page(bsb1); + var p2 = new qx.ui.pageview.buttonview.Page(bsb2); + var p3 = new qx.ui.pageview.buttonview.Page(bsb3); + var p4 = new qx.ui.pageview.buttonview.Page(bsb4); + var p5 = new qx.ui.pageview.buttonview.Page(bsb5); + bs.getPane().add(p1, p2, p3, p4, p5); + + p1.add(new qx.ui.form.TextField("Display Input")); + p2.add(new qx.ui.form.TextField("Paint Input")); + p3.add(new qx.ui.form.TextField("Icons Input")); + p4.add(new qx.ui.form.TextField("Applications Input")); + p5.add(new qx.ui.form.TextField("System Input")); + + var r1 = new qx.ui.form.RadioButton("Top", "top"); + var r2 = new qx.ui.form.RadioButton("Right", "right"); + var r3 = new qx.ui.form.RadioButton("Bottom", "bottom"); + var r4 = new qx.ui.form.RadioButton("Left", "left", null, true); + + r1.setTop(50); + r2.setTop(70); + r3.setTop(90); + r4.setTop(110); + + p1.add(r1, r2, r3, r4); + + var rm = new qx.manager.selection.RadioManager(null, [r1, r2, r3, r4]); + + rm.addEventListener("changeSelected", function(e) { + bs.setBarPosition(e.getData().getValue()); + }); + + return main; +} + + +qx.Proto._createTreeDemo = function() { + var main = new qx.ui.layout.HorizontalBoxLayout; + main.setPadding(10); + main.set({ width:"auto", height:"100%", spacing:10 }); + + // Workaround: qx.ui.tree.Tree causes an exception when added to a qx.ui.core.Parent that + // has no qx.ui.core.Parent. -> So we give the parent a pseudo parent + var workaround = new qx.ui.layout.HorizontalBoxLayout; + workaround.add(main); + + var t = new qx.ui.tree.Tree("Root"); + t.set({ backgroundColor:255, border:qx.renderer.border.BorderPresets.getInstance().inset, + overflow:"scrollY", height:"100%", width:200 }); + main.add(t); + + var te1 = new qx.ui.tree.TreeFolder("Desktop", "icon/16/actions/go-home.png", "icon/16/actions/go-home.png"); + t.add(te1); + + var te1_1 = new qx.ui.tree.TreeFolder("Files"); + var te1_2 = new qx.ui.tree.TreeFolder("Workspace"); + var te1_3 = new qx.ui.tree.TreeFolder("Network"); + var te1_4 = new qx.ui.tree.TreeFolder("Trash"); + te1.add(te1_1, te1_2, te1_3, te1_4); + var te1_2_1 = new qx.ui.tree.TreeFile("Windows (C:)", "icon/16/devices/drive-harddisk.png"); + var te1_2_2 = new qx.ui.tree.TreeFile("Documents (D:)", "icon/16/devices/drive-harddisk.png"); + te1_2.add(te1_2_1, te1_2_2); + + var te2 = new qx.ui.tree.TreeFolder("Inbox"); + t.add(te2); + + var te2_1 = new qx.ui.tree.TreeFolder("Presets"); + var te2_2 = new qx.ui.tree.TreeFolder("Sent"); + var te2_3 = new qx.ui.tree.TreeFolder("Trash", "icon/16/places/user-trash.png", "icon/16/places/user-trash.png"); + var te2_4 = new qx.ui.tree.TreeFolder("Data"); + var te2_5 = new qx.ui.tree.TreeFolder("Edit"); + + var te2_5_1 = new qx.ui.tree.TreeFolder("Chat"); + var te2_5_2 = new qx.ui.tree.TreeFolder("Pustefix"); + var te2_5_3 = new qx.ui.tree.TreeFolder("TINC"); + te2_5.add(te2_5_1, te2_5_2, te2_5_3); + + var te2_5_3_1 = new qx.ui.tree.TreeFolder("Announce"); + var te2_5_3_2 = new qx.ui.tree.TreeFolder("Devel"); + te2_5_3.add(te2_5_3_1, te2_5_3_2); + + var te2_6 = new qx.ui.tree.TreeFolder("Lists"); + + var te2_6_1 = new qx.ui.tree.TreeFolder("Relations"); + var te2_6_2 = new qx.ui.tree.TreeFolder("Company"); + var te2_6_3 = new qx.ui.tree.TreeFolder("Questions"); + var te2_6_4 = new qx.ui.tree.TreeFolder("Internal"); + var te2_6_5 = new qx.ui.tree.TreeFolder("Products"); + var te2_6_6 = new qx.ui.tree.TreeFolder("Press"); + var te2_6_7 = new qx.ui.tree.TreeFolder("Development"); + var te2_6_8 = new qx.ui.tree.TreeFolder("Competition"); + + te2_6.add(te2_6_1, te2_6_2, te2_6_3, te2_6_4, te2_6_5, te2_6_6, te2_6_7, te2_6_8); + + var te2_7 = new qx.ui.tree.TreeFolder("Personal"); + + var te2_7_1 = new qx.ui.tree.TreeFolder("Bugs"); + var te2_7_2 = new qx.ui.tree.TreeFolder("Family"); + var te2_7_3 = new qx.ui.tree.TreeFolder("Projects"); + var te2_7_4 = new qx.ui.tree.TreeFolder("Holiday"); + + te2_7.add(te2_7_1, te2_7_2, te2_7_3, te2_7_4); + + var te2_8 = new qx.ui.tree.TreeFolder("Big"); + + for (var i = 0; i < 50; i++) { + te2_8.add(new qx.ui.tree.TreeFolder("Item " + i)); + } + + var te2_9 = new qx.ui.tree.TreeFolder("Spam"); + + te2.add(te2_1, te2_2, te2_3, te2_4, te2_5, te2_6, te2_7, te2_8, te2_9); + + // Command frame + var commandFrame = new qx.ui.groupbox.GroupBox("Control"); + commandFrame.set({ width:"auto", height:"auto" }); + main.add(commandFrame); + + var command = new qx.ui.layout.VerticalBoxLayout; + command.set({ width:"auto", height:"auto", paddingRight:12 }); + commandFrame.add(command); + + var tCurrentLabel = new qx.ui.basic.Atom("Current Folder: "); + command.add(tCurrentLabel); + + var tCurrentInput = new qx.ui.form.TextField; + tCurrentInput.set({ readOnly:true, marginBottom:20 }); + command.add(tCurrentInput); + + t.getManager().addEventListener("changeSelection", function(e) { + tCurrentInput.setValue(e.getData()[0]._labelObject.getHtml()); + }); + + var tDoubleClick = new qx.ui.form.CheckBox("Use double click?"); + tDoubleClick.addEventListener("changeChecked", function(e) { + t.setUseDoubleClick(e.getData()); + }); + command.add(tDoubleClick); + + var tTreeLines = new qx.ui.form.CheckBox("Use tree lines?"); + tTreeLines.setChecked(true); + tTreeLines.addEventListener("changeChecked", function(e) { t.setUseTreeLines(e.getData()); }); + command.add(tTreeLines); + + return main; +} + + +qx.Proto._createListDemo = function() { + var main = new qx.ui.layout.HorizontalBoxLayout; + main.setPadding(10); + main.set({ width:"auto", height:"100%", spacing:10 }); + + // List + var list = new qx.ui.form.List; + list.set({ height:"100%", width:150, overflow:"scrollY" }); + main.add(list) + + var item; + for(var i = 1; i <= 35; i++) { + var iconName; + switch (parseInt(Math.random() * 5)) { + case 0: iconName = "places/folder.png"; break; + case 1: iconName = "devices/drive-harddisk.png"; break; + case 2: iconName = "apps/accessories-tip.png"; break; + case 3: iconName = "devices/scanner.png"; break; + case 4: iconName = "apps/accessories-tip.png"; break; + } + item = new qx.ui.form.ListItem("Item No " + i, "icon/" + ((i % 4) ? "16" : "48") + "/" + iconName); + + if (!(i % 9)) (item.setEnabled(false)); + + list.add(item); + } + + // Control + var control = new qx.ui.layout.VerticalBoxLayout; + control.set({ width:"auto", height:"auto" }); + main.add(control); + + var c1 = new qx.ui.form.CheckBox("Enable Multi-Selection"); + var c2 = new qx.ui.form.CheckBox("Enable Drag-Selection"); + var c3 = new qx.ui.form.CheckBox("Allow Deselection"); + var c4 = new qx.ui.form.CheckBox("Enable Inline Find"); + control.add(c1, c2, c3, c4); + + c1.setChecked(true); + c2.setChecked(true); + c3.setChecked(true); + c4.setChecked(true); + + c1.addEventListener("changeChecked", function(e) { + list.getManager().setMultiSelection(e.getData()); + }); + c2.addEventListener("changeChecked", function(e) { + list.getManager().setDragSelection(e.getData()); + }); + c3.addEventListener("changeChecked", function(e) { + list.getManager().setCanDeselect(e.getData()); + }); + c4.addEventListener("changeChecked", function(e) { + list.setEnableInlineFind(e.getData()); + }); + + var rd1 = new qx.ui.form.RadioButton("Show Label", "label"); + var rd2 = new qx.ui.form.RadioButton("Show Icon", "icon"); + var rd3 = new qx.ui.form.RadioButton("Show Both", "both"); + rd3.setChecked(true); + control.add(rd1, rd2, rd3); + var rbm = new qx.manager.selection.RadioManager( name, [rd1, rd2, rd3]); + + rbm.addEventListener("changeSelected", function(e) { + for (var i = 0; i < list.getChildrenLength(); i++) { + list.getChildren()[i].setShow(e.getData().getValue()); + } + }); + + return main; +} + + +qx.Proto._createListViewDemo = function() { + var main = new qx.ui.layout.HorizontalBoxLayout; + main.setPadding(10); + main.set({ width:"auto", height:"100%", spacing:10 }); + + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i = 0, t; i < 1000; i++) { + t = Math.round(Math.random() * 4); + ld.push({ name : { html : "E-Mail " + i, icon : "icon/16/apps/internet-email-client.png", iconWidth : 16, iconHeight : 16 }, size : { text : Math.round(Math.random()*100) + "kb" }, type : { text : lt[t] }, modified : { text : "Nov " + Math.round(Math.random() * 30 + 1) + " 2005" }, rights: { text : "-rw-r--r--" }, open : { uri : "http://www.google.com/search?q=" + i, html : "Open " + i }}); + } + + var lc = { + name : { label : "Name", width : 120, type : "iconHtml" }, + size: { label : "Size", width : 50, type : "text", align : "right" }, + type : { label : "Type", width : 80, type : "text" }, + modified : { label : "Last Modified", width : 150, type : "text" }, + rights : { label : "Rights", width: 80, type : "text" } + } + + var lv = new qx.ui.listview.ListView(ld, lc); + main.add(lv); + + lv.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); + lv.setBackgroundColor("white"); + lv.setWidth(600); + lv.setHeight(350); + + return main; +} + + +qx.Proto._createTableDemo = function() { + // table model + var tableModel = new qx.ui.table.SimpleTableModel(); + tableModel.setColumns([ "ID", "A number", "A date", "Boolean test" ]); + var rowData = []; + var now = new Date().getTime(); + var dateRange = 400 * 24 * 60 * 60 * 1000; // 400 days + for (var row = 0; row < 100; row++) { + var date = new Date(now + Math.random() * dateRange - dateRange / 2); + rowData.push([ row, Math.random() * 10000, date, (Math.random() > 0.5) ]); + } + tableModel.setData(rowData); + tableModel.setColumnEditable(1, true); + tableModel.setColumnEditable(2, true); + + // table + var table = new qx.ui.table.Table(tableModel); + with (table) { + set({ width:"100%", height:"100%" }); + setMetaColumnCounts([1, -1]); + getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION); + getTableColumnModel().setDataCellRenderer(3, new qx.ui.table.BooleanDataCellRenderer()); + } + + return table; +} + + +qx.Proto._createLocalizationDemo = function() { + var main = new qx.ui.layout.CanvasLayout(); + main.set({ width: "auto", height: "auto", paddingLeft: 10, paddingTop: 10, paddingBottom:10, paddingRight:10 }) + + var controls = new qx.ui.layout.VerticalBoxLayout(); + controls.set({top: 40, width: "auto", height: "auto", spacing: 20}); + + var locales = qx.locale.Manager.getInstance().getAvailableLocales().sort(); + + // locale selection + var hb2 = new qx.ui.layout.HorizontalBoxLayout(); hb2.set({top:0, left:0, spacing:3}); + var l2 = new qx.ui.basic.Label(this.tr("Choose a locale: ")); + var select = new qx.ui.form.ComboBox(); + for (var i=0; i<locales.length; i++) { + select.add(new qx.ui.form.ListItem(locales[i])); + } + + var defaultListItem = select.getList().findStringExact("en"); + if (defaultListItem) { + select.setSelected(defaultListItem); + } + select.addEventListener("changeSelected", function(e) { + var locale = e.getData().getLabel(); + qx.locale.Manager.getInstance().setLocale(locale); + }); + hb2.add(l2, select); + main.add(hb2); + + // DateChooserButton + var hb1 = new qx.ui.layout.HorizontalBoxLayout(); hb1.set({height: "auto", spacing:3}); + var l1 = new qx.ui.basic.Label(this.tr("A date: ")); + var tf1 = new qx.ui.form.TextField(); tf1.set({ width: 130, height:20}); + var dcb1 = new qx.ui.component.DateChooserButton(); dcb1.set({ width: 20 }); + dcb1.setTargetWidget(tf1); + hb1.add(l1, tf1, dcb1); + controls.add(hb1); + + + // DateChooser + var chooser = new qx.ui.component.DateChooser; + chooser.setWidth("auto"); + chooser.setHeight("auto"); + controls.add(chooser); + + + // Commands + var undo_cmd = new qx.client.Command("Ctrl+Z"); + var redo_cmd = new qx.client.Command("Ctrl+Y"); + var cut_cmd = new qx.client.Command("Ctrl+X"); + var copy_cmd = new qx.client.Command("Ctrl+C"); + var paste_cmd = new qx.client.Command("Ctrl+V"); + var delete_cmd = new qx.client.Command("Del"); + var select_all_cmd = new qx.client.Command("Ctrl+A"); + var search_cmd = new qx.client.Command("Ctrl+F"); + var search_again_cmd = new qx.client.Command("F3"); + + var m1 = new qx.ui.menu.Menu; + m1.add(new qx.ui.menu.Button(this.tr("Undo"), null, undo_cmd)); + m1.add(new qx.ui.menu.Button(this.tr("Redo"), null, redo_cmd)); + m1.add(new qx.ui.menu.Separator()); + m1.add(new qx.ui.menu.Button(this.tr("Cut"), "icon/16/actions/edit-cut.png", cut_cmd)); + m1.add(new qx.ui.menu.Button(this.tr("Copy"), "icon/16/actions/edit-copy.png", copy_cmd)); + m1.add(new qx.ui.menu.Button(this.tr("Paste"), "icon/16/actions/edit-paste.png", paste_cmd)); + m1.add(new qx.ui.menu.Button(this.tr("Delete"), "icon/16/actions/edit-delete.png", delete_cmd)); + m1.add(new qx.ui.menu.Button(this.tr("Select All"), null, select_all_cmd)); + m1.add(new qx.ui.menu.Separator()); + m1.add(new qx.ui.menu.Button(this.tr("Search"), null, search_cmd)); + m1.add(new qx.ui.menu.Button(this.tr("Search Again"), null, search_again_cmd)); + m1.addToDocument(); + + var w1 = new qx.ui.form.Button(this.tr("Command Menu (keyboard shortcuts)")); + w1.addEventListener("click", function(e) { + if (m1.isSeeable()) { + m1.hide(); + } else { + var el = this.getElement(); + m1.setLeft(qx.html.Location.getPageBoxLeft(el)); + m1.setTop(qx.html.Location.getPageBoxBottom(el)); + m1.show(); + }; + e.setPropagationStopped(true); + }); + w1.addEventListener("mousedown", function(e) { + e.setPropagationStopped(true); + }); + controls.add(w1); + + // ColorPopup + var mybtn = new qx.ui.form.Button(this.tr("Open Color Popup")); + mybtn.addEventListener("execute", function() { + mypop.setTop(qx.html.Location.getPageBoxBottom(this.getElement())); + mypop.setLeft(qx.html.Location.getPageBoxLeft(this.getElement())); + mypop.show(); + }); + controls.add(mybtn); + var mytables = + { + core : { + label : this.tr("Basic Colors"), + values : [ "#000", "#333", "#666", "#999", "#CCC", "#FFF", "red", "green", "blue", "yellow", "teal", "maroon" ] + }, + template : { + label : this.tr("Template Colors"), + values : [ "#B07B30", "#B07BC9", "#E3AEC9", "#7A2A53" ] + }, + recent : { + label : this.tr("Recent Colors"), + + // In this case we need named colors or rgb-value-strings, hex is not allowed currently + values : [ "rgb(122,195,134)", "orange" ] + } + } + var mypop = new qx.ui.component.ColorPopup(mytables); + mypop.setValue(new qx.renderer.color.Color("#23F3C1")); + mypop.addToDocument(); + + + // ColorSelector + var mycolor = new qx.ui.component.ColorSelector; + controls.add(mycolor); + + main.add(controls); + + // Info Box + var fs = new qx.ui.groupbox.GroupBox(this.tr("Locale information")); + fs.set({ left: 300, top: 0, width: 400, height: "auto"}); + var infoLabel = new qx.ui.basic.Label(""); + fs.add(infoLabel); + main.add(fs); + + var info = []; + info.push("<table style='font-size:11px'><tr><td>"); + for (var i=0; i<13; i++) { + info.push(""); + info.push("</td><td>"); + info.push(""); + info.push("</td></tr><td>"); + } + info.push(""); + info.push("</td><td>"); + info.push(""); + info.push("</td></tr></table>"); + + this.updateLocaleInformation = function() { + var i = 0; + info[(i++ * 2) + 1] = this.tr("Locale:"); + info[(i++ * 2) + 1] = qx.locale.Manager.getInstance().getLocale(); + + info[(i++ * 2) + 1] = this.tr("Territory code:"); + info[(i++ * 2) + 1] = qx.locale.Manager.getInstance().getTerritory(); + + info[(i++ * 2) + 1] = this.tr("Date format medium:"); + info[(i++ * 2) + 1] = qx.locale.Date.getDateFormat("medium"); + info[(i++ * 2) + 1] = this.tr("Date medium:"); + info[(i++ * 2) + 1] = (new qx.util.format.DateFormat(qx.locale.Date.getDateFormat("medium"))).format(new Date()); + + info[(i++ * 2) + 1] = this.tr("Date format long:"); + info[(i++ * 2) + 1] = qx.locale.Date.getDateFormat("long"); + info[(i++ * 2) + 1] = this.tr("Date long:"); + info[(i++ * 2) + 1] = (new qx.util.format.DateFormat(qx.locale.Date.getDateFormat("long"))).format(new Date()); + + info[(i++ * 2) + 1] = this.tr("Date format full:"); + info[(i++ * 2) + 1] = qx.locale.Date.getDateFormat("full"); + info[(i++ * 2) + 1] = this.tr("Date full:"); + info[(i++ * 2) + 1] = (new qx.util.format.DateFormat(qx.locale.Date.getDateFormat("full"))).format(new Date()); + + info[(i++ * 2) + 1] = this.tr("Time format short:"); + info[(i++ * 2) + 1] = qx.locale.Date.getTimeFormat("short"); + info[(i++ * 2) + 1] = this.tr("Time short:"); + info[(i++ * 2) + 1] = (new qx.util.format.DateFormat(qx.locale.Date.getTimeFormat("short"))).format(new Date()); + + info[(i++ * 2) + 1] = this.tr("Time format long:"); + info[(i++ * 2) + 1] = qx.locale.Date.getTimeFormat("long"); + info[(i++ * 2) + 1] = this.tr("Time long:"); + info[(i++ * 2) + 1] = (new qx.util.format.DateFormat(qx.locale.Date.getTimeFormat("long"))).format(new Date()); + + info[(i++ * 2) + 1] = this.tr("Week start:"); + info[(i++ * 2) + 1] = qx.locale.Date.getDayName("wide", qx.locale.Date.getWeekStart()); + + info[(i++ * 2) + 1] = this.tr("Format of %1:", 10000.12); + info[(i++ * 2) + 1] = qx.util.format.NumberFormat.getInstance().format(10000.12); + + infoLabel.setHtml(info.join("")); + }; + + // update info box + qx.locale.Manager.getInstance().addEventListener("changeLocale", this.updateLocaleInformation, this); + this.updateLocaleInformation(); + + return main; +} + + +qx.Proto._createNativeWindowDemo = function() { + var main = new qx.ui.layout.VerticalBoxLayout; + main.setPadding(10); + main.set({ width:"auto", height:"auto", spacing:5 }); + + var win = new qx.client.NativeWindow("http://www.google.com"); + win.setDimension(600, 400); + + var openBt = new qx.ui.form.Button("Open Native Window", "icon/16/apps/system-users.png"); + openBt.addEventListener("click", function() { win.open(); } ); + main.add(openBt); + + // Initial Settings + var fs1 = new qx.ui.groupbox.GroupBox("Initial Settings"); + fs1.set({ width:250, height:"auto" }); + main.add(fs1); + + var vert = new qx.ui.layout.VerticalBoxLayout; + vert.set({ width:"auto", height:"auto" }); + fs1.add(vert); + + var chk1 = new qx.ui.form.CheckBox("Resizeable"); + chk1.setChecked(true); + chk1.addEventListener("changeChecked", function(e) { + win.setResizeable(e.getData()); + }); + + var chk2 = new qx.ui.form.CheckBox("Show Statusbar"); + chk2.setChecked(false); + chk2.addEventListener("changeChecked", function(e) { + win.setShowStatusbar(e.getData()); + }); + + var chk3 = new qx.ui.form.CheckBox("Show Menubar"); + chk3.setChecked(false); + chk3.addEventListener("changeChecked", function(e) { + win.setShowMenubar(e.getData()); + }); + + var chk4 = new qx.ui.form.CheckBox("Show Location"); + chk4.setChecked(false); + chk4.addEventListener("changeChecked", function(e) { + win.setShowLocation(e.getData()); + }); + + var chk5 = new qx.ui.form.CheckBox("Show Toolbar"); + chk5.setChecked(false); + chk5.addEventListener("changeChecked", function(e) { + win.setShowToolbar(e.getData()); + }); + + var chk6 = new qx.ui.form.CheckBox("Allow Scrollbars"); + chk6.setChecked(true); + chk6.addEventListener("changeChecked", function(e) { + win.setAllowScrollbars(e.getData()); + }); + + var chk7 = new qx.ui.form.CheckBox("Modal"); + chk7.setChecked(false); + chk7.addEventListener("changeChecked", function(e) { + win.setModal(e.getData()); + }); + + var chk8 = new qx.ui.form.CheckBox("Dependent"); + chk8.setChecked(true); + chk8.addEventListener("changeChecked", function(e) { + win.setDependent(e.getData()); + }); + + vert.add(chk1, chk2, chk3, chk4, chk5, chk6, chk7, chk8); + + // Runtime Settings + var fs2 = new qx.ui.groupbox.GroupBox("Runtime Settings"); + fs2.set({ width:250, height:"auto" }); + main.add(fs2); + + var vert = new qx.ui.layout.VerticalBoxLayout; + vert.set({ width:"auto", height:"auto", spacing:2 }); + fs2.add(vert); + + var tf1 = new qx.ui.form.TextField("http://www.google.com"); + tf1.setWidth(150); + + var setUrlBt = new qx.ui.form.Button("Set Url", "icon/16/actions/dialog-ok.png"); + setUrlBt.addEventListener("click", function() { + win.setUrl(tf1.getValue()); + }); + + var hor = new qx.ui.layout.HorizontalBoxLayout; + hor.set({ width:"auto", height:"auto", spacing:5, + verticalChildrenAlign:"middle", marginBottom:10 }); + vert.add(hor); + hor.add(tf1, setUrlBt); + + + var tf2 = new qx.ui.form.TextField("600"); + tf2.setWidth(50); + + var btn2 = new qx.ui.form.Button("Set Width", "icon/16/actions/dialog-ok.png"); + btn2.addEventListener("click", function() { + win.setWidth(parseInt(tf2.getValue())); + }); + + var hor = new qx.ui.layout.HorizontalBoxLayout; + hor.set({ width:"auto", height:"auto", spacing:5, + verticalChildrenAlign:"middle" }); + vert.add(hor); + hor.add(tf2, btn2); + + + var tf3 = new qx.ui.form.TextField("400"); + tf3.setWidth(50); + + var btn3 = new qx.ui.form.Button("Set Height", "icon/16/actions/dialog-ok.png"); + btn3.addEventListener("click", function() { + win.setHeight(parseInt(tf3.getValue())); + }); + + var hor = new qx.ui.layout.HorizontalBoxLayout; + hor.set({ width:"auto", height:"auto", spacing:5, + verticalChildrenAlign:"middle", marginBottom:10 }); + vert.add(hor); + hor.add(tf3, btn3); + + + var btn4 = new qx.ui.form.Button("Center to screen", "icon/16/devices/video-display.png"); + btn4.setWidth("100%"); + btn4.addEventListener("click", function() { + win.centerToScreen() + }); + + var btn5 = new qx.ui.form.Button("Center to screen area", "icon/16/devices/video-display.png"); + btn5.setWidth("100%"); + btn5.addEventListener("click", function() { + win.centerToScreenArea() + }); + + var btn6 = new qx.ui.form.Button("Center to opener", "icon/16/devices/video-display.png"); + btn6.setWidth("100%"); + btn6.addEventListener("click", function() { + win.centerToOpener() + }); + + vert.add(btn4, btn5, btn6); + + return main; +} + + +qx.Proto._createInternalWindowDemo = function() { + var doc = qx.ui.core.ClientDocument.getInstance(); + + var main = new qx.ui.layout.CanvasLayout; + main.setOverflow("hidden"); + + // Create the windows + var w1 = new qx.ui.window.Window("First Window", "icon/16/apps/preferences-desktop-multimedia.png"); + w1.setSpace(20, 400, 48, 250); + main.add(w1); + + var w2 = new qx.ui.window.Window("Second Window", "icon/16/actions/format-color.png"); + w2.setSpace(250, "auto", 120, "auto"); + main.add(w2); + + var w3 = new qx.ui.window.Window("Third Window", "icon/16/categories/applications-internet.png"); + w3.setSpace(100, "auto", 200, "auto"); + w3.set({ maxWidth:450, maxHeight:400 }); + main.add(w3); + + var wm1 = new qx.ui.window.Window("First Modal Dialog"); + wm1.setSpace(150, 200, 150, 200); + wm1.setModal(true); + doc.add(wm1); + + var wm2 = new qx.ui.window.Window("Second Modal Dialog"); + wm2.setSpace(100, 200, 100, 150); + wm2.set({ modal:true, showClose:false }); + doc.add(wm2); + + // Fill window 1 + var a1 = new qx.ui.basic.Atom("Welcome to your first own Window.<br/>Have fun!", "icon/32/apps/office-organizer.png"); + a1.set({ top: 4, left: 4 }); + w1.add(a1); + + var tf1 = new qx.ui.pageview.tabview.TabView; + tf1.set({ left: 10, top: 52, right: 10, bottom: 10 }); + + var t1_1 = new qx.ui.pageview.tabview.Button("Explore"); + var t1_2 = new qx.ui.pageview.tabview.Button("Internet"); + var t1_3 = new qx.ui.pageview.tabview.Button("Future"); + + t1_1.setChecked(true); + + tf1.getBar().add(t1_1, t1_2, t1_3); + + var p1_1 = new qx.ui.pageview.tabview.Page(t1_1); + var p1_2 = new qx.ui.pageview.tabview.Page(t1_2); + var p1_3 = new qx.ui.pageview.tabview.Page(t1_3); + + tf1.getPane().add(p1_1, p1_2, p1_3); + + w1.add(tf1); + + // Fill window 2 + var at1 = new qx.ui.basic.Atom("Your second window", "icon/22/actions/edit-find.png"); + at1.setLocation(8, 8); + w2.add(at1); + + var fs1 = new qx.ui.groupbox.GroupBox("Settings"); + fs1.set({ left:4, top:40, right:4, bottom:4 }); + + var chk1 = new qx.ui.form.CheckBox("Show Icon"); + chk1.set({ left:0, top:0, checked:true }); + chk1.addEventListener("changeChecked", function(e) { + w2.setShowIcon(e.getData()); + }); + + var chk2 = new qx.ui.form.CheckBox("Show Caption"); + chk2.set({ left:0, top:20, checked:true }); + chk2.addEventListener("changeChecked", function(e) { + w2.setShowCaption(e.getData()); + }); + + var chk3 = new qx.ui.form.CheckBox("Resizeable"); + chk3.set({ left:0, top:50, checked:true }); + chk3.addEventListener("changeChecked", function(e) { + w2.setResizeable(e.getData()); + }); + + var chk4 = new qx.ui.form.CheckBox("Moveable"); + chk4.set({ left:0, top:70, checked:true }); + chk4.addEventListener("changeChecked", function(e) { + w2.setMoveable(e.getData()); + }); + + var chk5 = new qx.ui.form.CheckBox("Show Close"); + chk5.set({ left:140, top:0, checked:true }); + chk5.addEventListener("changeChecked", function(e) { + w2.setShowClose(e.getData()); + }); + + var chk6 = new qx.ui.form.CheckBox("Show Maximize/Restore"); + chk6.set({ left:140, top:20, checked:true }); + chk6.addEventListener("changeChecked", function(e) { + w2.setShowMaximize(e.getData()); + }); + + var chk7 = new qx.ui.form.CheckBox("Show Minimize"); + chk7.set({ left:140, top:40, checked:true }); + chk7.addEventListener("changeChecked", function(e) { + w2.setShowMinimize(e.getData()); + }); + + var chk8 = new qx.ui.form.CheckBox("Allow Close"); + chk8.set({ left:140, top:70, checked:true }); + chk8.addEventListener("changeChecked", function(e) { + w2.setAllowClose(e.getData()); + }); + + var chk9 = new qx.ui.form.CheckBox("Allow Maximize"); + chk9.set({ left:140, top:90, checked:true }); + chk9.addEventListener("changeChecked", function(e) { + w2.setAllowMaximize(e.getData()); + }); + + var chk10 = new qx.ui.form.CheckBox("Allow Minimize"); + chk10.set({ left:140, top:110, checked:true }); + chk10.addEventListener("changeChecked", function(e) { + w2.setAllowMinimize(e.getData()); + }); + + var l1 = new qx.ui.basic.Atom("Move Method", "icon/16/apps/preferences-desktop-wallpaper.png"); + l1.setLocation(0, 100); + + var rb1 = new qx.ui.form.RadioButton("Frame", "frame"); + rb1.setLocation(0, 120); + + var rb2 = new qx.ui.form.RadioButton("Opaque", "opaque"); + rb2.setLocation(0, 140); + rb2.setChecked(true); + + var rb3 = new qx.ui.form.RadioButton("Translucent", "translucent"); + rb3.setLocation(0, 160); + + var rbm1 = new qx.manager.selection.RadioManager("move", [rb1, rb2, rb3]); + + rbm1.addEventListener("changeSelected", function(e) { + w2.setMoveMethod(e.getData().getValue()); + }); + + var l2 = new qx.ui.basic.Atom("Resize Method", "icon/16/apps/preferences-desktop-wallpaper.png"); + l2.setLocation(0, 190); + + var rb4 = new qx.ui.form.RadioButton("Frame", "frame"); + rb4.setLocation(0, 210); + rb4.setChecked(true); + + var rb5 = new qx.ui.form.RadioButton("Opaque", "opaque"); + rb5.setLocation(0, 230); + + var rb6 = new qx.ui.form.RadioButton("Lazy Opaque", "lazyopaque"); + rb6.setLocation(0, 250); + + var rb7 = new qx.ui.form.RadioButton("Translucent", "translucent"); + rb7.setLocation(0, 270); + + var rbm2 = new qx.manager.selection.RadioManager("resize", [rb4, rb5, rb6, rb7]); + + rbm2.addEventListener("changeSelected", function(e) { + w2.setResizeMethod(e.getData().getValue()); + }); + + var chk11 = new qx.ui.form.CheckBox("Show Statusbar"); + chk11.setLocation(140, 140); + chk11.setChecked(false); + chk11.addEventListener("changeChecked", function(e) { + w2.setShowStatusbar(e.getData()); + }); + + var btnpack = new qx.ui.form.Button("Pack Window", "icon/16/devices/media-optical.png"); + btnpack.setLocation(140, 170); + btnpack.addEventListener("execute", function(e) { + w2.pack(); + }); + + fs1.add(chk1, chk2, chk3, chk4, chk5, chk6, chk7, chk8, chk9, chk10, l1, rb1, rb2, rb3, l2, rb4, rb5, rb6, rb7, chk11, btnpack); + w2.add(fs1); + + // Fill window 3 + var btn1 = new qx.ui.form.Button("Open Modal Dialog 1", "icon/16/actions/edit-find.png"); + btn1.setLocation(4, 4); + w3.add(btn1); + + btn1.addEventListener("execute", function(e) { + wm1.open(); + }); + + // Fill modal window 1 + var btn2 = new qx.ui.form.Button("Open Modal Dialog 2", "icon/16/actions/edit-find.png"); + btn2.setLocation(4, 4); + wm1.add(btn2); + + btn2.addEventListener("execute", function(e) { + wm2.open(); + }); + + var chkm1 = new qx.ui.form.CheckBox("Modal", null, null, true); + chkm1.setLocation(4, 50); + wm1.add(chkm1); + + chkm1.addEventListener("changeChecked", function(e) { + wm1.setModal(e.getData()); + }); + + // Fill modal window 2 + var icon1 = new qx.ui.basic.Image("icon/32/status/dialog-error.png"); + var warn1 = new qx.ui.basic.Label("Do you want to delete<br/>all your personal data?"); + + icon1.setTop(10); + icon1.setLeft(10); + + warn1.setTop(10); + warn1.setLeft(48); + + var btn3 = new qx.ui.form.Button("Yes", "icon/16/actions/dialog-ok.png"); + var btn4 = new qx.ui.form.Button("No", "icon/16/actions/dialog-cancel.png"); + + btn3.addEventListener("execute", function(e) { + alert("Thank you!"); + wm2.close(); + }); + + btn4.addEventListener("execute", function(e) { + alert("Sorry, please click 'Yes'!"); + }); + + btn3.set({ bottom : 10, right : 10 }); + btn4.set({ bottom : 10, left : 10 }); + + wm2.add(btn3, btn4, icon1, warn1); + + // Icon & Color Themes + //qx.manager.object.ImageManager.getInstance().createThemeList(w3, 20, 248); + //qx.manager.object.ColorManager.getInstance().createThemeList(w3, 4, 58); + + w1.open(); + w2.open(); + w3.open(); + + return main; +} + + +qx.Proto._createThemesDemo = function() { + var doc = qx.ui.core.ClientDocument.getInstance(); + + // Theming window + var win = new qx.ui.window.Window("Theming window", "icon/16/apps/preferences-desktop-wallpaper.png"); + //win.set({ width:"auto", height:"auto" }); + doc.add(win); + + var vert = new qx.ui.layout.VerticalBoxLayout; + vert.set({ width:"auto", height:"auto", spacing:5, left:0, top:0, right:0, bottom:0 }); + vert.setPadding(10); + win.add(vert); + + var info = new qx.ui.basic.Atom("Click on one of the buttons and then view the " + + "other tabs to see the changes", "icon/32/actions/system-run.png"); + //info.set({ border:qx.renderer.border.BorderPresets.getInstance().inset, backgroundColor:"white" }); + info.setPadding(5); + vert.add(info); + + var hor = new qx.ui.layout.HorizontalBoxLayout; + hor.set({ width:"auto", height:"auto", spacing:5 }); + vert.add(hor); + + var can = new qx.ui.layout.CanvasLayout; + can.set({ width:"auto", height:"auto" }); + hor.add(can); + qx.manager.object.ImageManager.getInstance().createThemeList(can, 0, 0); + + var can = new qx.ui.layout.CanvasLayout; + can.set({ width:"auto", height:"auto" }); + hor.add(can); + qx.manager.object.ColorManager.getInstance().createThemeList(can, 0, 0); + + // Put the window in lower right corner + win.set({ width:"auto", height:"auto" }); + + // Open button + var main = new qx.ui.layout.VerticalBoxLayout; + main.setPadding(10); + main.set({ width:"auto", height:"auto" }); + + var openThemeWinBt = new qx.ui.form.Button("Open theming window", "icon/16/actions/edit-find.png"); + openThemeWinBt.addEventListener("execute", function(e) { + win.open(); + + // the following breaks in the current layouter + /* + win.setLeft(doc.getClientWidth() - win.getBoxWidth() - 5); + win.setTop(doc.getClientHeight() - win.getBoxHeight() - 5); + */ + + win.setLeft(doc.getClientWidth() - 500); + win.setTop(doc.getClientHeight() - 300); + }); + main.add(openThemeWinBt); + + return main; +} + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/index.html new file mode 100644 index 0000000000..0882fb05d8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/index.html @@ -0,0 +1,15 @@ +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Showcase</title> + <script type="text/javascript" src="script/showcase.js"></script> + </head> + <body> + <script type="text/javascript"> + if (!qx.IS_SOURCE) { + qx.log.Logger.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_ERROR); + } + qx.core.Init.getInstance().setApplication(showcase.Application); + </script> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/C.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/C.po new file mode 100644 index 0000000000..0e540ee675 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/C.po @@ -0,0 +1,138 @@ +# (Default) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/ar.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/ar.po new file mode 100644 index 0000000000..cae15d338b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/ar.po @@ -0,0 +1,138 @@ +# Arabic +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de.po new file mode 100644 index 0000000000..20e93bb628 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de.po @@ -0,0 +1,139 @@ +# German +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2007-01-23 17:46+0100\n" +"Last-Translator: Fabian Jakobs <fabian DOT jakobs AT 1und1 DOT de>\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "Lokalisierung wählen" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "Ein Datum:" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "Rückgängig" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "Wiederholen" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "Aussschneiden" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "Kopieren" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "Einfügen" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "Löschen" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "Alles auswählen" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "Suchen" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "Weiter suchen" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "Command-Menü (Tastenkürzel)" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "Öffne Farbauswahl" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "Grundfarben" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "Beispielfarben" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "Vorherige Farben" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "Lokalisierungsinformationen:" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "Sprachkennung:" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "Landeskennung:" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "Mittellanges Datumsformat:" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "Mittellanges Datum:" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "Langes Datumsformat:" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "Langes Datum:" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "Vollständiges Datumsformat:" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "Vollständiges Datum:" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "kurzes Zeitformat:" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "Zeit (kurz):" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "Langes Zeitformat:" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "Zeit (lang):" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "Wochenanfang:" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "Format von %1:" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de_AT.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de_AT.po new file mode 100644 index 0000000000..6c61661cea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de_AT.po @@ -0,0 +1,138 @@ +# German (Austria) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de_DE.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de_DE.po new file mode 100644 index 0000000000..dd69a16b34 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/de_DE.po @@ -0,0 +1,138 @@ +# German (Germany) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/en.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/en.po new file mode 100644 index 0000000000..2be1f6dace --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/en.po @@ -0,0 +1,138 @@ +# English +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 11:10+0100\n" +"Language-Team: German <en@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/en_US.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/en_US.po new file mode 100644 index 0000000000..cce67ebe79 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/en_US.po @@ -0,0 +1,138 @@ +# English (US) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/es.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/es.po new file mode 100644 index 0000000000..194372a348 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/es.po @@ -0,0 +1,141 @@ +# Spanish +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2007-01-25 08:03+0100\n" +"Last-Translator: Carsten Rammoser <carsten@rammoser.com>\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "Selecciona localisación:" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "Una fecha:" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "Deshacer" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "Rehacer" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "Cortar" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "Copiar" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "Pegar" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "Borrar" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "Seleccionar todo" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "Búsqueda" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "Buscar otra vez" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "Menú de comando (claves del teclado)" + +#: source/class/showcase/Application.js:948 +#, fuzzy +msgid "Open Color Popup" +msgstr "Abrir ventana de color" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "Colores básicos" + +#: source/class/showcase/Application.js:962 +#, fuzzy +msgid "Template Colors" +msgstr "Colores de fondo" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "Últimos colores" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "Información de la localisación" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "Localisación:" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "Código regional:" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "Formato de fecha mediano:" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "Fecha mediano:" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "Formato de fecha largo:" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "Fecha largo:" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "Formato de fecha completo:" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "Fecha completo:" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "Formato de hora corto:" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "Hora corto:" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "Formato de hora largo:" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "Hora largo:" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "Inicio de semana:" + +#: source/class/showcase/Application.js:1039 +#, fuzzy +msgid "Format of %1:" +msgstr "Formato de %1:" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/es_ES.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/es_ES.po new file mode 100644 index 0000000000..982136d5a2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/es_ES.po @@ -0,0 +1,138 @@ +# Spanish (Spain) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/fr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/fr.po new file mode 100644 index 0000000000..09c3a9565d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/fr.po @@ -0,0 +1,138 @@ +# French +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/fr_FR.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/fr_FR.po new file mode 100644 index 0000000000..cfde15f862 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/fr_FR.po @@ -0,0 +1,138 @@ +# French (France) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 12:54+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:871 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:890 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:917 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:918 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:920 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:923 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:948 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:958 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:984 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1005 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1008 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1011 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1013 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1016 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1018 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1021 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1023 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1026 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1028 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1031 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1033 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1036 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1039 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/it.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/it.po new file mode 100644 index 0000000000..7dcc1edde0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/it.po @@ -0,0 +1,142 @@ +# Italian +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-22 22:06+0100\n" +"Last-Translator: Alessandro Sala <alessandro.sala@mclink.net>\n" +"Language-Team: Italiano <it@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "Scegli una localizzazione:" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "Una data:" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "Annulla" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "Ripeti" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "Taglia" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "Copia" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "Incolla" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "Cancella" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "Seleziona tutto" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "Cerca" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "Carca ancora" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "Menu dei comandi (abbreviazioni da tastiera)" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "Apri il selettore dei colori" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "Colori Base" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "Colori Modello" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "Colori Recenti" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "Informazione sulla localizzazione" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "Localizzazione:" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "Codice del territorio:" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "Formato data medio:" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "Data in formato medio:" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "Formato data lungo:" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "Data in formato lungo:" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "Formato data completo:" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "Data in formato completo:" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "Formato orario breve:" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "Orario in formato breve:" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "Formato orario lungo:" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "Orario in formato lungo:" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "Inizio della settimana:" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "Formato di %1" + +#~ msgid "Locale: " +#~ msgstr "Localizzazione:" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/ru.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/ru.po new file mode 100644 index 0000000000..3273aae25f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/ru.po @@ -0,0 +1,138 @@ +# Russian +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-21 08:25+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/sv.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/sv.po new file mode 100644 index 0000000000..d7b4e79a24 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/sv.po @@ -0,0 +1,138 @@ +# Swedish +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/tr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/tr.po new file mode 100644 index 0000000000..2c70c71517 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/tr.po @@ -0,0 +1,138 @@ +# Turkish +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/zh.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/zh.po new file mode 100644 index 0000000000..37f7df210e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/showcase/source/translation/zh.po @@ -0,0 +1,138 @@ +# Chinese +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo showcase\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:40+0100\n" +"PO-Revision-Date: 2006-12-20 10:58+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: source/class/showcase/Application.js:875 +msgid "Choose a locale: " +msgstr "" + +#: source/class/showcase/Application.js:894 +msgid "A date: " +msgstr "" + +#: source/class/showcase/Application.js:921 +msgid "Undo" +msgstr "" + +#: source/class/showcase/Application.js:922 +msgid "Redo" +msgstr "" + +#: source/class/showcase/Application.js:924 +msgid "Cut" +msgstr "" + +#: source/class/showcase/Application.js:925 +msgid "Copy" +msgstr "" + +#: source/class/showcase/Application.js:926 +msgid "Paste" +msgstr "" + +#: source/class/showcase/Application.js:927 +msgid "Delete" +msgstr "" + +#: source/class/showcase/Application.js:928 +msgid "Select All" +msgstr "" + +#: source/class/showcase/Application.js:930 +msgid "Search" +msgstr "" + +#: source/class/showcase/Application.js:931 +msgid "Search Again" +msgstr "" + +#: source/class/showcase/Application.js:934 +msgid "Command Menu (keyboard shortcuts)" +msgstr "" + +#: source/class/showcase/Application.js:952 +msgid "Open Color Popup" +msgstr "" + +#: source/class/showcase/Application.js:962 +msgid "Basic Colors" +msgstr "" + +#: source/class/showcase/Application.js:966 +msgid "Template Colors" +msgstr "" + +#: source/class/showcase/Application.js:970 +msgid "Recent Colors" +msgstr "" + +#: source/class/showcase/Application.js:988 +msgid "Locale information" +msgstr "" + +#: source/class/showcase/Application.js:1009 +msgid "Locale:" +msgstr "" + +#: source/class/showcase/Application.js:1012 +msgid "Territory code:" +msgstr "" + +#: source/class/showcase/Application.js:1015 +msgid "Date format medium:" +msgstr "" + +#: source/class/showcase/Application.js:1017 +msgid "Date medium:" +msgstr "" + +#: source/class/showcase/Application.js:1020 +msgid "Date format long:" +msgstr "" + +#: source/class/showcase/Application.js:1022 +msgid "Date long:" +msgstr "" + +#: source/class/showcase/Application.js:1025 +msgid "Date format full:" +msgstr "" + +#: source/class/showcase/Application.js:1027 +msgid "Date full:" +msgstr "" + +#: source/class/showcase/Application.js:1030 +msgid "Time format short:" +msgstr "" + +#: source/class/showcase/Application.js:1032 +msgid "Time short:" +msgstr "" + +#: source/class/showcase/Application.js:1035 +msgid "Time format long:" +msgstr "" + +#: source/class/showcase/Application.js:1037 +msgid "Time long:" +msgstr "" + +#: source/class/showcase/Application.js:1040 +msgid "Week start:" +msgstr "" + +#: source/class/showcase/Application.js:1043 +msgid "Format of %1:" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/Makefile new file mode 100644 index 0000000000..32800d03c8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/Makefile @@ -0,0 +1,107 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################ +# BASIC SETTINGS +################################################################################ + +# +# Location of your qooxdoo distribution +# Could be relative from this location or absolute +# +QOOXDOO_PATH = ../../.. + +# +# The same as above, but from the webserver point of view +# Starting point is the application HTML file of the source folder. +# In most cases just add a "/.." compared to above +# +QOOXDOO_URI = ../../../.. + +# +# Namespace of your application e.g. custom +# +APPLICATION_NAMESPACE = webmail + +# +# Titles used in your API viewer and during the build process +# +APPLICATION_MAKE_TITLE = WEBMAIL +APPLICATION_API_TITLE = WebMail + +# +# Additional files (space separated list) +# +APPLICATION_FILES = index.html + +# +# XHTML support +# +APPLICATION_TEMPLATE_INPUT = index.xhtml.tmpl +APPLICATION_TEMPLATE_OUTPUT = index.xhtml + + + + + +################################################################################ +# ADVANCED SETTINGS +################################################################################ + +# +# Enable resource filtering in API viewer +# +APPLICATION_RESOURCE_FILTER = true + +# +# We don't need the full source code +# +APPLICATION_COMPLETE_SOURCE = false + +# +# Disable line breaks +# +APPLICATION_LINEBREAKS_BUILD = false +APPLICATION_LINEBREAKS_SOURCE = false + +# +# qooxdoo.org sync +# +APPLICATION_PUBLISH_PATH = root@qooxdoo.org:/var/www/qooxdoo/demo/$(FRAMEWORK_VERSION)/$(APPLICATION_NAMESPACE) + + + + + +################################################################################ +# INCLUDE CORE +################################################################################ + +ifneq ($(QOOXDOO_PATH),PLEASE_DEFINE_QOOXDOO_PATH) + include $(QOOXDOO_PATH)/frontend/framework/tool/make/targets.mk + include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk +endif + +error: + @echo " * Please configure QOOXDOO_PATH" + +distclean: + @rm -f source/index.xhtml diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/class/webmail/Application.js b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/class/webmail/Application.js new file mode 100644 index 0000000000..e8e1ffb0a8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/class/webmail/Application.js @@ -0,0 +1,147 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.icontheme/16/categories/applications-internet.png) +#embed(qx.icontheme/16/actions/mail.png) +#embed(qx.icontheme/16/actions/system-run.png) +#embed(qx.icontheme/16/apps/accessories-notes.png) + +************************************************************************ */ + + +/** + * A small example how a webmail application can look and feel using qooxdoo. + */ +qx.OO.defineClass("webmail.Application", qx.component.AbstractApplication, +function () { + qx.component.AbstractApplication.call(this); +}); + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.main = function(e) +{ + var doc = qx.ui.core.ClientDocument.getInstance(); + + var dockLayout = new qx.ui.layout.DockLayout; + + dockLayout.setLocation(0, 0); + dockLayout.setDimension(800, 600); + dockLayout.setBackgroundColor("white"); + + doc.add(dockLayout); + + var menubar = new qx.ui.menubar.MenuBar; + var toolbar = new qx.ui.toolbar.ToolBar; + var tree = new qx.ui.tree.Tree("Inbox"); + var status = new qx.ui.basic.Atom("Status", "icon/16/categories/applications-internet.png"); + + tree.setWidth(200); + tree.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + tree.add(new qx.ui.tree.TreeFolder("Drafts")); + tree.add(new qx.ui.tree.TreeFolder("Sent")); + tree.add(new qx.ui.tree.TreeFolder("Trash")); + tree.add(new qx.ui.tree.TreeFolder("Junk")); + + status.setWidth(null); + status.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + status.setHorizontalChildrenAlign("left"); + status.setPadding(2, 4); + status.setBackgroundColor("threedface"); + + dockLayout.addTop(menubar); + dockLayout.addTop(toolbar); + dockLayout.addBottom(status); + dockLayout.addLeft(tree); + + + + var btns = [ + { text : "New", icon : "icon/16/actions/mail.png" }, + { text : "Send/Receive", icon : "icon/16/actions/system-run.png" }, + { text : "Adressbook", icon : "icon/16/apps/accessories-notes.png" } + ]; + + for (var i=0; i<btns.length; i++) { + toolbar.add(new qx.ui.toolbar.Button(btns[i].text, btns[i].icon)); + }; + + + + var filemnu = new qx.ui.menu.Menu; + var editmnu = new qx.ui.menu.Menu; + var optimnu = new qx.ui.menu.Menu; + var helpmnu = new qx.ui.menu.Menu; + + filemnu.add(new qx.ui.menu.Button("New Mail")); + filemnu.add(new qx.ui.menu.Button("Exit")); + + editmnu.add(new qx.ui.menu.Button("Cut")); + editmnu.add(new qx.ui.menu.Button("Copy")); + editmnu.add(new qx.ui.menu.Button("Paste")); + + optimnu.add(new qx.ui.menu.Button("View")); + optimnu.add(new qx.ui.menu.Button("Settings")); + + helpmnu.add(new qx.ui.menu.Button("Help")); + helpmnu.add(new qx.ui.menu.Button("About")); + + var filemn = new qx.ui.menubar.Button("File", filemnu); + var editmn = new qx.ui.menubar.Button("Edit", editmnu); + var optimn = new qx.ui.menubar.Button("Options", optimnu); + var helpmn = new qx.ui.menubar.Button("Help", helpmnu); + + menubar.add(filemn, editmn, optimn, new qx.ui.basic.HorizontalSpacer, helpmn); + doc.add(filemnu, editmnu, optimnu, helpmnu); + + + + var ld = []; + var lt = [ "Image", "Text", "PDF", "Illustration", "Document" ]; + + for (var i=0, t; i<333; i++) + { + t=Math.round(Math.random()*4); + ld.push({ subject : { text : "Subject " + i }, from : { text : "qooxdoo User" }, date : { text : "01/26/2006" }}); + }; + + var lc = + { + subject : { label : "Subject", width : 200, type : "text" }, + from : { label : "From", width : 100, type : "text" }, + date: { label : "Date", width : 100, type : "text" } + }; + + var view = new qx.ui.listview.ListView(ld, lc); + + view.setLocation(200, 47); + view.setDimension(600, 530); + view.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + + doc.add(view); +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/index.html b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/index.html new file mode 100644 index 0000000000..0eb9df08b4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/index.html @@ -0,0 +1,15 @@ +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Web Mail</title> + <script type="text/javascript" src="script/webmail.js"></script> + </head> + <body> + <script type="text/javascript"> + if (!qx.IS_SOURCE) { + qx.log.Logger.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_ERROR); + } + qx.core.Init.getInstance().setApplication(webmail.Application); + </script> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/index.xhtml.tmpl b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/index.xhtml.tmpl new file mode 100644 index 0000000000..9eadf1c666 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/index.xhtml.tmpl @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>qooxdoo » Demo » Web Mail</title> + <!-- qooxdoo-script-block --> + </head> + <body> + <script type="text/javascript"> + if (!qx.IS_SOURCE) { + qx.log.Logger.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_ERROR); + } + qx.core.Init.getInstance().setApplication(webmail.Application); + </script> + </body> +</html> diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/C.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/C.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/C.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/de.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/de.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/de.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/en.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/en.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/en.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/es.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/es.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/es.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/fr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/fr.po new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/application/webmail/source/translation/fr.po diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/Makefile b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/Makefile new file mode 100644 index 0000000000..862fe6fcbf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/Makefile @@ -0,0 +1,44 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +all: + @echo + @echo "****************************************************************************" + @echo " GENERATING FRAMEWORK" + @echo "****************************************************************************" + @echo "" + @echo " WARNING" + @echo "----------------------------------------------------------------------------" + @echo " * Generating the framework itself, which used to create a qx.js file" + @echo " combining all framework classes, is no longer supported." + @echo + @echo ' Please use the powerful yet easy-to-use "skeletons" as a starting point' + @echo " for your custom application development." + @echo + @echo " http://qooxdoo.org/documentation/user_manual/skeleton" + +source: all +build: all +api: all +pretty: all +fix: all +clean: all +distclean: all diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/Locale.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/Locale.js new file mode 100644 index 0000000000..02921da4d8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/Locale.js @@ -0,0 +1,99 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.Locale", +{ + /** {var} TODOC */ + _registry : {}, + + /** + * Locale definition + * + * Example: + * <pre><code> + * qx.Locale.define("fullname", + * { + * "msgId": "msgText", + * ... + * }); + * </code></pre> + * + * @type static + * @name define + * @access public + * @param fullname {String} name of the mixin + * @param definition {Map} definition structure + * @return {void} + */ + define : function(fullname, definition) + { + var vSplitName = fullname.split("."); + var vLength = vSplitName.length; + var vParentPackage = window; + var vPartName = vSplitName[0]; + + for (var i=0, l=vSplitName.length - 1; i<l; i++) + { + if (!vParentPackage[vPartName]) { + vParentPackage[vPartName] = {}; + } + + vParentPackage = vParentPackage[vPartName]; + vPartName = vSplitName[i + 1]; + } + + vParentPackage[vPartName] = definition; + qx.locale.Manager.getInstance().addTranslation(vPartName, definition); + + qx.Locale._registry[fullname] = definition; + }, + + /** + * Returns a locale by name + * + * @type static + * @name byName + * @access public + * @param fullname {String} locale name to check + * @return {Object ? void} locale object + */ + byName : function(fullname) { + return qx.Locale._registry[fullname]; + }, + + /** + * Determine if locale exists + * + * @type static + * @name isDefined + * @access public + * @param fullname {String} locale name to check + * @return {Boolean} true if locale exists + */ + isDefined : function(fullname) { + return qx.Locale.byName(fullname) !== undefined; + } +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/OO.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/OO.js new file mode 100644 index 0000000000..47eb74783e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/OO.js @@ -0,0 +1,746 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#id(qx.OO) +#module(core) +#after(qx.Settings) +#load(qx.lang.Core) +#load(qx.lang.Function) +#optional(qx.event.type.DataEvent) + +************************************************************************ */ + +// Usage of this hacky construct to make qx.OO available inside the API viewer +qx.OO = {}; +qx.OO.defineClass = function() {}; +qx.Class = qx.OO; +qx.OO.defineClass("qx.OO"); + +qx.Class.classes = {}; +qx.Class.setter = {}; +qx.Class.getter = {}; +qx.Class.resetter = {}; +qx.Class.values = {}; +qx.Class.propertyNumber = 0; + + + + +/* +--------------------------------------------------------------------------- + DEFINE CLASS IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +/** + * define a new qooxdoo class + * All classes should be defined in this way. + * + * @param vClassName {String} fully qualified class name (e.g. "qx.ui.form.Button") + * @param vSuper {Object} super class + * @param vConstructor {Function} the constructor of the new class + */ +qx.Class.defineClass = function(vClassName, vSuper, vConstructor) +{ + var vSplitName = vClassName.split("."); + var vNameLength = vSplitName.length-1; + var vTempObject = window; + + // Setting up namespace + for (var i=0; i<vNameLength; i++) + { + if (typeof vTempObject[vSplitName[i]] === "undefined") { + vTempObject[vSplitName[i]] = {}; + } + + vTempObject = vTempObject[vSplitName[i]]; + } + + // Instantiate objects/inheritance + if (typeof vSuper === "undefined") + { + if (typeof vConstructor !== "undefined") { + throw new Error("SuperClass is undefined, but constructor was given for class: " + vClassName); + } + + qx.Class = vTempObject[vSplitName[i]] = {}; + qx.Proto = null; + qx.Super = null; + } + else if (typeof vConstructor === "undefined") + { + qx.Class = vTempObject[vSplitName[i]] = vSuper; + qx.Proto = null; + qx.Super = vSuper; + } + else + { + qx.Class = vTempObject[vSplitName[i]] = vConstructor; + + // build helper function + // this omits the initial constructor call while inherit properties + var vHelperConstructor = function() {}; + vHelperConstructor.prototype = vSuper.prototype; + qx.Proto = vConstructor.prototype = new vHelperConstructor; + + qx.Super = vConstructor.superclass = vSuper; + + qx.Proto.classname = vConstructor.classname = vClassName; + qx.Proto.constructor = vConstructor; + } + + // Store reference to global classname registry + qx.OO.classes[vClassName] = qx.Class; +} + + + + + + +/* +--------------------------------------------------------------------------- + OBJECT PROPERTY EXTENSION +--------------------------------------------------------------------------- +*/ + +qx.Class.addFastProperty = function(vConfig) +{ + var vName = vConfig.name; + var vUpName = qx.lang.String.toFirstUp(vName); + + var vStorageField = "_value" + vUpName; + var vGetterName = "get" + vUpName; + var vSetterName = "set" + vUpName; + var vComputerName = "_compute" + vUpName; + + qx.Proto[vStorageField] = typeof vConfig.defaultValue !== "undefined" ? vConfig.defaultValue : null; + + if (vConfig.noCompute) + { + qx.Proto[vGetterName] = function() { + return this[vStorageField]; + } + } + else + { + qx.Proto[vGetterName] = function() { + return this[vStorageField] == null ? this[vStorageField] = this[vComputerName]() : this[vStorageField]; + } + } + + if (vConfig.setOnlyOnce) + { + qx.Proto[vSetterName] = function(vValue) + { + this[vStorageField] = vValue; + this[vSetterName] = null; + + return vValue; + } + } + else + { + qx.Proto[vSetterName] = function(vValue) { + return this[vStorageField] = vValue; + } + } + + if (!vConfig.noCompute) + { + qx.Proto[vComputerName] = function() { + return null; + } + } +} + +qx.OO.addCachedProperty = function(p) +{ + var vName = p.name; + var vUpName = qx.lang.String.toFirstUp(vName); + + var vStorageField = "_cached" + vUpName; + var vComputerName = "_compute" + vUpName; + var vChangeName = "_change" + vUpName; + + if (typeof p.defaultValue !== "undefined") { + qx.Proto[vStorageField] = p.defaultValue; + } + + qx.Proto["get" + vUpName] = function() + { + if (this[vStorageField] == null) { + this[vStorageField] = this[vComputerName](); + } + + return this[vStorageField]; + } + + qx.Proto["_invalidate" + vUpName] = function() + { + if (this[vStorageField] != null) + { + this[vStorageField] = null; + + if (p.addToQueueRuntime) { + this.addToQueueRuntime(p.name); + } + } + } + + qx.Proto["_recompute" + vUpName] = function() + { + var vOld = this[vStorageField]; + var vNew = this[vComputerName](); + + if (vNew != vOld) + { + this[vStorageField] = vNew; + this[vChangeName](vNew, vOld); + + return true; + } + + return false; + } + + qx.Proto[vChangeName] = function(vNew, vOld) {}; + qx.Proto[vComputerName] = function() { return null; }; +} + +qx.Class.addPropertyGroup = function(p) +{ + /* -------------------------------------------------------------------------------- + PRE-CHECKS + -------------------------------------------------------------------------------- */ + if(typeof p !== "object") { + throw new Error("Param should be an object!"); + } + + if (typeof p.name != "string") { + throw new Error("Malformed input parameters: name needed!"); + } + + if (typeof p.members != "object") { + throw new Error("Malformed input parameters: members needed!"); + } + + p.method = qx.lang.String.toFirstUp(p.name); + + + /* -------------------------------------------------------------------------------- + CACHING + -------------------------------------------------------------------------------- */ + p.getter = []; + p.setter = []; + + for (var i=0, l=p.members.length; i<l; i++) { + p.setter.push("set" + qx.lang.String.toFirstUp(p.members[i])); + } + + for (var i=0, l=p.members.length; i<l; i++) { + p.getter.push("get" + qx.lang.String.toFirstUp(p.members[i])); + } + + + /* -------------------------------------------------------------------------------- + GETTER + -------------------------------------------------------------------------------- */ + qx.Proto["get" + p.method] = function() + { + var a = []; + var g = p.getter; + + for (var i=0, l=g.length; i<l; i++) { + a.push(this[g[i]]()); + } + + return a; + }; + + + /* -------------------------------------------------------------------------------- + SETTER + -------------------------------------------------------------------------------- */ + switch(p.mode) + { + case "shorthand": + qx.Proto["set" + p.method] = function() + { + if (arguments.length > 4 || arguments.length == 0) { + throw new Error("Invalid number of arguments for property " + p.name + ": " + arguments); + } + + try + { + var ret = qx.lang.Array.fromShortHand(qx.lang.Array.fromArguments(arguments)); + } + catch(ex) + { + throw new Error("Invalid shorthand values for property " + p.name + ": " + arguments + ": " + ex); + } + + var s = p.setter; + var l = s.length; + + for (var i=0; i<l; i++) { + this[s[i]](ret[i]); + } + }; + break; + + default: + qx.Proto["set" + p.method] = function() + { + var s = p.setter; + var l = s.length; + + if (arguments.length != l) { + throw new Error("Invalid number of arguments (needs: " + l + ", is: " + arguments.length + ") for property " + p.name + ": " + qx.lang.Array.fromArguments(arguments).toString()); + } + + for (var i=0; i<l; i++) { + this[s[i]](arguments[i]); + } + }; + } +} + +qx.Class.removeProperty = function(p) +{ + if (typeof qx.Proto._properties !== "string") { + throw new Error("Has no properties!"); + } + + if(typeof p !== "object") { + throw new Error("Param should be an object!"); + } + + if (typeof p.name !== "string") { + throw new Error("Malformed input parameters: name needed!"); + } + + // building shorter prototype access + var pp = qx.Proto; + + p.method = qx.lang.String.toFirstUp(p.name); + p.implMethod = p.impl ? qx.lang.String.toFirstUp(p.impl) : p.method; + + var valueKey = "_value" + p.method; + + // Remove property from list + pp._properties = qx.lang.String.removeListItem(pp._properties, p.name); + + // Reset default value to null + pp[valueKey] = null; + + // Reset methods + pp["get" + p.method] = null; + pp["set" + p.method] = null; + pp["reset" + p.method] = null; + pp["apply" + p.method] = null; + pp["force" + p.method] = null; + pp["getDefault" + p.method] = null; + pp["setDefault" + p.method] = null; +} + +qx.Class._createProperty = function(p) +{ + if(typeof p !== "object") { + throw new Error("AddProperty: Param should be an object!"); + } + + if (typeof p.name !== "string") { + throw new Error("AddProperty: Malformed input parameters: name needed!"); + } + + // building shorter prototype access + var pp = qx.Proto; + + p.method = qx.lang.String.toFirstUp(p.name); + p.implMethod = p.impl ? qx.lang.String.toFirstUp(p.impl) : p.method; + + if (p.defaultValue == undefined) { + p.defaultValue = null; + } + + p.allowNull = p.allowNull !== false; + p.allowMultipleArguments = p.allowMultipleArguments === true; + + + + + + + if (typeof p.type === "string") { + p.hasType = true; + } + else if (typeof p.type !== "undefined") { + throw new Error("AddProperty: Invalid type definition for property " + p.name + ": " + p.type); + } + else { + p.hasType = false; + } + + if (typeof p.instance === "string") { + p.hasInstance = true; + } + else if (typeof p.instance !== "undefined") { + throw new Error("AddProperty: Invalid instance definition for property " + p.name + ": " + p.instance); + } + else { + p.hasInstance = false; + } + + if (typeof p.classname === "string") { + p.hasClassName = true; + } + else if (typeof p.classname !== "undefined") { + throw new Error("AddProperty: Invalid classname definition for property " + p.name + ": " + p.classname); + } + else { + p.hasClassName = false; + } + + + + + + + p.hasConvert = p.convert != null; + p.hasPossibleValues = p.possibleValues != null; + p.hasUnitDetection = p.unitDetection != null; + + p.addToQueue = p.addToQueue || false; + p.addToQueueRuntime = p.addToQueueRuntime || false; + + // upper-case name + p.up = p.name.toUpperCase(); + + // register global uppercase name + qx.OO["PROPERTY_" + p.up] = p.name; + + var valueKey = "_value" + p.method; + var evalKey = "_eval" + p.method; + var changeKey = "change" + p.method; + var modifyKey = "_modify" + p.implMethod; + var checkKey = "_check" + p.implMethod; + + if (!qx.OO.setter[p.name]) + { + qx.OO.setter[p.name] = "set" + p.method; + qx.OO.getter[p.name] = "get" + p.method; + qx.OO.resetter[p.name] = "reset" + p.method; + qx.OO.values[p.name] = valueKey; + } + + // unit detection support + if (p.hasUnitDetection) + { + // computed unit + var cu = "_computed" + p.method; + pp[cu + "Value"] = null; + pp[cu + "Parsed"] = null; + pp[cu + "Type"] = null; + pp[cu + "TypeNull"] = true; + pp[cu + "TypePixel"] = false; + pp[cu + "TypePercent"] = false; + pp[cu + "TypeAuto"] = false; + pp[cu + "TypeFlex"] = false; + + var unitDetectionKey = "_unitDetection" + qx.lang.String.toFirstUp(p.unitDetection); + } + + // apply default value + pp[valueKey] = p.defaultValue; + + // building getFoo(): Returns current stored value + pp["get" + p.method] = function() { + return this[valueKey]; + }; + + // building forceFoo(): Set (override) without do anything else + pp["force" + p.method] = function(newValue) { + return this[valueKey] = newValue; + }; + + // building resetFoo(): Reset value to default value + pp["reset" + p.method] = function() { + return this["set" + p.method](p.defaultValue); + }; + + // building toggleFoo(): Switching between two boolean values + if (p.type === "boolean") + { + pp["toggle" + p.method] = function(newValue) { + return this["set" + p.method](!this[valueKey]); + }; + } + + if (p.allowMultipleArguments || p.hasConvert || p.hasInstance || p.hasClassName || p.hasPossibleValues || p.hasUnitDetection || p.addToQueue || p.addToQueueRuntime || p.addToStateQueue) + { + // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ... + pp["set" + p.method] = function(newValue) + { + // convert multiple arguments to array + if (p.allowMultipleArguments && arguments.length > 1) { + newValue = qx.lang.Array.fromArguments(arguments); + } + + // support converter methods + if (p.hasConvert) + { + try + { + newValue = p.convert.call(this, newValue, p); + } + catch(ex) + { + throw new Error("Attention! Could not convert new value for " + p.name + ": " + newValue + ": " + ex); + } + } + + var oldValue = this[valueKey]; + + if (newValue === oldValue) { + return newValue; + } + + if (!(p.allowNull && newValue == null)) + { + if (p.hasType && typeof newValue !== p.type) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be typeof \"" + p.type + "\" but is typeof \"" + typeof newValue + "\"!", new Error()); + } + + if (p.hasInstance && !(newValue instanceof qx.OO.classes[p.instance])) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an instance of \"" + p.instance + "\"!", new Error()); + } + + if (p.hasClassName && newValue.classname != p.classname) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be an object with the classname \"" + p.classname + "\"!", new Error()); + } + + if (p.hasPossibleValues && newValue != null && !qx.lang.Array.contains(p.possibleValues, newValue)) { + return this.error("Failed to save value for " + p.name + ". '" + newValue + "' is not a possible value!", new Error()); + } + } + + // Allow to check and transform the new value before storage + if (this[checkKey]) + { + try + { + newValue = this[checkKey](newValue, p); + + // Don't do anything if new value is indentical to old value + if (newValue === oldValue) { + return newValue; + } + } + catch(ex) + { + return this.error("Failed to check property " + p.name, ex); + } + } + + // Store new value + this[valueKey] = newValue; + + // Check if there is a modifier implementation + if (this[modifyKey]) + { + try + { + var r = this[modifyKey](newValue, oldValue, p); + if (!r) { + return this.error("Modification of property \"" + p.name + "\" failed without exception (" + r + ")", new Error()); + } + } + catch(ex) + { + return this.error("Modification of property \"" + p.name + "\" failed with exception", ex); + } + } + + // Unit detection support + if (p.hasUnitDetection) { + this[unitDetectionKey](p, newValue); + } + + // Auto queue addition support + if (p.addToQueue) { + this.addToQueue(p.name); + } + else if (p.addToQueueRuntime) { + this.addToQueueRuntime(p.name); + } + + // Auto state queue addition support + if (p.addToStateQueue) { + this.addToStateQueue(); + } + + // Create Event + if (this.hasEventListeners && this.hasEventListeners(changeKey)) + { + try + { + this.createDispatchDataEvent(changeKey, newValue); + } + catch(ex) + { + throw new Error("Property " + p.name + " modified: Failed to dispatch change event: " + ex); + } + } + + return newValue; + }; + } + else + { + // building setFoo(): Setup new value, do type and change detection, converting types, call unit detection, ... + pp["set" + p.method] = function(newValue) + { + // this.debug("Fast Setter: " + p.name); + + var oldValue = this[valueKey]; + + if (newValue === oldValue) { + return newValue; + } + + if (!(p.allowNull && newValue == null)) + { + if (p.hasType && typeof newValue !== p.type) { + return this.error("Attention! The value \"" + newValue + "\" is an invalid value for the property \"" + p.name + "\" which must be typeof \"" + p.type + "\" but is typeof \"" + typeof newValue + "\"!", new Error()); + } + } + + // Allow to check and transform the new value before storage + if (this[checkKey]) + { + try + { + newValue = this[checkKey](newValue, p); + + // Don't do anything if new value is indentical to old value + if (newValue === oldValue) { + return newValue; + } + } + catch(ex) + { + return this.error("Failed to check property " + p.name, ex); + } + } + + // Store new value + this[valueKey] = newValue; + + // Check if there is a modifier implementation + if (this[modifyKey]) + { + try + { + var r = this[modifyKey](newValue, oldValue, p); + if (!r) { + var valueStr = new String(newValue).substring(0, 50); + return this.error("Setting property \"" + p.name + "\" to \"" + valueStr + "\" failed without exception (" + r + ")", new Error()); + } + } + catch(ex) + { + var valueStr = new String(newValue).substring(0, 50); + return this.error("Setting property \"" + p.name + "\" to \"" + valueStr + "\" failed with exception", ex); + } + } + + // Create Event + if (this.hasEventListeners && this.hasEventListeners(changeKey)) + { + var vEvent = new qx.event.type.DataEvent(changeKey, newValue, oldValue, false); + + vEvent.setTarget(this); + + try + { + this.dispatchEvent(vEvent, true); + } + catch(ex) + { + throw new Error("Property " + p.name + " modified: Failed to dispatch change event: " + ex); + } + } + + return newValue; + }; + } + + // building user configured get alias for property + if (typeof p.getAlias === "string") { + pp[p.getAlias] = pp["get" + p.method]; + } + + // building user configured set alias for property + if (typeof p.setAlias === "string") { + pp[p.setAlias] = pp["set" + p.method]; + } +} + +qx.Class.changeProperty = qx.OO._createProperty; + +qx.Class.addProperty = function(p) +{ + qx.OO.propertyNumber++; + + qx.OO._createProperty(p); + + // add property to (all) property list + if (typeof qx.Proto._properties !== "string") { + qx.Proto._properties = p.name; + } else { + qx.Proto._properties += "," + p.name; + } + + // add property to object property list + switch(p.type) + { + case undefined: + case "object": + case "function": + if (typeof qx.Proto._objectproperties !== "string") { + qx.Proto._objectproperties = p.name; + } else { + qx.Proto._objectproperties += "," + p.name; + } + } +} + +qx.Class.inheritField = function(vField, vData) +{ + qx.lang.Object.carefullyMergeWith(vData, qx.Super.prototype[vField]); + qx.Proto[vField] = vData; +} + +qx.Class.isAvailable = function(vClassName) { + return qx.OO.classes[vClassName] != null; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/Settings.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/Settings.js new file mode 100644 index 0000000000..ca4c6a56e0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/Settings.js @@ -0,0 +1,169 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#id(qx.Settings) +#module(core) + +************************************************************************ */ + + + +/* +--------------------------------------------------------------------------- + CREATE NAMESPACE HIERARCHY +--------------------------------------------------------------------------- +*/ + +if (!window.qx) { + qx = {}; +} + +if (!qx.Settings) { + qx.Settings = {}; +} + +if (!qx.Settings._customSettings) { + qx.Settings._customSettings = {}; +} + +/** the default settings */ +qx.Settings._defaultSettings = {}; + + + + +/* +--------------------------------------------------------------------------- + ATTACH GLOBAL DATA +--------------------------------------------------------------------------- +*/ + +qx._LOADSTART = (new Date).valueOf(); + + + + + + +/* +--------------------------------------------------------------------------- + UTILITES METHODS +--------------------------------------------------------------------------- +*/ + +qx.Settings.substitute = function(vTemplate) +{ + if (typeof vTemplate !== "string") { + return vTemplate; + } + + return vTemplate.replace(/\%\{(.+)\}/g, function(vMatch, vKey) { + return eval(vKey); + }); +}; + + + + + + +/* +--------------------------------------------------------------------------- + ACCESS METHODS +--------------------------------------------------------------------------- +*/ + +qx.Settings.getValue = function(vKey) { + return qx.Settings.getValueOfClass(qx.Class.classname, vKey); +} + +qx.Settings.getValueOfClass = function(vClassName, vKey) +{ + var vCustomObject = qx.Settings._customSettings[vClassName]; + if (vCustomObject && vCustomObject[vKey] != null) { + return vCustomObject[vKey]; + } + + var vDefaultObject = qx.Settings._defaultSettings[vClassName]; + if (vDefaultObject && vDefaultObject[vKey] != null) { + return vDefaultObject[vKey]; + } + + return null; +} + +qx.Settings.setDefault = function(vKey, vValue) { + return qx.Settings.setDefaultOfClass(qx.Class.classname, vKey, vValue); +} + +qx.Settings.setDefaultOfClass = function(vClassName, vKey, vValue) +{ + var vDefaultObject = qx.Settings._defaultSettings[vClassName]; + + if (!vDefaultObject) { + vDefaultObject = qx.Settings._defaultSettings[vClassName] = {}; + } + + // default values doesn't support substitution + vDefaultObject[vKey] = vValue; +} + +qx.Settings.setCustom = function(vKey, vValue) { + return qx.Settings.setCustomOfClass(qx.Class.classname, vKey, vValue); +} + +qx.Settings.setCustomOfClass = function(vClassName, vKey, vValue) +{ + var vCustomObject = qx.Settings._customSettings[vClassName]; + + if (!vCustomObject) { + vCustomObject = qx.Settings._customSettings[vClassName] = {}; + } + + vCustomObject[vKey] = qx.Settings.substitute(vValue); +} + + + + + + + +/* +--------------------------------------------------------------------------- + IMPORT VARIABLES OF CUSTOM SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.init = function() +{ + for (var vClass in qx.Settings._customSettings) + { + var vSettings = qx.Settings._customSettings[vClass]; + + for (var vKey in vSettings) { + qx.Settings.setCustomOfClass(vClass, vKey, vSettings[vKey]); + } + } +} + +qx.Settings.init(); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/Command.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/Command.js new file mode 100644 index 0000000000..d7026203f9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/Command.js @@ -0,0 +1,349 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.locale.Key) + +************************************************************************ */ + +/** + * This contains a command with shortcut. + * + * Each command could be assigned to multiple widgets. + * + * @event execute {qx.event.type.DataEvent} when the command is executed. Sets the + * "data" property of the event to the object that issued the command. + * + * @param vShortcut {String} shortcuts can be composed of optional modifier + * keys Control, Alt, Shift, Meta and a non modifier key. + * If no non modifier key is specified, the second paramater is evaluated. + * The key must be seperated by a <code>+</code> or <code>-</code> character. + * Examples: Alt+F1, Control+C, Control+Alt+Enf + * + * @param vKeyCode {Integer} Additional key of the command interpreted as a keyCode. + */ +qx.OO.defineClass("qx.client.Command", qx.core.Target, +function(vShortcut, vKeyCode) +{ + qx.core.Target.call(this); + + this._modifier = {}; + this._key = null; + + if (vShortcut != null) { + this.setShortcut(vShortcut); + } + + if (vKeyCode != null) + { + this.warn("The use of keyCode in command is deprecated. Use keyIdentifier instead."); + this.setKeyCode(vKeyCode); + } + + // OSX warning for Alt key combinations + if (this._modifier.Alt && this._key && this._key.length == 1) { + if ( + (this._key >= "A" && this._key <= "Z") || + (this._key >= "0" && this._key <= "9") + ) { + this.warn("A shortcut containing Alt and a letter or number will not work under OS X!"); + } + } + qx.event.handler.EventHandler.getInstance().addCommand(this); +}); + + +/** the command shortcut */ +qx.OO.addProperty({ name : "shortcut", type : "string" }); + +/** + * keyCode + * @deprecated + * + * Still there for compatibility with the old key handler/commands + */ +qx.OO.addProperty({ name : "keyCode", type : "number" }); + +/** KeyIdentifier */ +qx.OO.addProperty({ name : "keyIdentifier", type : "string" }); + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Fire the "execute" event on this command. + * + * @param vTarget {Object} Object which issued the execute event + */ +qx.Proto.execute = function(vTarget) +{ + if (this.hasEventListeners("execute")) { + var event = new qx.event.type.DataEvent("execute", vTarget); + this.dispatchEvent(event, true); + } + + return false; +}; + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyShortcut = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._modifier = {}; + this._key = null; + + // split string to get each key which must be pressed + // build a hash with active keys + var a = propValue.split(/[-+\s]+/); + var al = a.length; + + for (var i=0; i<al; i++) + { + var identifier = this._oldKeyNameToKeyIdentifier(a[i]); + + switch (identifier) + { + case "Control": + case "Shift": + case "Meta": + case "Alt": + this._modifier[identifier] = true; + break; + + case "Unidentified": + var msg = "Not a valid key name for a command: " + a[i]; + this.error(msg); + throw msg; + + default: + if (this._key) { + var msg = "You can only specify one non modifier key!"; + this.error(msg); + throw msg; + } + this._key = identifier; + } + } + } + return true; +}; + + + +/* +-------------------------------------------------------------------------- + INTERNAL MATCHING LOGIC +--------------------------------------------------------------------------- +*/ + +/** + * Checks wether the given key event matches the command's shortcut + * + * @param e {qx.event.type.KeyEvent} the key event object + * @return {Boolean} wether the commands shortcut matches the key event + */ +qx.Proto._matchesKeyEvent = function(e) +{ + var key = this._key || this.getKeyIdentifier(); + if (!key && !this.getKeyCode()) { + // no shortcut defined. + return; + } + + // pre-check for check special keys + // we handle this here to omit to check this later again. + if ( + (this._modifier.Shift && !e.isShiftPressed()) || + (this._modifier.Control && !e.isCtrlPressed()) || +// (this._modifier.Meta && !e.getMetaKey()) || + (this._modifier.Alt && !e.isAltPressed()) + ) { + return false; + } + + if (key) + { + if (key == e.getKeyIdentifier()) { + return true; + } + } + else + { + if (this.getKeyCode() == e.getKeyCode()) { + return true; + } + } + + return false; +}; + + +/* +--------------------------------------------------------------------------- + COMPATIBILITY TO COMMAND +--------------------------------------------------------------------------- +*/ + +qx.Proto._oldKeyNameToKeyIdentifierMap = +{ + // all other keys are converted by converting the first letter to uppercase + + esc : "Escape", + ctrl : "Control", + print : "PrintScreen", + del : "Delete", + pageup : "PageUp", + pagedown : "PageDown", + numlock : "NumLock", + numpad_0 : "0", + numpad_1 : "1", + numpad_2 : "2", + numpad_3 : "3", + numpad_4 : "4", + numpad_5 : "5", + numpad_6 : "6", + numpad_7 : "7", + numpad_8 : "8", + numpad_9 : "9", + numpad_divide : "/", + numpad_multiply : "*", + numpad_minus : "-", + numpad_plus : "+" +}; + + +/** + * converts an old key name as found in {@link qx.event.type.KeyEvent.keys} to + * the new keyIdentifier. + * + * @param keyName {String} old name of the key. + * @return {String} corresponding keyIdentifier or "Unidentified" if a conversion was not possible + */ +qx.Proto._oldKeyNameToKeyIdentifier = function(keyName) +{ + var keyHandler = qx.event.handler.KeyEventHandler.getInstance(); + var keyIdentifier = "Unidentified"; + + if (keyHandler.isValidKeyIdentifier(keyName)) { + return keyName; + } + + if (keyName.length == 1 && keyName >= "a" && keyName <= "z") { + return keyName.toUpperCase(); + } + + keyName = keyName.toLowerCase(); + + // check wether its a valid old key name + if (!qx.event.type.KeyEvent.keys[keyName]) { + return "Unidentified"; + } + + var keyIdentifier = this._oldKeyNameToKeyIdentifierMap[keyName]; + if (keyIdentifier) { + return keyIdentifier; + } else { + return qx.lang.String.toFirstUp(keyName); + } +}; + + +/* +--------------------------------------------------------------------------- + STRING CONVERTION +--------------------------------------------------------------------------- +*/ + +/** + * Returns the shortcut as string + * + * @return {String} shortcut + */ +qx.Proto.toString = function() +{ + //var vShortcut = this.getShortcut(); + var vKeyCode = this.getKeyCode(); + var key = this._key || this.getKeyIdentifier(); + + var vString = []; + + for (var modifier in this._modifier) { + vString.push(qx.locale.Key.getKeyName("short", modifier)); + } + + if (key) { + vString.push(qx.locale.Key.getKeyName("short", key)); + } + /* + if (vShortcut != null) { + vString.push(vShortcut); + } + */ + if (vKeyCode != null) + { + var vTemp = qx.event.type.KeyEvent.codes[vKeyCode]; + vString.push(vTemp ? qx.lang.String.toFirstUp(vTemp) : String(vKeyCode)); + } + + return vString.join("-"); +}; + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Destructor + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._shortcutParts = null; + + var vMgr = qx.event.handler.EventHandler.getInstance(); + if (vMgr) { + vMgr.removeCommand(this); + } + + return qx.core.Target.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/History.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/History.js new file mode 100644 index 0000000000..3cc8004d46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/History.js @@ -0,0 +1,139 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.manager.object.AliasManager) +#embed(qx.static/history/historyHelper.html) + +************************************************************************ */ + +/** + * A helper for using the browser history in JavaScript Applications without + * reloading the main page. + * <p> + * Adds entries to the browser history and fires a "request" event when one of + * the entries was requested by the user (e.g. by clicking on the back button). + * </p> + * + * @event request {qx.event.type.DataEvent} Fired when the user moved in the + * history. The data property of the event holds the command, which was + * passed to {@link #addToHistory}. + */ +qx.OO.defineClass("qx.client.History", qx.core.Target, +function() { + qx.core.Target.call(this); + + this._pageFlag = true; +}); + + +/** + * Initializes the History. This method has to called by applications using this + * class once during initialization. Subsequent calls have no (negative) effect. + */ +qx.Proto.init = function() { + if (this._iframe == null) { + this._iframe = document.createElement("iframe"); + this._iframe.style.visibility = "hidden"; + document.body.appendChild(this._iframe); + } +} + + +/** + * Adds an entry to the browser history. + * + * @param command {String} a string representing the old state of the + * application. This command will be delivered in the data property of + * the "request" event. + * @param newTitle {String ? null} the page title to set after the history entry + * is done. This title should represent the new state of the application. + */ +qx.Proto.addToHistory = function(command, newTitle) { + if (command == this._currentCommand) { + document.title = newTitle; + } else { + if (this._iframe == null) { + throw new Error("You have to call init first!"); + } + + this._pageFlag = !this._pageFlag; + this._currentCommand = command; + this._newTitle = newTitle; + + // NOTE: We need the command attribute to enforce a loading of the page + // (Otherwise we don't get an onload event). + // The browser will still cache commands loaded once. + // Without the onload-problem anchors would work, too. + // (Anchors would have the advantage that the helper is only loaded once) + this._iframe.src = this.getSetting("helperFile") + "?c=" + command; + } +} + + +/** + * Event handler. Called when the history helper page was loaded. + * + * @param location {Map} the location property of the window object of the + * helper page. + */ +qx.Proto._onHistoryLoad = function(location) +{ + try { + var equalsPos = location.search.indexOf("="); + var command = location.search.substring(equalsPos + 1); + + if (this._newTitle) { + document.title = this._newTitle; + this._newTitle = null; + } + + if (command != this._currentCommand) { + this._currentCommand = command; + + this.createDispatchDataEvent("request", command); + } + } catch (exc) { + this.error("Handling history load failed", exc); + } + + qx.ui.core.Widget.flushGlobalQueues(); +} + + +/** The URL to the helper page. */ +qx.Settings.setDefault("helperFile", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "staticUri") + "/history/historyHelper.html"); + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/NativeWindow.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/NativeWindow.js new file mode 100644 index 0000000000..e63ac4f12e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/NativeWindow.js @@ -0,0 +1,641 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.html.Window) + +************************************************************************ */ + +qx.OO.defineClass("qx.client.NativeWindow", qx.core.Target, +function(vUrl, vName) +{ + qx.core.Target.call(this); + + + // ************************************************************************ + // TIMER + // ************************************************************************ + + this._timer = new qx.client.Timer(100); + this._timer.addEventListener("interval", this._oninterval, this); + + + // ************************************************************************ + // INITIAL PROPERTIES + // ************************************************************************ + + if (vUrl != null) { + this.setUrl(vUrl); + } + + if (vName != null) { + this.setName(vName); + } +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + If the window is open or closed +*/ +qx.OO.addProperty({ name : "open", type : "boolean", defaultValue : false }); + +/*! + The outer width of the window. +*/ +qx.OO.addProperty({ name : "width", type : "number", defaultValue : 400, impl : "dimension" }); + +/*! + The outer height of the window. +*/ +qx.OO.addProperty({ name : "height", type : "number", defaultValue : 250, impl : "dimension" }); + +/*! + The left screen coordinate of the window. +*/ +qx.OO.addProperty({ name : "left", type : "number", defaultValue : 100, impl : "position" }); + +/*! + The top screen coordinate of the window. +*/ +qx.OO.addProperty({ name : "top", type : "number", defaultValue : 200, impl : "position" }); + +/*! + Should be window be modal +*/ +qx.OO.addProperty({ name : "modal", type : "boolean", defaultValue : false }); + +/*! + Should be window be dependent on this application window +*/ +qx.OO.addProperty({ name : "dependent", type : "boolean", defaultValue : true }); + +/*! + The url +*/ +qx.OO.addProperty({ name : "url", type : "string" }); + +/*! + The window name +*/ +qx.OO.addProperty({ name : "name", type : "string" }); + +/*! + The text of the statusbar +*/ +qx.OO.addProperty({ name : "status", type : "string", defaultValue : "Ready" }); + +/*! + Should the statusbar be shown +*/ +qx.OO.addProperty({ name : "showStatusbar", type : "boolean", defaultValue : false }); + +/*! + Should the menubar be shown +*/ +qx.OO.addProperty({ name : "showMenubar", type : "boolean", defaultValue : false }); + +/*! + Should the location(bar) be shown +*/ +qx.OO.addProperty({ name : "showLocation", type : "boolean", defaultValue : false }); + +/*! + Should the toolbar be shown +*/ +qx.OO.addProperty({ name : "showToolbar", type : "boolean", defaultValue : false }); + +/*! + If the window is resizeable +*/ +qx.OO.addProperty({ name : "resizeable", type : "boolean", defaultValue : true }); + +/*! + If the window is able to scroll and has visible scrollbars if needed +*/ +qx.OO.addProperty({ name : "allowScrollbars", type : "boolean", defaultValue : true }); + + + +/* +--------------------------------------------------------------------------- + STATE +--------------------------------------------------------------------------- +*/ + +qx.Proto._loaded = false; + + + + +/* +--------------------------------------------------------------------------- + PROPERTY GROUPS +--------------------------------------------------------------------------- +*/ + +qx.OO.addPropertyGroup({ name : "location", members : [ "left", "top" ]}); +qx.OO.addPropertyGroup({ name : "dimension", members : [ "width", "height" ]}); + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyPosition = function(propValue, propOldValue, propName) +{ + /* + http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx + Changes to Functionality in Microsoft Windows XP Service Pack 2 + Part 5: Enhanced Browsing Security + URLACTION_FEATURE_WINDOW_RESTRICTIONS + Allow script-initiated windows without size or position constraints + Code: 2102 + */ + + if (!this.isClosed()) + { + try + { + this._window.moveTo(this.getLeft(), this.getTop()); + } + catch(ex) + { + this.error("Cross-Domain Scripting problem: Could not move window!", ex); + } + } + + return true; +} + +qx.Proto._modifyDimension = function(propValue, propOldValue, propName) +{ + /* + http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx + Changes to Functionality in Microsoft Windows XP Service Pack 2 + Part 5: Enhanced Browsing Security + URLACTION_FEATURE_WINDOW_RESTRICTIONS + Allow script-initiated windows without size or position constraints + Code: 2102 + */ + + if (!this.isClosed()) + { + try + { + this._window.resizeTo(this.getWidth(), this.getHeight()); + } + catch(ex) + { + this.error("Cross-Domain Scripting problem: Could not resize window!", ex); + } + } + + return true; +} + +qx.Proto._modifyName = function(propValue, propOldValue, propName) +{ + if (!this.isClosed()) { + this._window.name = propValue; + } + + return true; +} + +qx.Proto._modifyUrl = function(propValue, propOldValue, propName) +{ + // String hack needed for old compressor (compile.py) + if(!this.isClosed()) { + this._window.location.replace(propValue != null ? propValue : ("javascript:/" + "/")); + } + + return true; +} + +qx.Proto._modifyOpen = function(propValue, propOldValue, propData) +{ + propValue ? this._open() : this._close(); + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + NAME +--------------------------------------------------------------------------- +*/ + +qx.Proto.getName = function() +{ + if (!this.isClosed()) + { + try + { + var vName = this._window.name; + } + catch(ex) + { + return this._valueName; + } + + if (vName == this._valueName) + { + return vName; + } + else + { + throw new Error("window name and name property are not identical"); + } + } + else + { + return this._valueName; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto.isClosed = function() +{ + var vClosed = true; + + if (this._window) + { + try { + vClosed = this._window.closed; + } catch(ex) {} + } + + return vClosed; +} + +qx.Proto.open = function() { + this.setOpen(true); +} + +qx.Proto.close = function() { + this.setOpen(false); +} + +qx.Proto.isLoaded = function() { + return this._loaded; +} + + + + + + + +/* +--------------------------------------------------------------------------- + OPEN METHOD +--------------------------------------------------------------------------- +*/ + +qx.Proto._open = function() +{ + var vConf = []; + + + /* + ------------------------------------------------------------------------------ + PRE CONFIGURE WINDOW + ------------------------------------------------------------------------------ + */ + + if (this.getWidth() != null) + { + vConf.push("width"); + vConf.push("="); + vConf.push(this.getWidth()); + vConf.push(","); + } + + if (this.getHeight() != null) + { + vConf.push("height"); + vConf.push("="); + vConf.push(this.getHeight()); + vConf.push(","); + } + + if (this.getLeft() != null) + { + vConf.push("left"); + vConf.push("="); + vConf.push(this.getLeft()); + vConf.push(","); + } + + if (this.getTop() != null) + { + vConf.push("top"); + vConf.push("="); + vConf.push(this.getTop()); + vConf.push(","); + } + + + + vConf.push("dependent"); + vConf.push("="); + vConf.push(this.getDependent() ? "yes" : "no"); + vConf.push(","); + + vConf.push("resizable"); + vConf.push("="); + vConf.push(this.getResizeable() ? "yes" : "no"); + vConf.push(","); + + vConf.push("status"); + vConf.push("="); + vConf.push(this.getShowStatusbar() ? "yes" : "no"); + vConf.push(","); + + vConf.push("location"); + vConf.push("="); + vConf.push(this.getShowLocation() ? "yes" : "no"); + vConf.push(","); + + vConf.push("menubar"); + vConf.push("="); + vConf.push(this.getShowMenubar() ? "yes" : "no"); + vConf.push(","); + + vConf.push("toolbar"); + vConf.push("="); + vConf.push(this.getShowToolbar() ? "yes" : "no"); + vConf.push(","); + + vConf.push("scrollbars"); + vConf.push("="); + vConf.push(this.getAllowScrollbars() ? "yes" : "no"); + vConf.push(","); + + vConf.push("modal"); + vConf.push("="); + vConf.push(this.getModal() ? "yes" : "no"); + vConf.push(","); + + + + + + + /* + ------------------------------------------------------------------------------ + OPEN WINDOW + ------------------------------------------------------------------------------ + */ + + if (this.getName() != null) { + this.setName("qx_NativeWindow" + this.toHashCode()); + } + + this._window = window.open(this.getUrl(), this.getName(), vConf.join("")); + + if (this.isClosed()) + { + this.error("Window could not be opened. It seems, there is a popup blocker active!"); + } + else + { + // This try-catch is needed because of cross domain issues (access rights) + try + { + this._window._native = this; + this._window.onload = this._onload; + } + catch(ex) {} + + // start timer for close detection + this._timer.start(); + + // block original document + if (this.getModal()) { + qx.ui.core.ClientDocument.getInstance().block(this); + } + } +} + +qx.Proto._close = function() +{ + if (!this._window) { + return; + } + + // stop timer for close detection + this._timer.stop(); + + // release window again + if (this.getModal()){ + qx.ui.core.ClientDocument.getInstance().release(this); + } + + // finally close window + if (!this.isClosed()) { + this._window.close(); + } + + try + { + this._window._native = null; + this._window.onload = null; + } + catch(ex) {}; + + this._window = null; + this._loaded = false; + + this.createDispatchEvent("close"); +} + + + + + + +/* +--------------------------------------------------------------------------- + CENTER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.centerToScreen = function() { + return this._centerHelper((screen.width - this.getWidth()) / 2, (screen.height - this.getHeight()) / 2); +} + +qx.Proto.centerToScreenArea = function() { + return this._centerHelper((screen.availWidth - this.getWidth()) / 2, (screen.availHeight - this.getHeight()) / 2); +} + +qx.Proto.centerToOpener = function() { + return this._centerHelper(((qx.html.Window.getInnerWidth(window) - this.getWidth()) / 2) + qx.html.Location.getScreenBoxLeft(window.document.body), ((qx.html.Window.getInnerHeight(window) - this.getHeight()) / 2) + qx.html.Location.getScreenBoxTop(window.document.body)); +} + +qx.Proto._centerHelper = function(l, t) +{ + // set new values + this.setLeft(l); + this.setTop(t); + + // focus window if opened + if (!this.isClosed()) { + this.focus(); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + FOCUS HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.focus = function() +{ + if (!this.isClosed()) { + this._window.focus(); + } +} + +qx.Proto.blur = function() +{ + if (!this.isClosed()) { + this._window.blur(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._oninterval = function(e) +{ + if (this.isClosed()) { + this.setOpen(false); + } + else if (!this._loaded) + { + // This try-catch is needed because of cross domain issues (access rights) + try + { + if (this._window.document && this._window.document.readyState == "complete") + { + this._loaded = true; + this.createDispatchEvent("load"); + } + } + catch(ex) {}; + } +} + +qx.Proto._onload = function(e) +{ + var obj = this._native; + + if (!obj._loaded) + { + obj._loaded = true; + obj.createDispatchEvent("load"); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this.getDependent()) { + this.close(); + } + + if (this._timer) + { + this._timer.stop(); + this._timer = null; + } + + if (this._window) + { + try + { + this._window._native = null; + this._window.onload = null; + } + catch(ex) {}; + + this._window = null; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/Timer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/Timer.js new file mode 100644 index 0000000000..36fb11dc08 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/client/Timer.js @@ -0,0 +1,185 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Global timer support. Simplifies javascript intervals for objects. + * + * @event interval {qx.event.type.Event} + */ +qx.OO.defineClass("qx.client.Timer", qx.core.Target, +function(vInterval) +{ + qx.core.Target.call(this); + + this.setEnabled(false); + + if (vInterval != null) { + this.setInterval(vInterval); + } + + // Object wrapper to timer event + var o = this; + this.__oninterval = function() { o._oninterval(); } +}); + +qx.OO.addProperty({ name : "interval", type : "number", defaultValue : 1000 }); + +qx.Proto._intervalHandle = null; + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + window.clearInterval(this._intervalHandle); + this._intervalHandle = null; + } + else if (propValue) + { + this._intervalHandle = window.setInterval(this.__oninterval, this.getInterval()); + } + + return true; +} + + + + +/* +--------------------------------------------------------------------------- + USER-ACCESS +--------------------------------------------------------------------------- +*/ + +qx.Proto.start = function() { + this.setEnabled(true); +} + +qx.Proto.startWith = function(vInterval) +{ + this.setInterval(vInterval); + this.start(); +} + +qx.Proto.stop = function() { + this.setEnabled(false); +} + +qx.Proto.restart = function() +{ + this.stop(); + this.start(); +} + +qx.Proto.restartWith = function(vInterval) +{ + this.stop(); + this.startWith(vInterval); +} + + + + +/* +--------------------------------------------------------------------------- + EVENT-MAPPER +--------------------------------------------------------------------------- +*/ + +qx.Proto._oninterval = function() +{ + if (this.getEnabled()) { + this.createDispatchEvent("interval"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + // Stop interval + this.stop(); + + // Clear handle + if (this._intervalHandler) + { + window.clearInterval(this._intervalHandle); + this._intervalHandler = null; + } + + // Clear object wrapper function + this.__oninterval = null; + + // Call qx.core.Target to do the other dispose work + return qx.core.Target.prototype.dispose.call(this); +} + + + + + +/* +--------------------------------------------------------------------------- + HELPER +--------------------------------------------------------------------------- +*/ + +qx.client.Timer.once = function(vFunction, vObject, vTimeout) +{ + // Create time instance + var vTimer = new qx.client.Timer(vTimeout); + + // Add event listener to interval + vTimer.addEventListener("interval", function(e) + { + vFunction.call(vObject, e); + vTimer.dispose(); + + vObject = null; + }, vObject); + + // Directly start timer + vTimer.start(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js new file mode 100644 index 0000000000..0d0877f5aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/AbstractApplication.js @@ -0,0 +1,30 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.AbstractApplication", qx.component.AbstractComponent, +function() { + qx.component.AbstractComponent.call(this); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js new file mode 100644 index 0000000000..3bb95a1309 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/AbstractComponent.js @@ -0,0 +1,68 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.AbstractComponent", qx.core.Target, +function() +{ + qx.core.Target.call(this); + +}); + + +/*! + Run initialisation part of component creation. +*/ +qx.Proto.initialize = function() {}; + +/*! + Run main part of component creation. +*/ +qx.Proto.main = function() {}; + +/*! + Run finalization part of component creation. +*/ +qx.Proto.finalize = function() {}; + +/*! + Terminate this component. +*/ +qx.Proto.close = function() {}; + +/*! + Terminate this component. +*/ +qx.Proto.terminate = function() {}; + + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/DummyApplication.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/DummyApplication.js new file mode 100644 index 0000000000..68f76172ba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/DummyApplication.js @@ -0,0 +1,43 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.DummyApplication", qx.component.AbstractApplication, +function() { + qx.component.AbstractApplication.call(this); +}); + + + +/* +--------------------------------------------------------------------------- + DIRECT SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js new file mode 100644 index 0000000000..7e7ebee012 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/AbstractInitComponent.js @@ -0,0 +1,84 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Abstract application initializer + */ +qx.OO.defineClass("qx.component.init.AbstractInitComponent", qx.component.AbstractComponent, +function() { + qx.component.AbstractComponent.call(this); +}); + + + +/** + * Run initialisation part of component creation. + * + * @param e {Event} event object + */ +qx.Proto.initialize = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().initialize(e); +}; + + +/** + * Run main part of component creation. + * + * @param e {Event} event object + */ +qx.Proto.main = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().main(e); +}; + + +/** + * Run finalization part of component creation. + * + * @param e {Event} event object + */ +qx.Proto.finalize = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().finalize(e); +}; + + +/** + * Terminate this component. + * + * @param e {Event} event object + */ +qx.Proto.close = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().close(e); +}; + + +/** + * Terminate this component. + * + * @param e {Event} event object + */ +qx.Proto.terminate = function(e) { + return qx.core.Init.getInstance().getApplicationInstance().terminate(e); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js new file mode 100644 index 0000000000..f87d768241 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/BasicInitComponent.js @@ -0,0 +1,55 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.init.BasicInitComponent", qx.component.init.AbstractInitComponent, +function() { + qx.component.init.AbstractInitComponent.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onload = function(e) +{ + this.initialize(e); + this.main(e); + this.finalize(e); +} + +qx.Proto._onbeforeunload = function(e) { + this.close(e); +} + +qx.Proto._onunload = function(e) { + this.terminate(e); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js new file mode 100644 index 0000000000..211a4ff53d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/component/init/InterfaceInitComponent.js @@ -0,0 +1,183 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.component.init.InterfaceInitComponent", qx.component.init.BasicInitComponent, +function() { + qx.component.init.BasicInitComponent.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + READY STATE +--------------------------------------------------------------------------- +*/ + +qx.Proto._uiReady = false; + +qx.Proto.isUiReady = function() { + return this._uiReady; +} + + + + + + +/* +--------------------------------------------------------------------------- + STATE MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto.initialize = function() +{ + // Force creation of event handler + qx.event.handler.EventHandler.getInstance(); + + // Force creation of client document + qx.ui.core.ClientDocument.getInstance(); + + // Start real initialisation + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.initialize.call(this); + this.info("initialize runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + +qx.Proto.main = function() +{ + // Start real main process + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.main.call(this); + this.info("main runtime: " + ((new Date).valueOf() - start) + "ms"); + + this.debug("preloading visible images..."); + new qx.io.image.PreloaderSystem(qx.manager.object.ImageManager.getInstance().getPreloadImageList(), this.finalize, this); +}; + + +qx.Proto.finalize = function() +{ + var start = (new Date).valueOf(); + + this._printPreloadComplete(); + this._uiReady = true; + + // Show initial widgets + qx.ui.core.Widget.flushGlobalQueues(); + + // Finally attach event to make the GUI ready for the user + qx.event.handler.EventHandler.getInstance().attachEvents(); + + qx.component.init.BasicInitComponent.prototype.finalize.call(this); + + this.info("finalize runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + +qx.Proto.close = function() +{ + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.close.call(this); + + this.info("close runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + +qx.Proto.terminate = function() +{ + var start = (new Date).valueOf(); + qx.component.init.BasicInitComponent.prototype.terminate.call(this); + + this.info("terminate runtime: " + ((new Date).valueOf() - start) + "ms"); +}; + + + + + +/* +--------------------------------------------------------------------------- + PRELOAD UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.preload = function() +{ + if (!this._preloadDone) + { + this.debug("preloading hidden images..."); + new qx.io.image.PreloaderSystem(qx.manager.object.ImageManager.getInstance().getPostPreloadImageList(), this._printPreloadComplete, this); + this._preloadDone = true; + } +} + +qx.Proto._printPreloadComplete = function() { + this.debug("preloading complete"); +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onload = function(e) +{ + this.initialize(); + this.main(); + + // Note: finalize will be called through image preloader +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._preloadDone = null; + this._uiReady = null; + + return qx.component.init.BasicInitComponent.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Client.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Client.js new file mode 100644 index 0000000000..7f62a620cb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Client.js @@ -0,0 +1,406 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/*! + Basic client detection implementation + + Version shemes following wikipedia: major.minor[.revision[.build]] + http://en.wikipedia.org/wiki/Software_version +*/ +qx.OO.defineClass("qx.core.Client", Object, +function() +{ + var vRunsLocally = window.location.protocol === "file:"; + + var vBrowserUserAgent = navigator.userAgent; + var vBrowserVendor = navigator.vendor; + var vBrowserProduct = navigator.product; + var vBrowserPlatform = navigator.platform; + var vBrowserModeHta = false; + var vBrowser; + + var vEngine = null; + var vEngineVersion = null; + var vEngineVersionMajor = 0; + var vEngineVersionMinor = 0; + var vEngineVersionRevision = 0; + var vEngineVersionBuild = 0; + + var vEngineEmulation = null; + var vVersionHelper; + + if (window.opera && /Opera[\s\/]([0-9\.]*)/.test(vBrowserUserAgent)) + { + vEngine = "opera"; + vEngineVersion = RegExp.$1; + + // Fix Opera version to match wikipedia style + vEngineVersion = vEngineVersion.substring(0, 3) + "." + vEngineVersion.substring(3); + + vEngineEmulation = vBrowserUserAgent.indexOf("MSIE") !== -1 ? "mshtml" : vBrowserUserAgent.indexOf("Mozilla") !== -1 ? "gecko" : null; + } + else if (typeof vBrowserVendor==="string" && vBrowserVendor==="KDE" && /KHTML\/([0-9-\.]*)/.test(vBrowserUserAgent)) + { + vEngine = "khtml"; + vBrowser = "konqueror"; + vEngineVersion = RegExp.$1; + } + else if (vBrowserUserAgent.indexOf("AppleWebKit") != -1 && /AppleWebKit\/([0-9-\.]*)/.test(vBrowserUserAgent)) + { + vEngine = "webkit"; + vEngineVersion = RegExp.$1; + + if(vBrowserUserAgent.indexOf("Safari") != -1) { + vBrowser = "safari"; + } else if(vBrowserUserAgent.indexOf("Omni") != -1) { + vBrowser = "omniweb"; + } else { + vBrowser = "other webkit"; + } + } + else if (window.controllers && typeof vBrowserProduct==="string" && vBrowserProduct==="Gecko" && /rv\:([^\);]+)(\)|;)/.test(vBrowserUserAgent)) + { + // http://www.mozilla.org/docs/dom/domref/dom_window_ref13.html + vEngine = "gecko"; + vEngineVersion = RegExp.$1; + + if(vBrowserUserAgent.indexOf("Firefox") != -1) { + vBrowser = "firefox"; + } else if(vBrowserUserAgent.indexOf("Camino") != -1) { + vBrowser = "camino"; + } else if(vBrowserUserAgent.indexOf("Galeon") != -1) { + vBrowser = "galeon"; + } else { + vBrowser = "other gecko"; + } + } + else if (/MSIE\s+([^\);]+)(\)|;)/.test(vBrowserUserAgent)) + { + vEngine = "mshtml"; + vEngineVersion = RegExp.$1; + + vBrowserModeHta = !window.external; + } + + if (vEngineVersion) + { + vVersionHelper = vEngineVersion.split("."); + + vEngineVersionMajor = vVersionHelper[0] || 0; + vEngineVersionMinor = vVersionHelper[1] || 0; + vEngineVersionRevision = vVersionHelper[2] || 0; + vEngineVersionBuild = vVersionHelper[3] || 0; + } + + var vEngineBoxSizingAttr = vEngine == "gecko" ? "-moz-box-sizing" : vEngine == "mshtml" ? null : "box-sizing"; + var vEngineQuirksMode = document.compatMode !== "CSS1Compat"; + + var vDefaultLocale = "en"; + var vBrowserLocale = (vEngine == "mshtml" ? navigator.userLanguage : navigator.language).toLowerCase(); + var vBrowserLocaleVariant = null; + + var vBrowserLocaleVariantIndex = vBrowserLocale.indexOf("-"); + if (vBrowserLocaleVariantIndex != -1) + { + vBrowserLocaleVariant = vBrowserLocale.substr(vBrowserLocaleVariantIndex+1); + vBrowserLocale = vBrowserLocale.substr(0, vBrowserLocaleVariantIndex); + } + + var vPlatform = "none"; + var vPlatformWindows = false; + var vPlatformMacintosh = false; + var vPlatformUnix = false; + var vPlatformOther = false; + + if (vBrowserPlatform.indexOf("Windows") != -1 || vBrowserPlatform.indexOf("Win32") != -1 || vBrowserPlatform.indexOf("Win64") != -1) + { + vPlatformWindows = true; + vPlatform = "win"; + } + else if (vBrowserPlatform.indexOf("Macintosh") != -1 || vBrowserPlatform.indexOf("MacIntel") != -1) + { + vPlatformMacintosh = true; + vPlatform = "mac"; + } + else if (vBrowserPlatform.indexOf("X11") != -1 || vBrowserPlatform.indexOf("Linux") != -1 || vBrowserPlatform.indexOf("BSD") != -1) + { + vPlatformUnix = true; + vPlatform = "unix"; + } + else + { + vPlatformOther = true; + vPlatform = "other"; + } + + var vGfxVml = false; + var vGfxSvg = false; + var vGfxSvgBuiltin = false; + var vGfxSvgPlugin = false; + + if (vEngine == "mshtml") + { + vGfxVml = true; + + // TODO: Namespace for VML: + // document.write('<style>v\:*{ behavior:url(#default#VML); }</style>'); + // document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>'); + } + + if (document.implementation && document.implementation.hasFeature) + { + if (document.implementation.hasFeature("org.w3c.dom.svg", "1.0")) + { + vGfxSvg = vGfxSvgBuiltin = true; + } + } + + this._runsLocally = vRunsLocally; + + this._engineName = vEngine; + this._engineNameMshtml = vEngine === "mshtml"; + this._engineNameGecko = vEngine === "gecko"; + this._engineNameOpera = vEngine === "opera"; + this._engineNameKhtml = vEngine === "khtml"; + this._engineNameWebkit = vEngine === "webkit"; + + this._engineVersion = parseFloat(vEngineVersion); + this._engineVersionMajor = parseInt(vEngineVersionMajor); + this._engineVersionMinor = parseInt(vEngineVersionMinor); + this._engineVersionRevision = parseInt(vEngineVersionRevision); + this._engineVersionBuild = parseInt(vEngineVersionBuild); + + this._engineQuirksMode = vEngineQuirksMode; + this._engineBoxSizingAttribute = vEngineBoxSizingAttr; + this._engineEmulation = vEngineEmulation; + + this._defaultLocale = vDefaultLocale; + + this._browserPlatform = vPlatform; + this._browserPlatformWindows = vPlatformWindows; + this._browserPlatformMacintosh = vPlatformMacintosh; + this._browserPlatformUnix = vPlatformUnix; + this._browserPlatformOther = vPlatformOther; + this._browserModeHta = vBrowserModeHta; + this._browserLocale = vBrowserLocale; + this._browserLocaleVariant = vBrowserLocaleVariant; + + this._gfxVml = vGfxVml; + this._gfxSvg = vGfxSvg; + this._gfxSvgBuiltin = vGfxSvgBuiltin; + this._gfxSvgPlugin = vGfxSvgPlugin; + + this._fireBugActive = (window.console && console.log && console.debug && console.assert); + + this._supportsTextContent = (document.documentElement.textContent !== undefined); + this._supportsInnerText = (document.documentElement.innerText !== undefined); +}); + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getRunsLocally = function() { + return this._runsLocally; +} + +qx.Proto.getEngine = function() { + return this._engineName; +} + +qx.Proto.getVersion = function() { + return this._engineVersion; +} + +qx.Proto.getMajor = function() { + return this._engineVersionMajor; +} + +qx.Proto.getMinor = function() { + return this._engineVersionMinor; +} + +qx.Proto.getRevision = function() { + return this._engineVersionRevision; +} + +qx.Proto.getBuild = function() { + return this._engineVersionBuild; +} + +qx.Proto.getEmulation = function() { + return this._engineEmulation; +} + +qx.Proto.isMshtml = function() { + return this._engineNameMshtml; +} + +qx.Proto.isGecko = function() { + return this._engineNameGecko; +} + +qx.Proto.isOpera = function() { + return this._engineNameOpera; +} + +qx.Proto.isKhtml = function() { + return this._engineNameKhtml; +} + +qx.Proto.isWebkit = function() { + return this._engineNameWebkit; +} + +qx.Proto.isSafari2 = function() { + return this._engineNameWebkit && (this._engineVersion < 420); +} + +qx.Proto.isInQuirksMode = function() { + return this._engineQuirksMode; +} + +qx.Proto.getLocale = function() { + return this._browserLocale; +} + +qx.Proto.getLocaleVariant = function() { + return this._browserLocaleVariant; +} + +qx.Proto.getDefaultLocale = function() { + return this._defaultLocale; +} + +qx.Proto.usesDefaultLocale = function() { + return this._browserLocale === this._defaultLocale; +} + + + +/** + * Returns the CSS attribute name for box-sizing if supported. + * + * @return {String} the attribute name. + */ +qx.Proto.getEngineBoxSizingAttribute = function() { + return this._engineBoxSizingAttribute; +} + + +qx.Proto.getPlatform = function() { + return this._browserPlatform; +} + +/** + * Returns whether the client platform is a Windows machine. + * + * @return {Boolean} whether the client platform is a Windows. + */ +qx.Proto.runsOnWindows = function() { + return this._browserPlatformWindows; +} + +/** + * Returns whether the client platform is a Macintosh machine. + * + * @return {Boolean} whether the client platform is a Macintosh. + */ +qx.Proto.runsOnMacintosh = function() { + return this._browserPlatformMacintosh; +} + +/** + * Returns whether the client platform is a X11 powered machine. + * + * @return {Boolean} whether the client platform is a X11 powered machine. + */ +qx.Proto.runsOnUnix = function() { + return this._browserPlatformUnix; +} + +qx.Proto.supportsVml = function() { + return this._gfxVml; +} + +qx.Proto.supportsSvg = function() { + return this._gfxSvg; +} + +qx.Proto.usesSvgBuiltin = function() { + return this._gfxSvgBuiltin; +} + +qx.Proto.usesSvgPlugin = function() { + return this._gfxSvgPlugin; +} + +/** + * Retuns whether the Mozilla FireBug extension is installed and active + * http://www.getfirebug.com/ + * + * @return {Boolean} whether FireBug is active + */ + qx.Proto.isFireBugActive = function() { + return this._fireBugActive; + }; + +/** + * Returns whether the client supports the W3C property textContent of DOM element nodes. + * + * @return {Boolean} whether the client supports textContent. + */ +qx.Proto.supportsTextContent = function() { + return this._supportsTextContent; +} + +/** + * Returns whether the client supports the W3C property innerText of DOM element nodes. + * + * @return {Boolean} whether the client supports innerText. + */ +qx.Proto.supportsInnerText = function() { + return this._supportsInnerText; +} + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Init.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Init.js new file mode 100644 index 0000000000..e52a249272 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Init.js @@ -0,0 +1,329 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#require(qx.html.EventRegistration) +#optional(qx.component.init.InterfaceInitComponent) + +************************************************************************ */ + +/** + * Initialize qooxdoo. + * + * Attaches qooxdoo callbacks to the load events (onload, onunload, onbeforeunload) + * and initializes the qooxdoo application. The initializations starts automatically. + * + * Make shure you set the application to your application before the load event is fired: + * <pre>qx.core.Init.getInstance().setApplication(YourApplication)</pre> + */ +qx.OO.defineClass("qx.core.Init", qx.core.Target, +function() +{ + qx.core.Target.call(this, false); + + // Object Wrapper to Events (Needed for DOM-Events) + var o = this; + + /** + * private + * @param e {Object} event + */ + this.__onload = function(e) { return o._onload(e); } + /** + * private + * @param e {Object} event + */ + this.__onbeforeunload = function(e) { return o._onbeforeunload(e); } + /** + * private + * @param e {Object} event + */ + this.__onunload = function(e) { return o._onunload(e); } + + // Attach events + qx.html.EventRegistration.addEventListener(window, "load", this.__onload); + qx.html.EventRegistration.addEventListener(window, "beforeunload", this.__onbeforeunload); + qx.html.EventRegistration.addEventListener(window, "unload", this.__onunload); +}); + + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("component", "qx.component.init.InterfaceInitComponent"); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * Instance of the component initializer. + */ +qx.OO.addProperty({ name : "component", type : "object", instance : "qx.component.init.BasicInitComponent" }); + +/** + * Reference to the constructor of the main application. + * + * Set this before the onload event is fired. + */ +qx.OO.addProperty({ name : "application", type : "function" }); + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyApplication = function(propValue, propOldValue, propData) +{ + if (propValue) { + this._applicationInstance = new propValue; + } + + return true; +}; + + + + + + +/* +--------------------------------------------------------------------------- + INTERNAL PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * Returns an instance of the current qooxdoo Application + * + * @return {qx.component.AbstractApplication} instance of the current qooxdoo application + */ +qx.Proto.getApplicationInstance = function() +{ + if (!this.getApplication()) { + this.setApplication(qx.component.DummyApplication); + } + + return this._applicationInstance; +}; + + + + + + +/* +--------------------------------------------------------------------------- + COMPONENT BINDING +--------------------------------------------------------------------------- +*/ + +/** + * define the initialisation function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineInitialize = function(vFunc) { + this.getApplicationInstance().initialize = vFunc; +} + +/** + * define the main function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineMain = function(vFunc) { + this.getApplicationInstance().main = vFunc; +} + +/** + * define the finalize function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineFinalize = function(vFunc) { + this.getApplicationInstance().finalize = vFunc; +} + +/** + * define the close function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineClose = function(vFunc) { + this.getApplicationInstance().close = vFunc; +} + +/** + * define the terminate function + * Don't use this method directly. Use setApplication instead! + * + * @param vFunc {Function} callback function + */ +qx.Proto.defineTerminate = function(vFunc) { + this.getApplicationInstance().terminate = vFunc; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +/** + * load event handler + * + * @param e {Object} event + */ +qx.Proto._onload = function(e) +{ + this.debug("qooxdoo " + qx.core.Version.toString()); + + // Print out class information + this.debug("loaded " + qx.lang.Object.getLength(qx.OO.classes) + " classes"); + + // Print browser information + var cl = qx.core.Client.getInstance(); + this.debug("client: " + cl.getEngine() + "-" + cl.getMajor() + "." + + cl.getMinor() + "/" + cl.getPlatform() + "/" + cl.getLocale()); + + if (cl.isMshtml() && !cl.isInQuirksMode()) { + this.warn("Wrong box sizing: Please modify the document's DOCTYPE!"); + } + + // Init component from settings + this.setComponent(new qx.OO.classes[this.getSetting("component")](this)); + + // Send onload + return this.getComponent()._onload(e); +} + + +/** + * beforeunload event handler + * + * @param e {Object} event + */ +qx.Proto._onbeforeunload = function(e) +{ + // Send onbeforeunload event (can be cancelled) + return this.getComponent()._onbeforeunload(e); +} + + +/** + * unload event handler + * + * @param e {Object} event + */ +qx.Proto._onunload = function(e) +{ + // Send onunload event (last event) + this.getComponent()._onunload(e); + + // Dispose all qooxdoo objects + qx.core.Object.dispose(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Destructor + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Detach Events + qx.html.EventRegistration.removeEventListener(window, "load", this.__onload); + qx.html.EventRegistration.removeEventListener(window, "beforeunload", this.__onbeforeunload); + qx.html.EventRegistration.removeEventListener(window, "unload", this.__onunload); + + // Reset inline functions + this.__onload = this.__onbeforeunload = this.__onunload = null; + + if (this._applicationInstance) { + this._applicationInstance.dispose(); + this._applicationInstance = null; + } + + qx.core.Target.prototype.dispose.call(this); +} + + + + +/* +--------------------------------------------------------------------------- + DIRECT SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + +// Force direct creation +qx.Class.getInstance(); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Object.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Object.js new file mode 100644 index 0000000000..d4bbb7ae51 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Object.js @@ -0,0 +1,597 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#load(qx.core.Init) +#resource(static:static) + +************************************************************************ */ + +/** + * The qooxdoo root class. All other classes are direct or indirect subclasses of this one. + * + * This class contains methods for: + * <ul> + * <li> object management (creation and destruction) </li> + * <li> logging & debugging </li> + * <li> generic getter/setter </li> + * <li> user data </li> + * <li> settings </li> + * <li> internationalization </li> + * </ul> + * + * @param vAutoDispose {Boolean ? true} whether the object should be automatically disposed + */ +qx.OO.defineClass("qx.core.Object", Object, +function(vAutoDispose) +{ + this._hashCode = qx.core.Object._availableHashCode++; + + if (vAutoDispose !== false) + { + this._dbKey = qx.core.Object._db.length; + qx.core.Object._db.push(this); + } +}); + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("enableDisposerDebug", false); + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +qx.Class._availableHashCode = 0; +qx.Class._db = []; +qx.Class._disposeAll = false; + + +/** + * Returns an unique identifier for the given object. If such an identifier + * does not yet exist, create it. + * + * @param o {Object} the Object to get the hashcode for + * @return {Integer} unique identifier for the given object + */ +qx.Class.toHashCode = function(o) +{ + if(o._hashCode != null) { + return o._hashCode; + } + + return o._hashCode = qx.core.Object._availableHashCode++; +} + + +/** + * Destructor. This method is called by qooxdoo on object destruction. + * + * Any class that holds resources like links to DOM nodes must overwrite + * this method and free these resources. + */ +qx.Class.dispose = function() +{ + // var logger = qx.log.Logger.getClassLogger(qx.core.Object); + // logger.debug("Disposing Application"); + + // var vStart = (new Date).valueOf(); + qx.core.Object._disposeAll = true; + var vObject; + + for (var i=qx.core.Object._db.length-1; i>=0; i--) + { + vObject = qx.core.Object._db[i]; + + if (vObject && vObject._disposed === false) + { + // logger.debug("Disposing: " + vObject); + vObject.dispose(); + } + } + + // logger.debug("Done in: " + ((new Date).valueOf() - vStart) + "ms"); +} + + +/** + * Summary of allocated objects + * + * @return {String} summary of allocated objects. + */ +qx.Class.summary = function() +{ + var vData = {}; + var vCounter = 0; + var vObject; + + for (var i=qx.core.Object._db.length-1; i>=0; i--) + { + vObject = qx.core.Object._db[i]; + + if (vObject && vObject._disposed === false) + { + if (vData[vObject.classname] == null) + { + vData[vObject.classname] = 1; + } + else + { + vData[vObject.classname]++; + } + + vCounter++; + } + } + + var vArrData = []; + + for (var vClassName in vData) { + vArrData.push({ classname : vClassName, number : vData[vClassName] }); + } + + vArrData.sort(function(a, b) { + return b.number - a.number; + }); + + var vMsg = "Summary: (" + vCounter + " Objects)\n\n"; + + for (var i=0; i<vArrData.length; i++) { + vMsg += vArrData[i].number + ": " + vArrData[i].classname + "\n"; + } + + alert(vMsg); +}; + +/** + * Enable or disable the Object. + * + * The actual semantic of this property depends on concrete subclass of qx.core.Object. + */ +qx.OO.addProperty({ name : "enabled", type : "boolean", defaultValue : true, getAlias : "isEnabled" }); + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +/** + * Returns a string represantation of the qooxdoo object. + * + * @return {String} string representation of the object + */ +qx.Proto.toString = function() +{ + if(this.classname) { + return "[object " + this.classname + "]"; + } + + return "[object Object]"; +} + + +/** + * Return unique hash code of object + * + * @return {Integer} unique hash code of the object + */ +qx.Proto.toHashCode = function() { + return this._hashCode; +} + + +/** + * Returns true if the object is disposed. + * + * @return {Boolean} wether the object has been disposed + */ +qx.Proto.getDisposed = function() { + return this._disposed; +} + + +/** + * Returns true if the object is disposed. + * + * @return {Boolean} wether the object has been disposed + */ +qx.Proto.isDisposed = function() { + return this._disposed; +} + + +/** + * Returns a settings from global setting definition + * + * @param vKey {String} the key + * @return {Object} value of the global setting + */ +qx.Proto.getSetting = function(vKey) { + return qx.Settings.getValueOfClass(this.classname, vKey); +} + + +/* +--------------------------------------------------------------------------- + I18N INTERFACE +--------------------------------------------------------------------------- +*/ + +/** + * Translate a message + * Mark the message for translation. + * @see qx.lang.String.format + * + * @param messageId {String} message id (may contain format strings) + * @param varargs {Object} variable number of argumes applied to the format string + * @return {qx.locale.LocalizedString} + */ +qx.Proto.tr = function(messageId, varargs) { + var nlsManager = qx.locale.Manager; + return nlsManager.tr.apply(nlsManager, arguments); +}; + + +/** + * Translate a plural message + * Mark the messages for translation. + * + * Depending on the third argument the plursl or the singular form is chosen. + * + * @see qx.lang.String.format + * + * @param singularMessageId {String} message id of the singular form (may contain format strings) + * @param pluralMessageId {String} message id of the plural form (may contain format strings) + * @param count {Integer} if greater than 1 the plural form otherwhise the singular form is returned. + * @param varargs {Object} variable number of argumes applied to the format string + * @return {qx.locale.LocalizedString) + */ +qx.Proto.trn = function(singularMessageId, pluralMessageId, count, varargs) { + var nlsManager = qx.locale.Manager; + return nlsManager.trn.apply(nlsManager, arguments); +}; + + +/** + * Mark the message for translation but return the original message. + * + * @param messageId {String} the message ID + * @return {String} messageId + */ +qx.Proto.marktr = function(messageId) { + var nlsManager = qx.locale.Manager; + return nlsManager.marktr.apply(nlsManager, arguments); +}; + +/* +--------------------------------------------------------------------------- + LOGGING INTERFACE +--------------------------------------------------------------------------- +*/ + +/** + * Returns the logger of this class. + * + * @return {qx.log.Logger} the logger of this class. + */ +qx.Proto.getLogger = function() { + return qx.log.Logger.getClassLogger(this.constructor); +} + + +/** + * Logs a debug message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.debug = function(msg, exc) { + this.getLogger().debug(msg, this._hashCode, exc); +} + + +/** + * Logs an info message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.info = function(msg, exc) { + this.getLogger().info(msg, this._hashCode, exc); +} + + +/** + * Logs a warning message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.warn = function(msg, exc) { + this.getLogger().warn(msg, this._hashCode, exc); +} + + +/** + * Logs an error message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.error = function(msg, exc) { + this.getLogger().error(msg, this._hashCode, exc); +} + + + + +/* +--------------------------------------------------------------------------- + COMMON SETTER/GETTER SUPPORT +--------------------------------------------------------------------------- +*/ + +/** + * Sets multiple properties at once by using a property list + * + * @param propertyValues {Object} A hash of key-value pairs. + */ +qx.Proto.set = function(propertyValues) +{ + if (typeof propertyValues !== "object") { + throw new Error("Please use a valid hash of property key-values pairs."); + } + + for (var prop in propertyValues) + { + try + { + this[qx.OO.setter[prop]](propertyValues[prop]); + } + catch(ex) + { + this.error("Setter of property '" + prop + "' returned with an error", ex); + } + } + + return this; +} + +/** + * Gets multiple properties at once by using a property list + * + * @param propertyNames {String | Array | Map} list of the properties to get + * @param outputHint {String ? "array"} how should the values be returned. Possible values are "hash" and "array". +*/ +qx.Proto.get = function(propertyNames, outputHint) +{ + switch(typeof propertyNames) + { + case "string": + return this["get" + qx.lang.String.toFirstUp(propertyNames)](); + + case "object": + if (typeof propertyNames.length === "number") + { + if (outputHint == "hash") + { + var h = {}; + + propertyLength = propertyNames.length; + for (var i=0; i<propertyLength; i++) + { + try{ + h[propertyNames[i]] = this["get" + qx.lang.String.toFirstUp(propertyNames[i])](); + } + catch(ex) + { + throw new Error("Could not get a valid value from property: " + propertyNames[i] + "! Is the property existing? (" + ex + ")"); + } + } + + return h; + } + else + { + propertyLength = propertyNames.length; + for (var i=0; i<propertyLength; i++) + { + try{ + propertyNames[i] = this["get" + qx.lang.String.toFirstUp(propertyNames[i])](); + } + catch(ex) + { + throw new Error("Could not get a valid value from property: " + propertyNames[i] + "! Is the property existing? (" + ex + ")"); + } + } + + return propertyNames; + } + } + else + { + for (var i in propertyNames) { + propertyNames[i] = this["get" + qx.lang.String.toFirstUp(i)](); + } + + return propertyNames; + } + + default: + throw new Error("Please use a valid array, hash or string as parameter!"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + USER DATA +--------------------------------------------------------------------------- +*/ + +/** + * Store user defined data inside the object. + * + * @param vKey {String} the key + * @param vValue {Object} the value of the user data + */ +qx.Proto.setUserData = function(vKey, vValue) +{ + if (!this._userData) { + this._userData = {}; + } + + this._userData[vKey] = vValue; +} + + +/** + * Load user defined data from the object + * + * @param vKey {String} the key + * @return {Object} the user data + */ +qx.Proto.getUserData = function(vKey) +{ + if (!this._userData) { + return null; + } + + return this._userData[vKey]; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto._disposed = false; + +/** + * Dispose this object + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Dispose user data + if (this._userData) + { + for(var vKey in this._userData) { + this._userData[vKey] = null; + } + + this._userData = null; + } + + // Finally cleanup properties + if (this._objectproperties) + { + var a = this._objectproperties.split(","); + var d = qx.OO.values; + + for (var i=0, l=a.length; i<l; i++) { + this[d[a[i]]] = null; + } + + this._objectproperties = null; + } + + if (this.getSetting("enableDisposerDebug")) + { + for (var vKey in this) + { + if (this[vKey] !== null && typeof this[vKey] === "object") + { + this.debug("Missing class implementation to dispose: " + vKey); + delete this[vKey]; + } + } + } + + /* + if (typeof CollectGarbage === "function") { + CollectGarbage(); + } + */ + + /* + // see bug #258. + if(this._dbKey != this._hashCode) { + console.log("Disposing wrong entry: " + this._dbKey + " vs. " + this._hashCode); + } + */ + + // Delete Entry from Object DB + if (this._dbKey != null) + { + if (qx.core.Object._disposeAll) + { + qx.core.Object._db[this._dbKey] = null; + this._hashCode = null; + this._dbKey = null; + } + else + { + delete qx.core.Object._db[this._dbKey]; + delete this._hashCode; + delete this._dbKey; + } + } + + // Mark as disposed + this._disposed = true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Target.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Target.js new file mode 100644 index 0000000000..a22d7a62bb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Target.js @@ -0,0 +1,297 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * This is the main constructor for all objects that need to be connected to qx.event.type.Event objects. + * + * In objects created with this constructor, you find functions to addEventListener or + * removeEventListener to or from the created object. Each event to connect to has a type in + * form of an identification string. This type could be the name of a regular dom event like "click" or + * something self-defined like "ready". + * + * @param vAutoDispose {Boolean ? true} wether the object should be disposed automatically by qooxdoo + */ +qx.OO.defineClass("qx.core.Target", qx.core.Object, +function(vAutoDispose) { + qx.core.Object.call(this, vAutoDispose); +}); + +/** + * @private + */ +qx.Class.EVENTPREFIX = "evt"; + + + + +/* +--------------------------------------------------------------------------- + EVENT CONNECTION +--------------------------------------------------------------------------- +*/ + +/** + * Add event listener to an object. + * + * @param vType {String} name of the event type + * @param vFunction {Function} event callback function + * @param vObject {Object ? window} reference to the 'this' variable inside the callback + */ +qx.Proto.addEventListener = function(vType, vFunction, vObject) +{ + if(this._disposed) { + return; + } + + if(typeof vFunction !== "function") { + throw new Error("qx.core.Target: addEventListener(" + vType + "): '" + vFunction + "' is not a function!"); + } + + // If this is the first event of given type, we need to create a subobject + // that contains all the actions that will be assigned to this type + if (this._listeners === undefined) { + this._listeners = {}; + } + + if(this._listeners[vType] === undefined) { + this._listeners[vType] = {}; + } + + // Create a special vKey string to allow identification of each bound action + var vKey = qx.core.Target.EVENTPREFIX + qx.core.Object.toHashCode(vFunction) + (vObject ? "_" + qx.core.Object.toHashCode(vObject) : ""); + + // Finally set up the listeners object + this._listeners[vType][vKey] = + { + handler : vFunction, + object : vObject + } +} + + +/** + * Remove event listener from object + * + * @param vType {String} name of the event type + * @param vFunction {Function} event callback function + * @param vObject {Object ? window} reference to the 'this' variable inside the callback + */ +qx.Proto.removeEventListener = function(vType, vFunction, vObject) +{ + if(this._disposed) { + return; + } + + var vListeners = this._listeners; + if (!vListeners || vListeners[vType] === undefined) { + return; + } + + if(typeof vFunction !== "function") { + throw new Error("qx.core.Target: removeEventListener(" + vType + "): '" + vFunction + "' is not a function!"); + } + + // Create a special vKey string to allow identification of each bound action + var vKey = qx.core.Target.EVENTPREFIX + qx.core.Object.toHashCode(vFunction) + (vObject ? "_" + qx.core.Object.toHashCode(vObject) : ""); + + // Delete object entry for this action + delete this._listeners[vType][vKey]; +} + + + +/* +--------------------------------------------------------------------------- + EVENT CONNECTION UTILITIES +--------------------------------------------------------------------------- +*/ + +/** + * Check if there are one or more listeners for an event type. + * + * @param vType {String} name of the event type + */ +qx.Proto.hasEventListeners = function(vType) { + return this._listeners && typeof this._listeners[vType] !== "undefined" && !qx.lang.Object.isEmpty(this._listeners[vType]); +} + + +/** + * Checks if the event is registered. If so it creates an event object and dispatches it. + * + * @param vType {String} name of the event type + */ +qx.Proto.createDispatchEvent = function(vType) +{ + if (this.hasEventListeners(vType)) { + this.dispatchEvent(new qx.event.type.Event(vType), true); + } +} + + +/** + * Checks if the event is registered. If so it creates an event object and dispatches it. + * + * @param vType {String} name of the event type + * @param vData {Object} user defined data attached to the event object + */ +qx.Proto.createDispatchDataEvent = function(vType, vData) +{ + if (this.hasEventListeners(vType)) { + this.dispatchEvent(new qx.event.type.DataEvent(vType, vData), true); + } +} + + + +/* +--------------------------------------------------------------------------- + EVENT DISPATCH +--------------------------------------------------------------------------- +*/ + +/** + * Dispatch an event + * + * @param vEvent {qx.event.type.Event} event to dispatch + * @param vEnableDispose {Boolean} wether the event object should be disposed after all event handlers run. + * @return {Boolean} wether the event default was prevented or not. Returns true, when the event was NOT prevented. + */ +qx.Proto.dispatchEvent = function(vEvent, vEnableDispose) +{ + // Ignore event if eventTarget is disposed + if(this.getDisposed() && this.getEnabled()) { + return; + } + + if (vEvent.getTarget() == null) { + vEvent.setTarget(this); + } + + if (vEvent.getCurrentTarget() == null) { + vEvent.setCurrentTarget(this); + } + + // Dispatch Event + this._dispatchEvent(vEvent, vEnableDispose); + + // Read default prevented + var defaultPrevented = vEvent._defaultPrevented; + + // enable dispose for event? + vEnableDispose && vEvent.dispose(); + + return !defaultPrevented; +} + + +/** + * Internal event dispatch method + * + * @param vEvent {qx.event.type.Event} event to dispatch + */ +qx.Proto._dispatchEvent = function(vEvent) +{ + var vListeners = this._listeners; + if (vListeners) + { + // Setup current target + vEvent.setCurrentTarget(this); + + // Shortcut for listener data + var vTypeListeners = vListeners[vEvent.getType()]; + + if(vTypeListeners) + { + var vFunction, vObject; + + // Handle all events for the specified type + for (var vHashCode in vTypeListeners) + { + // Shortcuts for handler and object + vFunction = vTypeListeners[vHashCode].handler; + vObject = vTypeListeners[vHashCode].object || this; + + // Call object function + try + { + vFunction.call(vObject, vEvent); + } + catch(ex) + { + this.error("Could not dispatch event of type \"" + vEvent.getType() + "\"", ex); + } + } + } + } + + // Bubble event to parents + // TODO: Move this to Parent or Widget? + if(vEvent.getBubbles() && !vEvent.getPropagationStopped() && this.getParent) + { + var vParent = this.getParent(); + if (vParent && !vParent.getDisposed() && vParent.getEnabled()) { + vParent._dispatchEvent(vEvent); + } + } +} + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Destructor. + */ +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + if (typeof this._listeners === "object") + { + for (var vType in this._listeners) + { + var listener = this._listeners[vType]; + for (var vKey in listener) + { + listener[vKey] = null; + } + + this._listeners[vType] = null; + } + } + + this._listeners = null; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Version.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Version.js new file mode 100755 index 0000000000..6c67f7b763 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/core/Version.js @@ -0,0 +1,107 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Framework version number information + * + * TODO: + * <ul> + * <li>Resemble naming of http://en.wikipedia.org/wiki/Software_version</li> + * <li>Compare/unify with qx.type.Version</li> + * <li>The following class variables are not yet included in the api viewer: + * <ul> + * <li>major</li> + * <li>minor</li> + * <li>revision (rename to: maintenance)</li> + * <li>state</li> + * <li>svn (rename to: revision)</li> + * </ul> + * </li> + * </ul> + */ +qx.OO.defineClass("qx.core.Version"); + +/** {Integer} Major version number */ +qx.Class.major = 0; + +/** {Integer} Minor version number */ +qx.Class.minor = 0; + +/** {Integer} Maintenance number */ +qx.Class.revision = 0; + +/** {String} Revision state */ +qx.Class.state = ""; + +/** {Integer} Subversion revision number */ +qx.Class.svn = 0; + +/** {String} Subversion folder e.g. trunk, release_0_6_3, ... */ +qx.Class.folder = ""; + +/** + * returns the qooxdoo version string + * + * @return {String} qooxdoo version string + */ +qx.Class.toString = function() +{ + var vClass = qx.core.Version; + return vClass.major + "." + vClass.minor + + (vClass.revision==0 ? "" : "." + vClass.revision) + + (vClass.state == "" ? "" : "-" + vClass.state) + + (vClass.svn==0 ? "" : " (r" + vClass.svn + ")") + + (vClass.folder == "" ? "" : " [" + vClass.folder + "]"); +}; + +/** + * Initialize class members + */ +qx.Class._init = function() +{ + var vClass = qx.core.Version; + + var vSplit = qx.VERSION.split(" "); + var vVersion = vSplit.shift(); + var vInfos = vSplit.join(" "); + + if (/([0-9]+)\.([0-9]+)(\.([0-9]))?(-([a-z]+))?/.test(vVersion)) + { + vClass.major = (RegExp.$1 != "" ? parseInt(RegExp.$1) : 0); + vClass.minor = (RegExp.$2 != "" ? parseInt(RegExp.$2) : 0); + vClass.revision = (RegExp.$4 != "" ? parseInt(RegExp.$4) : 0); + vClass.state = typeof RegExp.$6 == "string" ? RegExp.$6 : ""; + } + + if (/(\(r([0-9]+)\))?(\s\[(\w+)\])?/.test(vInfos)) + { + vClass.svn = (RegExp.$2 != "" ? parseInt(RegExp.$2) : 0); + vClass.folder = typeof RegExp.$4 == "string" ? RegExp.$4 : ""; + } +}; + +// Initialize at load time +qx.Class._init(); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dev/Pollution.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dev/Pollution.js new file mode 100644 index 0000000000..73d17afe4c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dev/Pollution.js @@ -0,0 +1,290 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Carsten Lergenmueller (carstenl) + +************************************************************************ */ + +/* ************************************************************************ + +#module(dev) + +************************************************************************ */ + +/** + * Retrieve information about global namespace pollution + */ +qx.OO.defineClass("qx.dev.Pollution"); + +qx.Class.names = +{ + "window" : window, + "document" : document, + "body" : document.body +} + +qx.Class.ignore = +{ + "window" : + [ + // qooxdoo + "qx", + + // Java + "java", + "sun", + "Packages", + + // Firefox + "__firebug__", + "Components", + "controllers", + "sessionStorage", + "globalStorage", + + // Firefox extension: Firebug + "console", + + // IE + "event", + "offscreenBuffering", + "clipboardData", + "clientInformation", + "Option", + "Image", + "external", + "screenTop", + "screenLeft", + + // Standard + "length", + "window", + "document", + "location", + "navigator", + "netscape", + "parent", + "frames", + "top", + "scrollbars", + "name", + "scrollX", + "scrollY", + "self", + "screen", + "history", + "content", + "menubar", + "toolbar", + "locationbar", + "personalbar", + "statusbar", + "directories", + "closed", + "crypto", + "pkcs11", + "opener", + "status", + "defaultStatus", + "innerWidth", + "innerHeight", + "outerWidth", + "outerHeight", + "screenX", + "screenY", + "pageXOffset", + "pageYOffset", + "scrollMaxX", + "scrollMaxY", + "fullScreen", + "frameElement", + "XMLHttpRequest" + ], + + "document" : + [ + "domConfig", + "location", + "compatMode", + "implementation", + "defaultView", + "title", + "body", + "styleSheets", + "documentElement", + "nodeName", + "nodeType", + "firstChild", + "lastChild", + "doctype", + "images", + "applets", + "links", + "forms", + "anchors", + "cookie", + "embeds", + "plugins", + "designMode", + "childNodes" + ], + + "body" : + [ + "textContent", + "innerHTML", + "outerHTML", + "innerText", + "outerText", + "scopeName", + "parentElement", + "tagName", + "filters", + "contentEditable", + "document", + "currentStyle", + "isMultiLine", + "clientHeight", + "clientWidth", + + "lastChild", + "firstChild", + "offsetTop", + "offsetLeft", + "offsetWidth", + "offsetHeight", + "tabIndex", + "className", + "attributes", + "previousSibling", + "nextSibling", + "ownerDocument", + "localName", + "childNodes", + "parentNode", + "nodeType", + "nodeName", + "style", + + "scrollTop", + "scrollLeft", + "scrollWidth", + "scrollHeight" + ] +} + +qx.Class.consoleInfo = function(object) +{ + var msg = qx.dev.Pollution.getTextList(object); + + if (msg) { + alert("Global namespace is polluted by the following unknown objects:\n\n" + msg); + } else { + alert("Global namespace is not polluted by any unknown objects."); + } +} + +qx.Class.extract = function(object) +{ + var ext = []; + var ign = qx.dev.Pollution.ignore[object]; + var clientInfos = qx.core.Client.getInstance(); + + //IE offers a window[index] access to the frames of a window, i. e. + //for three frame, the window object will have attributes "0", "1" and "2" + if (clientInfos.isMshtml() && (object == "window")){ + ign = ign.slice(); + for (var frameIndex = 0; frameIndex < window.length; frameIndex++){ + ign.push("" + frameIndex); + } + } + + var obj = qx.dev.Pollution.names[object]; + + for (var key in obj) + { + try + { + //MS IE 7 crashes when doing typeof(window.external), catch here + if ( clientInfos.isMshtml() && (clientInfos.getMajor() >= 7) + && (object == "window") && (key == "external") ) { + continue; + } + + // Ignore null or undefined values + if (typeof obj[key] == "undefined" || obj[key] === null) { + continue; + } + + // Ignore native code + if (typeof obj[key] == "function" && obj[key].toString().indexOf("[native code]") != -1) { + continue; + } + + // Ignore if configured + if (qx.lang.Array.contains(ign, key)) { + continue; + } + + } + catch(ex) + { + continue; + } + + ext.push({ "key" : key, "value" : obj[key] }); + } + + return ext; +} + +qx.Class.getHtmlTable = function(object) +{ + var all = []; + + var rowStart = "<tr style='vertical-align:top'><td>"; + var cellSplit = "</td><td>"; + var rowEnd = "</td></tr>"; + + all.push("<table>"); + + var ext = this.extract(object); + + for (var i=0; i<ext.length; i++) { + all.push(rowStart + ext[i].key + cellSplit + ext[i].value + rowEnd); + } + + all.push("</table>"); + + return all.join(""); +} + +qx.Class.getTextList = function(object) +{ + var all = []; + + var cellSplit = ": "; + var rowEnd = "\n"; + + var ext = this.extract(object); + + for (var i=0; i<ext.length; i++) { + all.push(ext[i].key + cellSplit + ext[i].value + rowEnd); + } + + return all.join(""); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dev/TimeTracker.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dev/TimeTracker.js new file mode 100755 index 0000000000..15d09af537 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dev/TimeTracker.js @@ -0,0 +1,323 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(dev) +#embed(qx.icontheme/16/actions/dialog-ok.png) + +************************************************************************ */ + +qx.OO.defineClass("qx.dev.TimeTracker", qx.core.Object, +function() +{ + qx.core.Object.call(this); + + this._functions = qx.lang.Array.fromArguments(arguments); + + this.buttonSets(); +}); + +qx.dev.TimeTracker.compare = function(a, b) { + return a-b; +} + + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.buttonSets = function() +{ + var btnLayout = new qx.ui.layout.HorizontalBoxLayout; + + btnLayout.setLocation(20, 48); + btnLayout.setSpacing(5); + + var loopLabel = new qx.ui.basic.Atom("Method Loops: "); + loopLabel.setAllowStretchY(false); + loopLabel.setVerticalAlign("middle"); + + var loopInput = new qx.ui.form.TextField("100"); + loopInput.setAllowStretchY(false); + loopInput.setWidth(50); + loopInput.setVerticalAlign("middle"); + + var repeatLabel = new qx.ui.basic.Atom("Repeat Number: "); + repeatLabel.setAllowStretchY(false); + repeatLabel.setVerticalAlign("middle"); + repeatLabel.setMarginLeft(30); + + var btnStart1 = new qx.ui.form.Button("Start 3x", "icon/16/actions/dialog-ok.png"); + var btnStart2 = new qx.ui.form.Button("Start 7x", "icon/16/actions/dialog-ok.png"); + var btnStart3 = new qx.ui.form.Button("Start 15x", "icon/16/actions/dialog-ok.png"); + var btnStart4 = new qx.ui.form.Button("Start 25x", "icon/16/actions/dialog-ok.png"); + + btnStart1.addEventListener("execute", function() { this.start(3, parseInt(loopInput.getValue())); }, this); + btnStart2.addEventListener("execute", function() { this.start(7, parseInt(loopInput.getValue())); }, this); + btnStart3.addEventListener("execute", function() { this.start(15, parseInt(loopInput.getValue())); }, this); + btnStart4.addEventListener("execute", function() { this.start(25, parseInt(loopInput.getValue())); }, this); + + var htmlOutput = this._output = new qx.ui.embed.HtmlEmbed(); + + htmlOutput.setHtml(""); + htmlOutput.setLocation(20, 78); + htmlOutput.setRight(335); + htmlOutput.setBottom(48); + htmlOutput.setBorder("1px solid black"); + htmlOutput.setBackgroundColor("white"); + htmlOutput.setPadding(10); + htmlOutput.setOverflow("auto"); + htmlOutput.addToDocument(); + + btnLayout.add(loopLabel, loopInput, repeatLabel, btnStart1, btnStart2, btnStart3, btnStart4); + btnLayout.addToDocument(); +} + +qx.Proto.start = function(vRounds, vLoops) +{ + var vFuncs = this._functions; + var vLength = vFuncs.length; + var vStart; + var vLocalTimes; + var vAllTimes = []; + var vHtmlMeasured = []; + var vHtmlResults = []; + var vCellWidth = Math.round(100 / (vLength+1)) + "%"; + + vHtmlMeasured.push("<h3>Measured Values</h3>"); + + vHtmlMeasured.push("<style type='text/css'>.output{border: 1px solid black; width:100%; margin-bottom: 20px } .output thead{ font-weight: bold; } .output td, .output th{ text-align:left; width: " + vCellWidth + "; } .output td{padding:4px}</style>"); + + vHtmlMeasured.push("<table class='output'>"); + + vHtmlMeasured.push("<thead>"); + + vHtmlMeasured.push("<tr><td> </td>"); + + for (var j=0; j<vLength; j++) { + vHtmlMeasured.push("<td>Method " + (j+1) + "</td>"); + } + + vHtmlMeasured.push("</thead><tbody>"); + + for (var i=0; i<vRounds; i++) + { + vLocalTimes = []; + + for (var j=0; j<vLength; j++) + { + vStart = (new Date).valueOf(); + + vFuncs[j](vLoops); + + vLocalTimes.push((new Date).valueOf()-vStart); + } + + vHtmlMeasured.push("<tr><th>Round " + i + "</th>"); + + for (var j=0; j<vLocalTimes.length; j++) { + vHtmlMeasured.push("<td>" + vLocalTimes[j] + "</td>"); + } + + vHtmlMeasured.push("</tr>"); + vAllTimes.push(vLocalTimes); + } + + vHtmlMeasured.push("</tbody></table>"); + + + + + + var vSum, vMeanValue, vMeanAll=[], vMeanMin=1e7, vMeanMax=0; + + for (var j=0; j<vLength; j++) + { + vSum = 0; + + for (var i=0; i<vRounds; i++) + { + vSum += vAllTimes[i][j]; + } + + vMeanValue = Math.round(vSum / vRounds); + + vMeanAll.push(vMeanValue); + + vMeanMin = Math.min(vMeanMin, vMeanValue); + vMeanMax = Math.max(vMeanMax, vMeanValue); + } + + + + var vMedian, vMedianValue, vMedianAll=[], vMedianMin=1e7, vMedianMax=0; + + for (var j=0; j<vLength; j++) + { + vMedian = []; + + for (var i=0; i<vRounds; i++) + { + vMedian.push(vAllTimes[i][j]); + } + + vMedian.sort(qx.dev.TimeTracker.compare); + vMedianValue = vMedian[Math.floor(vRounds / 2)].toString(); + + vMedianAll.push(vMedianValue); + + vMedianMin = Math.min(vMedianValue, vMedianMin); + vMedianMax = Math.max(vMedianValue, vMedianMax); + } + + + + + + vHtmlResults.push("<h3>Results Summary</h3>"); + + vHtmlResults.push("<table class='output'>"); + + vHtmlResults.push("<thead>"); + + vHtmlResults.push("<tr><td> </td>"); + + for (var j=0; j<vLength; j++) { + vHtmlResults.push("<td>Method " + (j+1) + "</td>"); + } + + vHtmlResults.push("</thead><tbody>"); + + + vHtmlResults.push("<tr>"); + + vHtmlResults.push("<th>Median</th>"); + + for (var j=0; j<vLength; j++) { + vHtmlResults.push("<td>" + vMedianAll[j] + "</td>"); + } + + vHtmlResults.push("</tr>"); + + + + vHtmlResults.push("<tr>"); + + vHtmlResults.push("<th>Median Factor</th>"); + + for (var j=0; j<vLength; j++) + { + vHtmlResults.push("<td>"); + vHtmlResults.push(vMedianMin > 0 ? Math.round(vMedianAll[j] / vMedianMin) : "1"); + vHtmlResults.push("x</td>"); + } + + vHtmlResults.push("</tr>"); + + + + vHtmlResults.push("<tr>"); + + vHtmlResults.push("<th>Mean</th>"); + + for (var j=0; j<vLength; j++) { + vHtmlResults.push("<td>" + vMeanAll[j] + "</td>"); + } + + vHtmlResults.push("</tr>"); + + + + vHtmlResults.push("<tr>"); + + vHtmlResults.push("<th>Mean Factor</th>"); + + for (var j=0; j<vLength; j++) + { + vHtmlResults.push("<td>"); + vHtmlResults.push(vMeanMin > 0 ? Math.round(vMeanAll[j] / vMeanMin) : 1); + vHtmlResults.push("x</td>"); + } + + vHtmlResults.push("</tr>"); + + + + vHtmlResults.push("<tr>"); + + vHtmlResults.push("<th>Winner</th>"); + + for (var j=0; j<vLength; j++) + { + vHtmlResults.push("<td>"); + + if (vMedianMin == vMedianAll[j] && vMeanMin == vMeanAll[j]) + { + vHtmlResults.push("BOTH"); + } + + else if (vMedianMin == vMedianAll[j]) + { + vHtmlResults.push("MEDIAN"); + } + + else if (vMeanMin == vMeanAll[j]) + { + vHtmlResults.push("MEAN"); + } + + vHtmlResults.push("</td>"); + } + + vHtmlResults.push("</tr>"); + + vHtmlResults.push("</tbody></table>"); + + this._output.setHtml(vHtmlResults.join("") + vHtmlMeasured.join("")); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._functions = null; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/Element.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/Element.js new file mode 100644 index 0000000000..cf570f74f8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/Element.js @@ -0,0 +1,96 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/** + * Crossbrowser operations on DOM Elements + */ +qx.OO.defineClass("qx.dom.Element"); + + +/** + * Removes whitespace-only text node children + * + * @param vElement {Element} DOM element + */ +qx.Class.cleanWhitespace = function(vElement) +{ + for (var i=0; i<vElement.childNodes.length; i++) + { + var node = vElement.childNodes[i]; + + if (node.nodeType == qx.dom.Node.TEXT && !/\S/.test(node.nodeValue)) { + vElement.removeChild(node); + } + } +} + + +/** + * Checks if a element has no content + * + * @param vElement {Element} DOM element + */ +qx.Class.isEmpty = function(vElement) { + return vElement.innerHTML.match(/^\s*$/); +} + + +/** + * Returns the text content of a DOM element + * http://developer.mozilla.org/en/docs/DOM:element.textContent + * + * @param element {Element} DOM element + * @return {String} + */ + qx.Class.getTextContent = function(element) { + var text = ""; + var childNodes = element.childNodes; + for (var i=0; i<childNodes.length; i++) { + var node = childNodes[i]; + if (node.nodeType == qx.dom.Node.TEXT || node.nodeType == qx.dom.Node.CDATA_SECTION) { + text += node.nodeValue; + } + } + return text; +}; + + +/** + * Sets the textValue of the given DOM element (http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Node3-textContent). + * Wrapper for element.innerText and element.textContent. + * + * @param vElement {Element} DOM element + * @param sValue {String} the value + */ +qx.Class.setTextContent = function(vElement, sValue) {}; + +if (qx.core.Client.getInstance().supportsTextContent()) { + qx.Class.setTextContent = function(vElement, sValue) { + vElement.textContent = sValue; + }; +} else if (qx.core.Client.getInstance().supportsInnerText()) { + qx.Class.setTextContent = function(vElement, sValue) { + vElement.innerText = sValue; + }; +} else { + qx.Class.setTextContent = function(vElement, sValue) { + vElement.innerHTML = qx.html.String.escape(sValue); + }; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/Node.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/Node.js new file mode 100644 index 0000000000..aa747a099c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/Node.js @@ -0,0 +1,43 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Types of DOM nodes + */ +qx.OO.defineClass("qx.dom.Node", +{ + ELEMENT : 1, + ATTRIBUTE : 2, + TEXT : 3, + CDATA_SECTION : 4, + ENTITY_REFERENCE : 5, + ENTITY : 6, + PROCESSING_INSTRUCTION : 7, + COMMENT : 8, + DOCUMENT : 9, + DOCUMENT_TYPE : 10, + DOCUMENT_FRAGMENT : 11, + NOTATION : 12 +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/String.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/String.js new file mode 100644 index 0000000000..a5979c026b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/dom/String.js @@ -0,0 +1,109 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.lang.Object) + +************************************************************************ */ + +/** + * Generic escaping and unescaping of DOM strings. + * + * {@link qx.html.String} for (un)escaping of HTML strings. + * + * {@link qx.xml.String} for (un)escaping of XML strings. + */ +qx.OO.defineClass("qx.dom.String"); + + +/** + * generic escaping method + * + * @param str {String} string to escape + * @param charcodeToEntities {Map} entity to charcode map + */ +qx.Class.escapeEntities = function(str, charcodeToEntities) { + var result = []; + for (var i=0; i<str.length; i++) { + var chr = str.charAt(i); + var code = chr.charCodeAt(0) + if (charcodeToEntities[code]) { + var entity = "&" + charcodeToEntities[code] + ";"; + } else { + if (code > 0x7F) { + entity = "&#" + code + ";"; + } else { + entity = chr; + } + } + result.push(entity); + } + return result.join(""); +}; + + +/** + * generic unescaping method + * + * @param str {String} string to unescape + * @param entitiesToCharCode {Map} charcode to entity map + */ +qx.Class.unescapeEntities = function(str, entitiesToCharCode) { + return str.replace(/&[#\w]+;/gi, function(entity) { + var chr = entity; + var entity = entity.substring(1, entity.length-1); + var code = entitiesToCharCode[entity]; + if (code) { + chr = String.fromCharCode(code); + } else { + if (entity.charAt(0) == '#') { + if (entity.charAt(1).toUpperCase() == 'X') { + var code = entity.substring(2); + // match hex number + if (code.match(/^[0-9A-Fa-f]+$/gi)) { + chr = String.fromCharCode(parseInt("0x" + code)); + } + } else { + var code = entity.substring(1); + // match integer + if (code.match(/^\d+$/gi)) { + chr = String.fromCharCode(parseInt(code)); + } + } + } + } + return chr; + }); +}; + + +/** + * Remove HTML/XML tags from a string + * Example: + * <pre>qx.dom.String.stripTags("<h1>Hello</h1>") == "Hello"</pre> + * + * @param str {String} string containing tags + * @return {String} the string with stripped tags + */ +qx.Class.stripTags = function(str) { + return str.replace(/<\/?[^>]+>/gi, ""); +}; + + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js new file mode 100644 index 0000000000..48b3cdf517 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/DragAndDropHandler.js @@ -0,0 +1,952 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_dragdrop) +#load(qx.html.ElementFromPoint) +#embed(qx.widgettheme/cursors/*) + +************************************************************************ */ + +/** + * This manager (singleton) manage all drag and drop handling of a qx.core.Init instance. + */ +qx.OO.defineClass("qx.event.handler.DragAndDropHandler", qx.manager.object.ObjectManager, +function() +{ + qx.core.Target.call(this); + + this._data = {}; + this._actions = {}; + this._cursors = {}; + + var vCursor; + for (var vAction in this._actionNames) + { + vCursor = this._cursors[vAction] = new qx.ui.basic.Image(this._cursorPath + vAction + "." + this._cursorFormat); + vCursor.setZIndex(1e8); + } +}); + +qx.OO.addProperty({ name : "sourceWidget", type : "object" }); +qx.OO.addProperty({ name : "destinationWidget", type : "object" }); +qx.OO.addProperty({ name : "cursor", type : "object" }); +qx.OO.addProperty({ name : "currentAction", type : "string" }); + +/** + * The default delta x of the cursor feedback. + * + * @see #setCursorPosition + */ +qx.OO.addProperty({ name : "defaultCursorDeltaX", type : "number", defaultValue : 5, allowNull : false }); + +/** + * The default delta y of the cursor feedback. + * + * @see #setCursorPosition + */ +qx.OO.addProperty({ name : "defaultCursorDeltaY", type : "number", defaultValue : 15, allowNull : false }); + +qx.Proto._actionNames = +{ + move : "move", + copy : "copy", + alias : "alias", + nodrop : "nodrop" +} + +qx.Proto._cursorPath = "widget/cursors/"; +qx.Proto._cursorFormat = "gif"; +qx.Proto._lastDestinationEvent = null; + + + + + +/* +--------------------------------------------------------------------------- + COMMON MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyDestinationWidget = function(propValue, propOldValue, propData) +{ + if (propValue) + { + propValue.dispatchEvent(new qx.event.type.DragEvent("dragdrop", this._lastDestinationEvent, propValue, this.getSourceWidget())); + this._lastDestinationEvent = null; + } + + return true; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DATA HANDLING +--------------------------------------------------------------------------- +*/ + +/*! +Add data of mimetype. + +#param vMimeType[String]: A valid mimetype +#param vData[Any]: Any value for the mimetype +*/ +qx.Proto.addData = function(vMimeType, vData) { + this._data[vMimeType] = vData; +} + +qx.Proto.getData = function(vMimeType) { + return this._data[vMimeType]; +} + +qx.Proto.clearData = function() { + this._data = {}; +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + MIME TYPE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getDropDataTypes = function() +{ + var vDestination = this.getDestinationWidget(); + var vDropTypes = []; + + // If there is not any destination, simple return + if (!vDestination) { + return vDropTypes; + } + + // Search for matching mimetypes + var vDropDataTypes = vDestination.getDropDataTypes(); + + for (var i=0, l=vDropDataTypes.length; i<l; i++) { + if (vDropDataTypes[i] in this._data) { + vDropTypes.push(vDropDataTypes[i]); + } + } + + return vDropTypes; +} + + + + + + + +/* +--------------------------------------------------------------------------- + START DRAG +--------------------------------------------------------------------------- +*/ + +/*! +This needed be called from any "dragstart" event to really start drag session. +*/ +qx.Proto.startDrag = function() +{ + if (!this._dragCache) { + throw new Error("Invalid usage of startDrag. Missing dragInfo!"); + } + + // Update status flag + this._dragCache.dragHandlerActive = true; + + // Internal storage of source widget + this.setSourceWidget(this._dragCache.sourceWidget); + + // Add feedback widget + if (this._feedbackWidget) { + this._feedbackWidget.setVisibility(false); + + var doc = qx.ui.core.ClientDocument.getInstance(); + doc.add(this._feedbackWidget); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + FIRE IMPLEMENTATION FOR USER EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._fireUserEvents = function(fromWidget, toWidget, e) +{ + if (fromWidget && fromWidget != toWidget && fromWidget.hasEventListeners("dragout")) { + fromWidget.dispatchEvent(new qx.event.type.DragEvent("dragout", e, fromWidget, toWidget), true); + } + + if (toWidget) + { + if (fromWidget != toWidget && toWidget.hasEventListeners("dragover")) { + toWidget.dispatchEvent(new qx.event.type.DragEvent("dragover", e, toWidget, fromWidget), true); + } + + if (toWidget.hasEventListeners("dragmove")) { + toWidget.dispatchEvent(new qx.event.type.DragEvent("dragmove", e, toWidget, null), true); + } + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + HANDLER FOR MOUSE EVENTS +--------------------------------------------------------------------------- +*/ + +/*! +This wraps the mouse events to custom handlers. +*/ +qx.Proto.handleMouseEvent = function(e) +{ + switch (e.getType()) + { + case "mousedown": + return this._handleMouseDown(e); + + case "mouseup": + return this._handleMouseUp(e); + + case "mousemove": + return this._handleMouseMove(e); + } +} + +/*! +This starts the core drag and drop session. + +To really get drag and drop working you need to define +a function which you attach to "dragstart"-event, which +invokes at least this.startDrag() +*/ +qx.Proto._handleMouseDown = function(e) +{ + if (e.getDefaultPrevented() || ! e.isLeftButtonPressed()) { + return; + } + + // Store initial dragCache + this._dragCache = + { + startScreenX : e.getScreenX(), + startScreenY : e.getScreenY(), + + pageX : e.getPageX(), + pageY : e.getPageY(), + + sourceWidget : e.getTarget(), + sourceTopLevel : e.getTarget().getTopLevelWidget(), + + dragHandlerActive : false, + hasFiredDragStart : false + } +} + + +/*! +Handler for mouse move events +*/ + +qx.Proto._handleMouseMove = function(e) +{ + // Return if dragCache was not filled before + if (!this._dragCache) { + return; + } + + /* + Default handling if drag handler is activated + */ + + if (this._dragCache.dragHandlerActive) + { + // Update page coordinates + this._dragCache.pageX = e.getPageX(); + this._dragCache.pageY = e.getPageY(); + + // Get current target + var currentDropTarget = this.getDropTarget(e); + + // Update action + this.setCurrentAction(currentDropTarget ? this._evalNewAction(e.isShiftPressed(), e.isCtrlPressed(), e.isAltPressed()) : null); + + // Fire user events + this._fireUserEvents(this._dragCache.currentDropWidget, currentDropTarget, e); + + // Store current widget + this._dragCache.currentDropWidget = currentDropTarget; + + // Update cursor icon + this._renderCursor(); + + // Update user feedback + this._renderFeedbackWidget(); + } + + /* + Initial activation and fire of dragstart + */ + else if (!this._dragCache.hasFiredDragStart) + { + if (Math.abs(e.getScreenX() - this._dragCache.startScreenX) > 5 || Math.abs(e.getScreenY() - this._dragCache.startScreenY) > 5) + { + // Fire dragstart event to finally allow the above if to handle next events + this._dragCache.sourceWidget.dispatchEvent(new qx.event.type.DragEvent("dragstart", e, this._dragCache.sourceWidget), true); + + // Update status flag + this._dragCache.hasFiredDragStart = true; + + // Look if handler become active + if (this._dragCache.dragHandlerActive) + { + // Fire first user events + this._fireUserEvents(this._dragCache.currentDropWidget, this._dragCache.sourceWidget, e); + + // Update status flags + this._dragCache.currentDropWidget = this._dragCache.sourceWidget; + + // Activate capture for clientDocument + qx.ui.core.ClientDocument.getInstance().setCapture(true); + } + } + } +} + +/*! +Handle mouse up event. Normally this finalize the drag and drop event. +*/ +qx.Proto._handleMouseUp = function(e) +{ + // Return if dragCache was not filled before + if (!this._dragCache) { + return; + } + + if (this._dragCache.dragHandlerActive) + { + this._endDrag(this.getDropTarget(e), e); + } + else + { + // Clear drag cache + this._dragCache = null; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + HANDLER FOR KEY EVENTS +--------------------------------------------------------------------------- +*/ + +/*! +This wraps the key events to custom handlers. +*/ +qx.Proto.handleKeyEvent = function(e) +{ + if (!this._dragCache) { + return; + } + + switch (e.getType()) + { + case "keydown": + this._handleKeyDown(e); + return; + + case "keyup": + this._handleKeyUp(e); + return; + } +} + +qx.Proto._handleKeyDown = function(e) +{ + // Stop Drag on Escape + if (e.getKeyIdentifier() == "Escape") + { + this.cancelDrag(e); + } + + // Update cursor and action on press of modifier keys + else if (this.getCurrentAction() != null) + { + // TODO this doesn't work in WebKit because WebKit doesn't fire keyevents for modifier keys + switch(e.getKeyIdentifier()) + { + case "Shift": + case "Control": + case "Alt": + this.setAction(this._evalNewAction(e.isShiftPressed(), e.isCtrlPressed(), e.isAltPressed())); + this._renderCursor(); + + e.preventDefault(); + } + } +} + +qx.Proto._handleKeyUp = function(e) +{ + // TODO this doesn't work in WebKit because WebKit doesn't fire keyevents for modifier keys + var bShiftPressed = e.getKeyIdentifier() == "Shift"; + var bCtrlPressed = e.getKeyIdentifier() == "Control"; + var bAltPressed = e.getKeyIdentifier() == "Alt"; + + if (bShiftPressed || bCtrlPressed || bAltPressed) + { + if (this.getCurrentAction() != null) + { + this.setAction(this._evalNewAction(!bShiftPressed && e.isShiftPressed(), ! bCtrlPressed && e.isCtrlPressed(), !bAltPressed && e.isAltPressed())); + this._renderCursor(); + + e.preventDefault(); + } + } +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + IMPLEMENTATION OF DRAG&DROP SESSION FINALISATION +--------------------------------------------------------------------------- +*/ + +/*! + Cancel current drag and drop session +*/ +qx.Proto.cancelDrag = function(e) { + // Return if dragCache was not filled before + if (!this._dragCache) { + return; + } + + if (this._dragCache.dragHandlerActive) + { + this._endDrag(null, e); + } + else + { + // Clear drag cache + this._dragCache = null; + } +} + +qx.Proto.globalCancelDrag = function() +{ + if (this._dragCache && this._dragCache.dragHandlerActive) { + this._endDragCore(); + } +} + +/*! + This will be called to the end of each drag and drop session +*/ +qx.Proto._endDrag = function(currentDestinationWidget, e) +{ + // Use given destination widget + if (currentDestinationWidget) + { + this._lastDestinationEvent = e; + this.setDestinationWidget(currentDestinationWidget); + } + + // Dispatch dragend event + this.getSourceWidget().dispatchEvent(new qx.event.type.DragEvent("dragend", e, this.getSourceWidget(), currentDestinationWidget), true); + + // Fire dragout event + this._fireUserEvents(this._dragCache && this._dragCache.currentDropWidget, null, e); + + // Call helper + this._endDragCore(); +} + +qx.Proto._endDragCore = function() +{ + // Cleanup feedback widget + if (this._feedbackWidget) { + var doc = qx.ui.core.ClientDocument.getInstance(); + doc.remove(this._feedbackWidget); + + if (this._feedbackAutoDispose) { + this._feedbackWidget.dispose(); + } + + this._feedbackWidget = null; + } + + // Remove cursor + var oldCursor = this.getCursor(); + if (oldCursor) + { + oldCursor._style.display = "none"; + this.forceCursor(null); + } + + this._cursorDeltaX = null; + this._cursorDeltaY = null; + + // Reset drag cache for next drag and drop session + if (this._dragCache) + { + this._dragCache.currentDropWidget = null; + this._dragCache = null; + } + + // Deactivate capture for clientDocument + qx.ui.core.ClientDocument.getInstance().setCapture(false); + + // Cleanup data and actions + this.clearData(); + this.clearActions(); + + // Cleanup widgets + this.setSourceWidget(null); + this.setDestinationWidget(null); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + IMPLEMENTATION OF CURSOR UPDATES +--------------------------------------------------------------------------- +*/ + +/** + * Sets the position of the cursor feedback (the icon showing whether dropping + * is allowed at the current position and which action a drop will do). + * + * @param deltaX {int} The number of pixels the top-left corner of the + * cursor feedback should be away from the mouse cursor in x direction. + * @param deltaY {int} The number of pixels the top-left corner of the + * cursor feedback should be away from the mouse cursor in y direction. + */ +qx.Proto.setCursorPosition = function(deltaX, deltaY) { + this._cursorDeltaX = deltaX; + this._cursorDeltaY = deltaY; +}; + +/*! + Select and setup the current used cursor +*/ +qx.Proto._renderCursor = function() +{ + var vNewCursor; + var vOldCursor = this.getCursor(); + + switch(this.getCurrentAction()) + { + case this._actionNames.move: + vNewCursor = this._cursors.move; + break; + + case this._actionNames.copy: + vNewCursor = this._cursors.copy; + break; + + case this._actionNames.alias: + vNewCursor = this._cursors.alias; + break; + + default: + vNewCursor = this._cursors.nodrop; + } + + // Hide old cursor + if (vNewCursor != vOldCursor && vOldCursor != null) { + vOldCursor._style.display = "none"; + } + + // Ensure that the cursor is created + if (!vNewCursor._initialLayoutDone) + { + qx.ui.core.ClientDocument.getInstance().add(vNewCursor); + qx.ui.core.Widget.flushGlobalQueues(); + } + + // Apply position with runtime style (fastest qooxdoo method) + vNewCursor._applyRuntimeLeft(this._dragCache.pageX + + ((this._cursorDeltaX != null) ? this._cursorDeltaX : this.getDefaultCursorDeltaX())); + vNewCursor._applyRuntimeTop(this._dragCache.pageY + + ((this._cursorDeltaY != null) ? this._cursorDeltaY : this.getDefaultCursorDeltaY())); + + // Finally show new cursor + if (vNewCursor != vOldCursor) { + vNewCursor._style.display = ""; + } + + // Store new cursor + this.forceCursor(vNewCursor); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + IMPLEMENTATION OF DROP TARGET VALIDATION +--------------------------------------------------------------------------- +*/ + +qx.Proto.supportsDrop = function(vWidget) +{ + var vTypes = vWidget.getDropDataTypes(); + + if (!vTypes) { + return false; + } + + for (var i=0; i<vTypes.length; i++) + { + if (vTypes[i] in this._data) { + return true; + } + } + + return false; +} + +/*! +#param e[qx.event.type.MouseEvent]: Current MouseEvent for dragdrop action +*/ +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto.getDropTarget = function(e) + { + var vCurrent = e.getTarget(); + + // work around gecko bug (all other browsers are correct) + // clicking on a free space and drag prohibit the get of + // a valid event target. The target is always the element + // which was the one with the mousedown event before. + if (vCurrent == this._dragCache.sourceWidget) + { + // vCurrent = qx.event.handler.EventHandler.getTargetObject(qx.html.ElementFromPoint.getElementFromPoint(e.getPageX(), e.getPageY())); + + // this is around 8-12 times faster as the above method + vCurrent = this._dragCache.sourceTopLevel.getWidgetFromPoint(e.getPageX(), e.getPageY()); + } + else + { + vCurrent = qx.event.handler.EventHandler.getTargetObject(null, vCurrent); + } + + while (vCurrent != null && vCurrent != this._dragCache.sourceWidget) + { + if (!vCurrent.supportsDrop(this._dragCache)) { + return null; + } + + if (this.supportsDrop(vCurrent)) { + return vCurrent; + } + + vCurrent = vCurrent.getParent(); + } + + return null; + } +} +else +{ + qx.Proto.getDropTarget = function(e) + { + var vCurrent = e.getTarget(); + + while (vCurrent != null) + { + if (!vCurrent.supportsDrop(this._dragCache)) { + return null; + } + + if (this.supportsDrop(vCurrent)) { + return vCurrent; + } + + vCurrent = vCurrent.getParent(); + } + + return null; + } +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + ACTION HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.addAction = function(vAction, vForce) +{ + this._actions[vAction] = true; + + // Defaults to first added action + if (vForce || this.getCurrentAction() == null) { + this.setCurrentAction(vAction); + } +} + +qx.Proto.clearActions = function() +{ + this._actions = {}; + this.setCurrentAction(null); +} + +qx.Proto.removeAction = function(vAction) +{ + delete this._actions[vAction]; + + // Reset current action on remove + if (this.getCurrentAction() == vAction) { + this.setCurrentAction(null); + } +} + +qx.Proto.setAction = function(vAction) +{ + if (vAction != null && !(vAction in this._actions)) { + this.addAction(vAction, true); + } + else + { + this.setCurrentAction(vAction); + } +} + +qx.Proto._evalNewAction = function(vKeyShift, vKeyCtrl, vKeyAlt) +{ + if (vKeyShift && vKeyCtrl && this._actionNames.alias in this._actions) + { + return this._actionNames.alias; + } + else if (vKeyShift && vKeyAlt && this._actionNames.copy in this._actions) + { + return this._actionNames.copy; + } + else if (vKeyShift && this._actionNames.move in this._actions) + { + return this._actionNames.move; + } + else if (vKeyAlt && this._actionNames.alias in this._actions) + { + return this._actionNames.alias; + } + else if (vKeyCtrl && this._actionNames.copy in this._actions) + { + return this._actionNames.copy; + } + else + { + // Return the first action found + for (var vAction in this._actions) { + return vAction; + } + } + + return null; +} + + + + + + +/* +--------------------------------------------------------------------------- + USER FEEDBACK SUPPORT +--------------------------------------------------------------------------- +*/ + +/** + * Sets the widget to show as feedback for the user. This widget should + * represent the object(s) the user is dragging. + * + * @param widget {qx.ui.core.Widget} the feedback widget. + * @param deltaX {int ? 10} the number of pixels the top-left corner of the widget + * should be away from the mouse cursor in x direction. + * @param deltaY {int ? 10} the number of pixels the top-left corner of the widget + * should be away from the mouse cursor in y direction. + * @param autoDisposeWidget {boolean} whether the widget should be disposed when + * dragging is finished or cancelled. + */ +qx.Proto.setFeedbackWidget = function(widget, deltaX, deltaY, autoDisposeWidget) { + this._feedbackWidget = widget; + this._feedbackDeltaX = (deltaX != null) ? deltaX : 10; + this._feedbackDeltaY = (deltaY != null) ? deltaY : 10; + this._feedbackAutoDispose = autoDisposeWidget ? true : false; +}; + +/** + * Renders the user feedback widget at the correct location. + */ +qx.Proto._renderFeedbackWidget = function() { + if (this._feedbackWidget) { + this._feedbackWidget.setVisibility(true); + + // Apply position with runtime style (fastest qooxdoo method) + this._feedbackWidget._applyRuntimeLeft(this._dragCache.pageX + this._feedbackDeltaX); + this._feedbackWidget._applyRuntimeTop(this._dragCache.pageY + this._feedbackDeltaY); + } +}; + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Reset drag cache for next drag and drop session + if (this._dragCache) + { + this._dragCache.currentDropWidget = null; + this._dragCache = null; + } + + // Cleanup data and actions + this._data = null; + this._actions = null; + this._actionNames = null; + + this._lastDestinationEvent = null; + + if (this._cursors) + { + if (this._cursors.move) + { + this._cursors.move.dispose(); + delete this._cursors.move; + } + + if (this._cursors.copy) + { + this._cursors.copy.dispose(); + delete this._cursors.copy; + } + + if (this._cursors.alias) + { + this._cursors.alias.dispose(); + delete this._cursors.alias; + } + + if (this._cursors.nodrop) + { + this._cursors.nodrop.dispose(); + delete this._cursors.nodrop; + } + + this._cursors = null; + } + + return qx.manager.object.ObjectManager.prototype.dispose.call(this); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/EventHandler.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/EventHandler.js new file mode 100644 index 0000000000..858f8d6096 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/EventHandler.js @@ -0,0 +1,1182 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.event.type.KeyEvent) +#require(qx.event.handler.KeyEventHandler) +#optional(qx.event.handler.DragAndDropHandler) +#optional(qx.manager.object.MenuManager) +#optional(qx.event.handler.FocusHandler) +#optional(qx.manager.object.PopupManager) +#optional(qx.manager.object.ToolTipManager) + +************************************************************************ */ + +/** + * This manager registers and manage all incoming key and mouse events. + * + * @event error {qx.event.type.DataEvent} Fired when an exception was thrown + * when dispatching the event to the listeners. The event's property + * "data" holds the exception. + */ +qx.OO.defineClass("qx.event.handler.EventHandler", qx.core.Target, +function() +{ + qx.core.Target.call(this); + + // Object Wrapper to Events (Needed for DOM-Events) + var o = this; + + // User Events + this.__onmouseevent = function(e) { return o._onmouseevent(e); }; + this.__ondragevent = function(e) { return o._ondragevent(e); }; + this.__onselectevent = function(e) { return o._onselectevent(e); }; + + // Window Events + this.__onwindowblur = function(e) { return o._onwindowblur(e); }; + this.__onwindowfocus = function(e) { return o._onwindowfocus(e); }; + this.__onwindowresize = function(e) { return o._onwindowresize(e); }; + + // Init Command Interface + this._commands = {}; +}); + + + + + + +qx.OO.addProperty({ name : "allowClientContextMenu", type : "boolean", defaultValue : false }); +qx.OO.addProperty({ name : "allowClientSelectAll", type : "boolean", defaultValue : false }); + +qx.OO.addProperty({ name : "captureWidget", type : "object", instance : "qx.ui.core.Widget", allowNull : true }); +qx.OO.addProperty({ name : "focusRoot", type : "object", instance : "qx.ui.core.Parent", allowNull : true }); + + + + + + +qx.Class.mouseEventTypes = [ "mouseover", "mousemove", "mouseout", "mousedown", "mouseup", "click", "dblclick", "contextmenu", qx.core.Client.getInstance().isMshtml() ? "mousewheel" : "DOMMouseScroll" ]; +qx.Class.keyEventTypes = [ "keydown", "keypress", "keyup" ]; + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Class.dragEventTypes = [ "dragdrop", "dragover", "dragenter", "dragexit", "draggesture" ]; +} +else if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Class.dragEventTypes = [ "dragend", "dragover", "dragstart", "drag", "dragenter", "dragleave" ]; +} +else +{ + qx.Class.dragEventTypes = [ "dragstart", "dragdrop", "dragover", "drag", "dragleave", "dragenter", "dragexit", "draggesture" ]; +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + STATE FLAGS +--------------------------------------------------------------------------- +*/ + +qx.Proto._lastMouseEventType = null; +qx.Proto._lastMouseDown = false; +qx.Proto._lastMouseEventDate = 0; + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyCaptureWidget = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.setCapture(false); + } + + if (propValue) { + propValue.setCapture(true); + } + + return true; +} + +qx.Proto._modifyFocusRoot = function(propValue, propOldValue, propData) +{ + // this.debug("FocusRoot: " + propValue + "(from:" + propOldValue + ")"); + + if (propOldValue) { + propOldValue.setFocusedChild(null); + } + + if (propValue) + { + if (propValue.getFocusedChild() == null) { + propValue.setFocusedChild(propValue); + } + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + COMMAND INTERFACE +--------------------------------------------------------------------------- +*/ + +qx.Proto.addCommand = function(vCommand) { + this._commands[vCommand.toHashCode()] = vCommand; +} + +qx.Proto.removeCommand = function(vCommand) { + delete this._commands[vCommand.toHashCode()]; +} + +qx.Proto._checkKeyEventMatch = function(e) +{ + var vCommand; + + for (var vHash in this._commands) + { + vCommand = this._commands[vHash]; + + if (vCommand.getEnabled() && vCommand._matchesKeyEvent(e)) + { + // allow the user to stop the event + // through the execute event. + if (!vCommand.execute(e.getTarget())) { + e.preventDefault(); + } + + break; + } + } +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT-MAPPING +--------------------------------------------------------------------------- +*/ + +qx.Proto.attachEvents = function() +{ + // Register dom events + this.attachEventTypes(qx.event.handler.EventHandler.mouseEventTypes, this.__onmouseevent); + this.attachEventTypes(qx.event.handler.EventHandler.dragEventTypes, this.__ondragevent); + + // Unregister separate handler events + qx.event.handler.KeyEventHandler.getInstance()._attachEvents(); + + // Register window events + qx.html.EventRegistration.addEventListener(window, "blur", this.__onwindowblur); + qx.html.EventRegistration.addEventListener(window, "focus", this.__onwindowfocus); + qx.html.EventRegistration.addEventListener(window, "resize", this.__onwindowresize); + + // Register selection events + document.body.onselect = document.onselectstart = document.onselectionchange = this.__onselectevent; +} + +qx.Proto.detachEvents = function() +{ + // Unregister dom events + this.detachEventTypes(qx.event.handler.EventHandler.mouseEventTypes, this.__onmouseevent); + this.detachEventTypes(qx.event.handler.EventHandler.dragEventTypes, this.__ondragevent); + + // Unregister separate handler events + qx.event.handler.KeyEventHandler.getInstance()._detachEvents(); + + // Unregister window events + qx.html.EventRegistration.removeEventListener(window, "blur", this.__onwindowblur); + qx.html.EventRegistration.removeEventListener(window, "focus", this.__onwindowfocus); + qx.html.EventRegistration.removeEventListener(window, "resize", this.__onwindowresize); + + // Unregister selection events + document.body.onselect = document.onselectstart = document.onselectionchange = null; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT-MAPPING HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto.attachEventTypes = function(vEventTypes, vFunctionPointer) +{ + try + { + // Gecko is a bit buggy to handle key events on document if not previously focused + // I think they will fix this sometimes, and we should add a version check here. + // Internet Explorer has problems to use 'window', so there we use the 'body' element + // as previously. + var el = qx.core.Client.getInstance().isGecko() ? window : document.body; + + for (var i=0, l=vEventTypes.length; i<l; i++) { + qx.html.EventRegistration.addEventListener(el, vEventTypes[i], vFunctionPointer); + } + } + catch(ex) + { + throw new Error("qx.event.handler.EventHandler: Failed to attach window event types: " + vEventTypes + ": " + ex); + } +} + +qx.Proto.detachEventTypes = function(vEventTypes, vFunctionPointer) +{ + try + { + var el = qx.core.Client.getInstance().isGecko() ? window : document.body; + + for (var i=0, l=vEventTypes.length; i<l; i++) { + qx.html.EventRegistration.removeEventListener(el, vEventTypes[i], vFunctionPointer); + } + } + catch(ex) + { + throw new Error("qx.event.handler.EventHandler: Failed to detach window event types: " + vEventTypes + ": " + ex); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + HELPER METHODS +--------------------------------------------------------------------------- +*/ + +// BUG: http://xscroll.mozdev.org/ +// If your Mozilla was built with an option `--enable-default-toolkit=gtk2', +// it can not return the correct event target for DOMMouseScroll. + +qx.Class.getOriginalTargetObject = function(vNode) +{ + // Events on the HTML element, when using absolute locations which + // are outside the HTML element. Opera does not seem to fire events + // on the HTML element. + if (vNode == document.documentElement) { + vNode = document.body; + } + + // Walk up the tree and search for an qx.ui.core.Widget + while(vNode != null && vNode.qx_Widget == null) + { + try { + vNode = vNode.parentNode; + } + catch(vDomEvent) + { + vNode = null; + } + } + + return vNode ? vNode.qx_Widget : null; +} + +if (qx.core.Client.getInstance().isWebkit()) +{ + /** + * extract the target node from a DOM event + * http://www.quirksmode.org/js/events_properties.html + * + * @param vDomEvent {Event} + * @return {Element} the target node + */ + qx.Class.getDomTarget = function(vDomEvent) + { + var vNode = vDomEvent.target || vDomEvent.srcElement; + + // Safari takes text nodes as targets for events + if (vNode && (vNode.nodeType == qx.dom.Node.TEXT)) { + vNode = vNode.parentNode; + } + + return vNode; + }; +} +else if (qx.core.Client.getInstance().isMshtml()) +{ + /** + * extract the target node from a DOM event + * http://www.quirksmode.org/js/events_properties.html + * + * @param vDomEvent {Event} + * @return {Element} the target node + */ + qx.Class.getDomTarget = function(vDomEvent) { + return vDomEvent.target || vDomEvent.srcElement; + }; +} +else +{ + /** + * extract the target node from a DOM event + * http://www.quirksmode.org/js/events_properties.html + * + * @param vDomEvent {Event} + * @return {Element} the target node + */ + qx.Class.getDomTarget = function(vDomEvent) { + return vDomEvent.target; + }; +} + + +qx.Class.getOriginalTargetObjectFromEvent = function(vDomEvent, vWindow) +{ + var vNode = qx.event.handler.EventHandler.getDomTarget(vDomEvent); + + // Especially to fix key events. + // 'vWindow' is the window reference then + if (vWindow) + { + var vDocument = vWindow.document; + + if (vNode == vWindow || vNode == vDocument || vNode == vDocument.documentElement || vNode == vDocument.body) { + return vDocument.body.qx_Widget; + } + } + + return qx.event.handler.EventHandler.getOriginalTargetObject(vNode); +} + +qx.Class.getRelatedOriginalTargetObjectFromEvent = function(vDomEvent) { + return qx.event.handler.EventHandler.getOriginalTargetObject(vDomEvent.relatedTarget || (vDomEvent.type == "mouseover" ? vDomEvent.fromElement : vDomEvent.toElement)); +} + + + + + + + +qx.Class.getTargetObject = function(vNode, vObject, allowDisabled) +{ + if (!vObject) + { + var vObject = qx.event.handler.EventHandler.getOriginalTargetObject(vNode); + + if (!vObject) { + return null; + } + } + + // Search parent tree + while(vObject) + { + // Break if current object is disabled - + // event should be ignored then. + if (!allowDisabled && !vObject.getEnabled()) { + return null; + } + + // If object is anonymous, search for + // first parent which is not anonymous + // and not disabled + if (!vObject.getAnonymous()) { + break; + } + + vObject = vObject.getParent(); + } + + return vObject; +}; + + +qx.Class.getTargetObjectFromEvent = function(vDomEvent) { + return qx.event.handler.EventHandler.getTargetObject(qx.event.handler.EventHandler.getDomTarget(vDomEvent)); +}; + + +qx.Class.getRelatedTargetObjectFromEvent = function(vDomEvent) { + var target = vDomEvent.relatedTarget; + if (!target) { + if (vDomEvent.type == "mouseover") { + target = vDomEvent.fromElement + } else { + target = vDomEvent.toElement + } + } + return qx.event.handler.EventHandler.getTargetObject(target); +}; + + +/** + * stops further propagation of the event + * + * @param vDomEvent {Element} DOM event object + */ +qx.Class.stopDomEvent = function(vDomEvent) {}; +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Class.stopDomEvent = function(vDomEvent) { + vDomEvent.returnValue = false; + } +} +else +{ + qx.Class.stopDomEvent = function(vDomEvent) + { + vDomEvent.preventDefault(); + vDomEvent.returnValue = false; + } +}; + + + + + + + +/* +--------------------------------------------------------------------------- + KEY EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeyevent_post = function(vDomEvent, vType, vKeyCode, vCharCode, vKeyIdentifier) +{ + var vDomTarget = qx.event.handler.EventHandler.getDomTarget(vDomEvent); + + + // Find current active qooxdoo object + var vFocusRoot = this.getFocusRoot(); + var vTarget = this.getCaptureWidget() || (vFocusRoot == null ? null : vFocusRoot.getActiveChild()); + + if (vTarget == null || !vTarget.getEnabled()) { + return false; + } + + var vDomEventTarget = vTarget.getElement(); + + + + + // Hide Menus + switch(vKeyIdentifier) + { + case "Escape": + case "Tab": + if (qx.OO.isAvailable("qx.manager.object.MenuManager")) { + qx.manager.object.MenuManager.getInstance().update(vTarget, vType); + } + + break; + } + + + + + // TODO: Move this to KeyEvent? + + // Prohibit CTRL+A + if (!this.getAllowClientSelectAll()) + { + if (vDomEvent.ctrlKey && vKeyIdentifier == "A") + { + switch(vDomTarget.tagName.toLowerCase()) + { + case "input": + case "textarea": + case "iframe": + break; + + default: + qx.event.handler.EventHandler.stopDomEvent(vDomEvent); + } + } + } + + + + // Create Event Object + var vKeyEventObject = new qx.event.type.KeyEvent(vType, vDomEvent, vDomTarget, vTarget, null, vKeyCode, vCharCode, vKeyIdentifier); + + // Check for commands + if (vDomEvent.type == "keydown") { + this._checkKeyEventMatch(vKeyEventObject); + } + + try { + // Starting Objects Internal Event Dispatcher + // This handles the real event action + vTarget.dispatchEvent(vKeyEventObject); + + // Send event to qx.event.handler.DragAndDropHandler + if (qx.OO.isAvailable("qx.event.handler.DragAndDropHandler")) { + qx.event.handler.DragAndDropHandler.getInstance().handleKeyEvent(vKeyEventObject); + } + } catch (ex) { + this.error("Failed to dispatch key event", ex); + this.createDispatchDataEvent("error", ex); + } + + // Cleanup Event Object + vKeyEventObject.dispose(); + + // Flush Queues + qx.ui.core.Widget.flushGlobalQueues(); +} + + + + + + +/* +--------------------------------------------------------------------------- + MOUSE EVENTS +--------------------------------------------------------------------------- +*/ + +/*! + This one handle all mouse events + + When a user double clicks on a qx.ui.core.Widget the + order of the mouse events is the following: + + 1. mousedown + 2. mouseup + 3. click + 4. mousedown + 5. mouseup + 6. click + 7. dblclick +*/ + +if(qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._onmouseevent = function(vDomEvent) + { + qx.core.Init.getInstance().getComponent().preload(); + + if(!vDomEvent) { + vDomEvent = window.event; + } + + var vDomTarget = qx.event.handler.EventHandler.getDomTarget(vDomEvent); + var vType = vDomEvent.type; + + if(vType == "mousemove") + { + if (this._mouseIsDown && vDomEvent.button == 0) + { + this._onmouseevent_post(vDomEvent, "mouseup"); + this._mouseIsDown = false; + } + } + else + { + if(vType == "mousedown") + { + this._mouseIsDown = true; + } + else if(vType == "mouseup") + { + this._mouseIsDown = false; + } + + // Fix MSHTML Mouseup, should be after a normal click or contextmenu event, like Mozilla does this + if(vType == "mouseup" && !this._lastMouseDown && ((new Date).valueOf() - this._lastMouseEventDate) < 250) + { + this._onmouseevent_post(vDomEvent, "mousedown"); + } + // Fix MSHTML Doubleclick, should be after a normal click event, like Mozilla does this + else if(vType == "dblclick" && this._lastMouseEventType == "mouseup" && ((new Date).valueOf() - this._lastMouseEventDate) < 250) + { + this._onmouseevent_post(vDomEvent, "click"); + } + + switch(vType) + { + case "mousedown": + case "mouseup": + case "click": + case "dblclick": + case "contextmenu": + this._lastMouseEventType = vType; + this._lastMouseEventDate = (new Date).valueOf(); + this._lastMouseDown = vType == "mousedown"; + } + } + + this._onmouseevent_post(vDomEvent, vType, vDomTarget); + } +} +else +{ + qx.Proto._onmouseevent = function(vDomEvent) + { + qx.core.Init.getInstance().getComponent().preload(); + + var vDomTarget = qx.event.handler.EventHandler.getDomTarget(vDomEvent); + var vType = vDomEvent.type; + + switch(vType) + { + case "DOMMouseScroll": + // normalize mousewheel event + vType = "mousewheel"; + break; + + case "click": + case "dblclick": + // ignore click or dblclick events with other then the left mouse button + if (vDomEvent.which !== 1) { + return; + } + } + + this._onmouseevent_post(vDomEvent, vType, vDomTarget); + } +} + +/*! +Fixes browser quirks with 'click' detection + +Firefox 1.5.0.6: The DOM-targets are different. The click event only fires, if the target of the + mousedown is the same than with the mouseup. If the content moved away, the click isn't fired. + +Internet Explorer 6.0: The DOM-targets are identical and the click fires fine. + +Opera 9.01: The DOM-targets are different, but the click fires fine. Fires click successfull, + even if the content under the cursor was moved away. +*/ +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._onmouseevent_click_fix = function(vDomTarget, vType, vDispatchTarget) + { + var vReturn = false; + + switch(vType) + { + case "mousedown": + this._lastMouseDownDomTarget = vDomTarget; + this._lastMouseDownDispatchTarget = vDispatchTarget; + break; + + case "mouseup": + // Add additional click event if the dispatch target is the same, but the dom target is different + if (this._lastMouseDownDispatchTarget === vDispatchTarget && vDomTarget !== this._lastMouseDownDomTarget) + { + vReturn = true; + } + else + { + this._lastMouseDownDomTarget = null; + this._lastMouseDownDispatchTarget = null; + } + } + + return vReturn; + }; +} +else +{ + qx.Proto._onmouseevent_click_fix = function(vDomTarget, vDispatchTarget) { + return false; + } +}; + +/*! + This is the crossbrowser post handler for all mouse events. +*/ +qx.Proto._onmouseevent_post = function(vDomEvent, vType, vDomTarget) +{ + try + { + var vEventObject, vCaptureTarget, vDispatchTarget, vTarget, vOriginalTarget, vRelatedTarget, vFixClick, vTargetIsEnabled; + + + + // Check for capturing, if enabled the target is the captured widget. + vCaptureTarget = this.getCaptureWidget(); + + // Event Target Object + vOriginalTarget = qx.event.handler.EventHandler.getOriginalTargetObject(vDomTarget); + + // If capturing isn't active search for a valid target object + if (!vCaptureTarget) + { + // Get Target Object + vDispatchTarget = vTarget = qx.event.handler.EventHandler.getTargetObject(null, vOriginalTarget, true); + } + else + { + vDispatchTarget = vCaptureTarget; + vTarget = qx.event.handler.EventHandler.getTargetObject(null, vOriginalTarget, true); + } + + + + // If there is no target, we have nothing to do + if (!vTarget) { + return; + } + vTargetIsEnabled = vTarget.getEnabled(); + + // Fix click event + vFixClick = this._onmouseevent_click_fix(vDomTarget, vType, vDispatchTarget); + + + // Prevent the browser's native context menu + if (vType == "contextmenu" && !this.getAllowClientContextMenu()) { + qx.event.handler.EventHandler.stopDomEvent(vDomEvent); + } + + + // Update focus + if (vTargetIsEnabled && vType == "mousedown") { + qx.event.handler.FocusHandler.mouseFocus = true; + + var vRoot = vTarget.getFocusRoot(); + + if (vRoot) + { + this.setFocusRoot(vRoot); + + vRoot.setActiveChild(vTarget); + + // Active focus on element (if possible, else search up the parent tree) + var vFocusTarget = vTarget; + while (!vFocusTarget.isFocusable() && vFocusTarget != vRoot) { + vFocusTarget = vFocusTarget.getParent(); + } + + vRoot.setFocusedChild(vFocusTarget); + } + } + + + + + var vDomEventTarget = vTarget.getElement(); + + + + + // Find related target object + switch(vType) + { + case "mouseover": + case "mouseout": + vRelatedTarget = qx.event.handler.EventHandler.getRelatedTargetObjectFromEvent(vDomEvent); + + // Ignore events where the related target and + // the real target are equal - from our sight + if (vRelatedTarget == vTarget) { + return; + } + } + + + + try + { + + // Create Mouse Event Object + vEventObject = new qx.event.type.MouseEvent(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget, vRelatedTarget); + } + catch(ex) + { + return this.error("Failed to create mouse event", ex); + } + + + // Store last Event in MouseEvent Constructor + // Needed for Tooltips, ... + qx.event.type.MouseEvent._storeEventState(vEventObject); + + + if (vTargetIsEnabled) { + // Dispatch Event through target (eventtarget-)object + var vEventWasProcessed = false; + try { + vEventWasProcessed = vDispatchTarget ? vDispatchTarget.dispatchEvent(vEventObject) : true; + + // Handle Special Post Events + this._onmouseevent_special_post(vType, vTarget, vOriginalTarget, vDispatchTarget, vEventWasProcessed, vEventObject, vDomEvent); + } catch(ex) { + this.error("Failed to dispatch mouse event", ex); + this.createDispatchDataEvent("error", ex); + } + } else { + // target is disabled -> Pass the event only to the ToolTipManager + if (vType == "mouseover") { + if (qx.OO.isAvailable("qx.manager.object.ToolTipManager")) { + qx.manager.object.ToolTipManager.getInstance().handleMouseOver(vEventObject); + } + } + } + + + + // Dispose Event Object + vEventObject.dispose(); + vEventObject = null; + + + + + // Flush Queues + qx.ui.core.Widget.flushGlobalQueues(); + + + // Fix Click (Gecko Bug, see above) + if (vFixClick) + { + this._onmouseevent_post(vDomEvent, "click", this._lastMouseDownDomTarget); + + this._lastMouseDownDomTarget = null; + this._lastMouseDownDispatchTarget = null; + } + } + catch(ex) + { + return this.error("Failed to handle mouse event", ex); + } +} + + +qx.Proto._onmouseevent_special_post = function(vType, vTarget, vOriginalTarget, vDispatchTarget, vEventWasProcessed, vEventObject, vDomEvent) { + switch(vType) + { + case "mousedown": + if (qx.OO.isAvailable("qx.manager.object.PopupManager")) { + qx.manager.object.PopupManager.getInstance().update(vTarget); + } + + if (qx.OO.isAvailable("qx.manager.object.MenuManager")) { + qx.manager.object.MenuManager.getInstance().update(vTarget, vType); + } + + if (qx.OO.isAvailable("qx.manager.object.IframeManager")) { + qx.manager.object.IframeManager.getInstance().handleMouseDown(vEventObject); + } + + break; + + case "mouseup": + + // Mouseup event should always hide, independed of target, so don't send a target + if (qx.OO.isAvailable("qx.manager.object.MenuManager")) { + qx.manager.object.MenuManager.getInstance().update(vTarget, vType); + } + + if (qx.OO.isAvailable("qx.manager.object.IframeManager")) { + qx.manager.object.IframeManager.getInstance().handleMouseUp(vEventObject); + } + + break; + + case "mouseover": + if (qx.OO.isAvailable("qx.manager.object.ToolTipManager")) { + qx.manager.object.ToolTipManager.getInstance().handleMouseOver(vEventObject); + } + + break; + + case "mouseout": + if (qx.OO.isAvailable("qx.manager.object.ToolTipManager")) { + qx.manager.object.ToolTipManager.getInstance().handleMouseOut(vEventObject); + } + + break; + + case "mousewheel": + // priority for the real target not the (eventually captured) dispatch target + vEventWasProcessed ? this._onmousewheel(vOriginalTarget || vDispatchTarget, vEventObject) : qx.event.handler.EventHandler.stopDomEvent(vDomEvent); + + break; + } + + + + this._ignoreWindowBlur = vType === "mousedown"; + + + + + // Send Event Object to Drag&Drop Manager + if (qx.OO.isAvailable("qx.event.handler.DragAndDropHandler") && vTarget) { + qx.event.handler.DragAndDropHandler.getInstance().handleMouseEvent(vEventObject); + } +} + + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._onmousewheel = function(vTarget, vEvent) + { + if(vTarget == null) { + return; + } + + // ingore if overflow is configured as hidden + // in this case send the event to the parent instead + if(vTarget.getOverflowY() == "hidden") { + return this._onmousewheel(vTarget.getParent(), vEvent); + } + + var vScrollTop = vTarget.getScrollTop(); + var vDelta = 20 * vEvent.getWheelDelta(); + + // if already at the top edge and the user scrolls up + // then send the event to the parent instead + if(vScrollTop == 0 && vDelta > 0) { + return this._onmousewheel(vTarget.getParent(), vEvent); + } + + var vScrollHeight = vTarget.getScrollHeight(); + var vClientHeight = vTarget.getClientHeight(); + + // if already at the bottom edge and the user scrolls down + // then send the event to the parent instead + if(vScrollTop + vClientHeight >= vScrollHeight && vDelta < 0) { + return this._onmousewheel(vTarget.getParent(), vEvent); + } + + // apply new scroll position + vTarget.setScrollTop(vScrollTop - vDelta); + + // stop default handling, that works sometimes, too + vEvent.preventDefault(); + } +} +else +{ + qx.Proto._onmousewheel = function() {}; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DRAG EVENTS + + Currently only to stop non needed events +--------------------------------------------------------------------------- +*/ + +qx.Proto._ondragevent = function(vEvent) +{ + if (!vEvent) { + vEvent = window.event; + } + + qx.event.handler.EventHandler.stopDomEvent(vEvent); +} + + + + + + + +/* +--------------------------------------------------------------------------- + SELECT EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onselectevent = function(e) +{ + if(!e) { + e = window.event; + } + + var vTarget = qx.event.handler.EventHandler.getOriginalTargetObjectFromEvent(e); + + if(vTarget && !vTarget.getSelectable()) { + qx.event.handler.EventHandler.stopDomEvent(e); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + WINDOW EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._focused = false; + +qx.Proto._onwindowblur = function(e) +{ + // this.debug("Try Window blur..."); + + if (!this._focused || this._ignoreWindowBlur) { + return; + } + + this._focused = false; + + // this.debug("Window blur..."); + + // Disable capturing + this.setCaptureWidget(null); + + // Hide Popups, Tooltips, ... + if (qx.OO.isAvailable("qx.manager.object.PopupManager")) { + qx.manager.object.PopupManager.getInstance().update(); + } + + // Hide Menus + if (qx.OO.isAvailable("qx.manager.object.MenuManager")) { + qx.manager.object.MenuManager.getInstance().update(); + } + + // Cancel Drag Operations + if (qx.OO.isAvailable("qx.event.handler.DragAndDropHandler")) { + qx.event.handler.DragAndDropHandler.getInstance().globalCancelDrag(); + } + + // Send blur event to client document + qx.ui.core.ClientDocument.getInstance().createDispatchEvent("windowblur"); +} + +qx.Proto._onwindowfocus = function(e) +{ + // this.debug("Try Window focus..."); + + if (this._focused) { + return; + } + + this._focused = true; + + // this.debug("Window focus..."); + + // Send focus event to client document + qx.ui.core.ClientDocument.getInstance().createDispatchEvent("windowfocus"); +} + +qx.Proto._onwindowresize = function(e) +{ + // Send resize event to client document + qx.ui.core.ClientDocument.getInstance().createDispatchEvent("windowresize"); +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSE +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Detach mouse events + this.detachEvents(); + + // Reset functions + this.__onmouseevent = this.__ondragevent = this.__onselectevent = null; + this.__onwindowblur = this.__onwindowfocus = this.__onwindowresize = null; + + // Cleanup + this._lastMouseEventType = null; + this._lastMouseDown = null; + this._lastMouseEventDate = null; + + this._lastMouseDownDomTarget = null; + this._lastMouseDownDispatchTarget = null; + + if (this._commands) + { + for (var vHash in this._commands) + { + this._commands[vHash].dispose(); + delete this._commands[vHash]; + } + + this._commands = null; + } + + qx.core.Target.prototype.dispose.call(this); +} + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/FocusHandler.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/FocusHandler.js new file mode 100644 index 0000000000..d21639e3dd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/FocusHandler.js @@ -0,0 +1,344 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#optional(qx.ui.core.Parent) +#optional(qx.ui.basic.Terminator) + +************************************************************************ */ + +/*! + This object gets an instance in each focus root and manage the focus handling for it. +*/ +qx.OO.defineClass("qx.event.handler.FocusHandler", qx.core.Target, +function(vWidget) +{ + qx.core.Target.call(this); + + if (vWidget != null) { + this._attachedWidget = vWidget; + } +}); + +qx.event.handler.FocusHandler.mouseFocus = false; + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getAttachedWidget = function() { + return this._attachedWidget; +} + + + + + + +/* +--------------------------------------------------------------------------- + TAB-EVENT HANDLING +--------------------------------------------------------------------------- +*/ + +// Check for TAB pressed +// * use keydown on mshtml +// * use keypress on vAll other (correct) browsers +// = same behaviour +qx.event.handler.FocusHandler.tabEventType = qx.core.Client.getInstance().isMshtml() ? "keydown" : "keypress"; + +qx.Proto._onkeyevent = function(vContainer, vEvent) +{ + if (vEvent.getKeyIdentifier() != "Tab") { + return; + } + + // Stop all key-events with a TAB keycode + vEvent.stopPropagation(); + vEvent.preventDefault(); + + // But only react on the one to use for this browser. + if (vEvent.getType() != qx.event.handler.FocusHandler.tabEventType) { + return; + } + + qx.event.handler.FocusHandler.mouseFocus = false; + + var vCurrent = this.getAttachedWidget().getFocusedChild(); + + // Support shift key to reverse widget detection order + if(!vEvent.isShiftPressed()) { + var vNext = vCurrent ? this.getWidgetAfter(vContainer, vCurrent) : this.getFirstWidget(vContainer); + } else { + var vNext = vCurrent ? this.getWidgetBefore(vContainer, vCurrent) : this.getLastWidget(vContainer); + } + + // If there was a widget found, focus it + if(vNext) + { + vNext.setFocused(true); + vNext._ontabfocus(); + } +} + +qx.Proto.compareTabOrder = function(c1, c2) +{ + // Sort-Check #1: Tab-Index + if(c1 == c2) { + return 0; + } + + var t1 = c1.getTabIndex(); + var t2 = c2.getTabIndex(); + + // The following are some ideas to handle focus after tabindex. + + // Sort-Check #2: Top-Position + if(t1 != t2) { + return t1 - t2; + } + + var y1 = qx.html.Location.getPageBoxTop(c1.getElement()); + var y2 = qx.html.Location.getPageBoxTop(c2.getElement()); + + if(y1 != y2) { + return y1 - y2; + } + + // Sort-Check #3: Left-Position + var x1 = qx.html.Location.getPageBoxLeft(c1.getElement()); + var x2 = qx.html.Location.getPageBoxLeft(c2.getElement()); + + if(x1 != x2) { + return x1 - x2; + } + + // Sort-Check #4: zIndex + var z1 = c1.getZIndex(); + var z2 = c2.getZIndex(); + + if(z1 != z2) { + return z1 - z2; + } + + return 0; +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES FOR TAB HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getFirstWidget = function(vParentContainer) { + return this._getFirst(vParentContainer, null); +} + +qx.Proto.getLastWidget = function(vParentContainer) { + return this._getLast(vParentContainer, null); +} + +qx.Proto.getWidgetAfter = function(vParentContainer, vWidget) +{ + if(vParentContainer == vWidget) { + return this.getFirstWidget(vParentContainer); + } + + if(vWidget.getAnonymous()) { + vWidget = vWidget.getParent(); + } + + if(vWidget == null) { + return []; + } + + var vAll = []; + + this._getAllAfter(vParentContainer, vWidget, vAll); + + vAll.sort(this.compareTabOrder); + + return vAll.length > 0 ? vAll[0] : this.getFirstWidget(vParentContainer); +} + +qx.Proto.getWidgetBefore = function(vParentContainer, vWidget) +{ + if(vParentContainer == vWidget) { + return this.getLastWidget(vParentContainer); + } + + if(vWidget.getAnonymous()) { + vWidget = vWidget.getParent(); + } + + if(vWidget == null) { + return []; + } + + var vAll = []; + + this._getAllBefore(vParentContainer, vWidget, vAll); + + vAll.sort(this.compareTabOrder); + + var vChildrenLength = vAll.length; + return vChildrenLength > 0 ? vAll[vChildrenLength-1] : this.getLastWidget(vParentContainer); +} + +qx.Proto._getAllAfter = function(vParent, vWidget, vArray) +{ + var vChildren = vParent.getChildren(); + var vCurrentChild; + var vChildrenLength = vChildren.length; + + for (var i = 0; i < vChildrenLength; i++) + { + vCurrentChild = vChildren[i]; + + if(!(vCurrentChild instanceof qx.ui.core.Parent) && !(vCurrentChild instanceof qx.ui.basic.Terminator)) { + continue; + } + + if(vCurrentChild.isFocusable() && vCurrentChild.getTabIndex() > 0 && this.compareTabOrder(vWidget, vCurrentChild) < 0) { + vArray.push(vChildren[i]); + } + + if(!vCurrentChild.isFocusRoot() && vCurrentChild instanceof qx.ui.core.Parent) { + this._getAllAfter(vCurrentChild, vWidget, vArray); + } + } +} + +qx.Proto._getAllBefore = function(vParent, vWidget, vArray) +{ + var vChildren = vParent.getChildren(); + var vCurrentChild; + var vChildrenLength = vChildren.length; + + for (var i = 0; i < vChildrenLength; i++) + { + vCurrentChild = vChildren[i]; + + if(!(vCurrentChild instanceof qx.ui.core.Parent) && !(vCurrentChild instanceof qx.ui.basic.Terminator)) { + continue; + } + + if(vCurrentChild.isFocusable() && vCurrentChild.getTabIndex() > 0 && this.compareTabOrder(vWidget, vCurrentChild) > 0) { + vArray.push(vCurrentChild); + } + + if(!vCurrentChild.isFocusRoot() && vCurrentChild instanceof qx.ui.core.Parent) { + this._getAllBefore(vCurrentChild, vWidget, vArray); + } + } +} + +qx.Proto._getFirst = function(vParent, vFirstWidget) +{ + var vChildren = vParent.getChildren(); + var vCurrentChild; + var vChildrenLength = vChildren.length; + + for (var i = 0; i < vChildrenLength; i++) + { + vCurrentChild = vChildren[i]; + + if(!(vCurrentChild instanceof qx.ui.core.Parent) && !(vCurrentChild instanceof qx.ui.basic.Terminator)) { + continue; + } + + if(vCurrentChild.isFocusable() && vCurrentChild.getTabIndex() > 0) + { + if(vFirstWidget == null || this.compareTabOrder(vCurrentChild, vFirstWidget) < 0) { + vFirstWidget = vCurrentChild; + } + } + + if(!vCurrentChild.isFocusRoot() && vCurrentChild instanceof qx.ui.core.Parent) { + vFirstWidget = this._getFirst(vCurrentChild, vFirstWidget); + } + } + + return vFirstWidget; +} + +qx.Proto._getLast = function(vParent, vLastWidget) +{ + var vChildren = vParent.getChildren(); + var vCurrentChild; + var vChildrenLength = vChildren.length; + + for (var i = 0; i < vChildrenLength; i++) + { + vCurrentChild = vChildren[i]; + + if(!(vCurrentChild instanceof qx.ui.core.Parent) && !(vCurrentChild instanceof qx.ui.basic.Terminator)) { + continue; + } + + if(vCurrentChild.isFocusable() && vCurrentChild.getTabIndex() > 0) + { + if(vLastWidget == null || this.compareTabOrder(vCurrentChild, vLastWidget) > 0) { + vLastWidget = vCurrentChild; + } + } + + if(!vCurrentChild.isFocusRoot() && vCurrentChild instanceof qx.ui.core.Parent) { + vLastWidget = this._getLast(vCurrentChild, vLastWidget); + } + } + + return vLastWidget; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._attachedWidget = null; + + qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/KeyEventHandler.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/KeyEventHandler.js new file mode 100644 index 0000000000..fd44b75c79 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/handler/KeyEventHandler.js @@ -0,0 +1,659 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.event.type.KeyEvent) +#require(qx.lang.Function); + +************************************************************************ */ + +/** + * This class provides unified key event handler for Internet Explorer, + * Firefox, Opera and Safari + */ +qx.OO.defineClass("qx.event.handler.KeyEventHandler", qx.core.Target, function() +{ + qx.core.Target.call(this); + + // Object Wrapper to Events (Needed for DOM-Events) + var o = this; + + /** + * private + * + * @param e {Event} event + */ + this.__onkeypress = function(e) { o._onkeypress(e); }; + + /** + * private + * + * @param e {Event} event + */ + this.__onkeyupdown = function(e) { o._onkeyupdown(e); }; +}); + + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT-MAPPING +--------------------------------------------------------------------------- +*/ + +/** attach the key event handler to the DOM events */ +qx.Proto._attachEvents = function() +{ + var el = qx.core.Client.getInstance().isGecko() ? window : document.body; + + qx.html.EventRegistration.addEventListener(el, "keypress", this.__onkeypress); + qx.html.EventRegistration.addEventListener(el, "keyup", this.__onkeyupdown); + qx.html.EventRegistration.addEventListener(el, "keydown", this.__onkeyupdown); +}; + +/** detach the key event handler from the DOM events */ +qx.Proto._detachEvents = function() +{ + var el = qx.core.Client.getInstance().isGecko() ? window : document.body; + + // Unregister dom events + qx.html.EventRegistration.removeEventListener(el, "keypress", this.__onkeypress); + qx.html.EventRegistration.removeEventListener(el, "keyup", this.__onkeyupdown); + qx.html.EventRegistration.removeEventListener(el, "keydown", this.__onkeyupdown); +}; + + + + + + + + +/* +--------------------------------------------------------------------------- + KEY-MAPS +--------------------------------------------------------------------------- +*/ + +/** maps the charcodes of special printable keys to key identifiers */ +qx.Proto._specialCharCodeMap = +{ + 8 : "Backspace", // The Backspace (Back) key. + 9 : "Tab", // The Horizontal Tabulation (Tab) key. + 32 : "Space" // The Space (Spacebar) key. +}; + +/** maps the keycodes of non printable keys to key identifiers */ +qx.Proto._keyCodeToIdentifierMap = +{ + 13 : "Enter", // The Enter key. + // Note: This key identifier is also used for the + // Return (Macintosh numpad) key. + 16 : "Shift", // The Shift key. + 17 : "Control", // The Control (Ctrl) key. + 18 : "Alt", // The Alt (Menu) key. + 20 : "CapsLock", // The CapsLock key + 224 : "Meta", // The Meta key. (Apple Meta and Windows key) + + 27 : "Escape", // The Escape (Esc) key. + + 37 : "Left", // The Left Arrow key. + 38 : "Up", // The Up Arrow key. + 39 : "Right", // The Right Arrow key. + 40 : "Down", // The Down Arrow key. + + 33 : "PageUp", // The Page Up key. + 34 : "PageDown", // The Page Down (Next) key. + + 35 : "End", // The End key. + 36 : "Home", // The Home key. + 45 : "Insert", // The Insert (Ins) key. (Does not fire in Opera/Win) + 46 : "Delete", // The Delete (Del) Key. + + 112 : "F1", // The F1 key. + 113 : "F2", // The F2 key. + 114 : "F3", // The F3 key. + 115 : "F4", // The F4 key. + 116 : "F5", // The F5 key. + 117 : "F6", // The F6 key. + 118 : "F7", // The F7 key. + 119 : "F8", // The F8 key. + 120 : "F9", // The F9 key. + 121 : "F10", // The F10 key. + 122 : "F11", // The F11 key. + 123 : "F12", // The F12 key. + + 144 : "NumLock", // The Num Lock key. + 44 : "PrintScreen", // The Print Screen (PrintScrn, SnapShot) key. + 145 : "Scroll", // The scroll lock key + 19 : "Pause", // The pause/break key + + 91 : "Win", // The Windows Logo key + 93 : "Apps" // The Application key (Windows Context Menu) +}; + +/** maps the keycodes of the numpad keys to the right charcodes */ +qx.Proto._numpadToCharCode = +{ + 96 : "0".charCodeAt(0), + 97 : "1".charCodeAt(0), + 98 : "2".charCodeAt(0), + 99 : "3".charCodeAt(0), + 100 : "4".charCodeAt(0), + 101 : "5".charCodeAt(0), + 102 : "6".charCodeAt(0), + 103 : "7".charCodeAt(0), + 104 : "8".charCodeAt(0), + 105 : "9".charCodeAt(0), + + 106 : "*".charCodeAt(0), + 107 : "+".charCodeAt(0), + 109 : "-".charCodeAt(0), + 110 : ",".charCodeAt(0), + 111 : "/".charCodeAt(0) +}; + + +// construct invers of keyCodeToIdentifierMap +(function() +{ + if (!qx.Proto._identifierToKeyCodeMap) + { + qx.Proto._identifierToKeyCodeMap = {}; + + for (var key in qx.Proto._keyCodeToIdentifierMap) { + qx.Proto._identifierToKeyCodeMap[qx.Proto._keyCodeToIdentifierMap[key]] = parseInt(key); + } + + for (var key in qx.Proto._specialCharCodeMap) { + qx.Proto._identifierToKeyCodeMap[qx.Proto._specialCharCodeMap[key]] = parseInt(key); + } + } +})(); + + + + + + + +/* +--------------------------------------------------------------------------- + HELPER-METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto._charCodeA = "A".charCodeAt(0); +qx.Proto._charCodeZ = "Z".charCodeAt(0); +qx.Proto._charCode0 = "0".charCodeAt(0); +qx.Proto._charCode9 = "9".charCodeAt(0); + +/** + * Checks wether the keyCode represents a non printable key + * + * @param keyCode {String} + * @return {Boolean} + */ +qx.Proto._isNonPrintableKeyCode = function(keyCode) { + return this._keyCodeToIdentifierMap[keyCode] ? true : false; +}; + + +/** + * Check wether the keycode can be reliably detected in keyup/keydown events + * + * @param keyCode {String} + * @return {Boolean} + */ +qx.Proto._isIdentifiableKeyCode = function(keyCode) +{ + // A-Z + if (keyCode >= this._charCodeA && keyCode <= this._charCodeZ) { + return true; + } + + // 0-9 + if (keyCode >= this._charCode0 && keyCode <= this._charCode9) { + return true; + } + + // Enter, Space, Tab, Backspace + if (this._specialCharCodeMap[keyCode]) { + return true; + } + + // Numpad + if (this._numpadToCharCode[keyCode]) { + return true; + } + + // non printable keys + if (this._isNonPrintableKeyCode(keyCode)) { + return true; + } + + return false; +}; + + +/** + * Checks wether a given string is a valid keyIdentifier + * + * @param keyIdentifier {String} The key identifier. + * @return {Boolean} wether the given string is a valid keyIdentifier + */ +qx.Proto.isValidKeyIdentifier = function(keyIdentifier) +{ + if (this._identifierToKeyCodeMap[keyIdentifier]) { + return true; + } + + if (keyIdentifier.length != 1) { + return false; + } + + if (keyIdentifier >= "0" && keyIdentifier <= "9") { + return true; + } + + if (keyIdentifier >= "A" && keyIdentifier <= "Z") { + return true; + } + + switch (keyIdentifier) + { + case "+": + case "-": + case "*": + case "/": + return true; + + default: + return false; + } +}; + + +/** + * converts a keyboard code to the corresponding identifier + * + * @param keyCode {Integer} + * @return {String} key identifier + */ +qx.Proto._keyCodeToIdentifier = function(keyCode) +{ + if (this._isIdentifiableKeyCode(keyCode)) + { + var numPadKeyCode = this._numpadToCharCode[keyCode]; + if (numPadKeyCode) { + return String.fromCharCode(numPadKeyCode); + } + + return ( + this._keyCodeToIdentifierMap[keyCode] || + this._specialCharCodeMap[keyCode] || + String.fromCharCode(keyCode) + ); + } + else + { + return "Unidentified"; + } +}; + + +/** + * converts a character code to the corresponding identifier + * + * @param charCode {String} + * @return {String} key identifier + */ +qx.Proto._charCodeToIdentifier = function(charCode) { + return this._specialCharCodeMap[charCode] || String.fromCharCode(charCode).toUpperCase(); +}; + + +/** + * converts a key identifier back to a keycode + * + * @param keyIdentifier {String} + * @return {Integer} keyboard code + */ +qx.Proto._identifierToKeyCode = function(keyIdentifier) { + return this._identifierToKeyCodeMap[keyIdentifier] || keyIdentifier.charCodeAt(0); +}; + + + + + + + + +/* +--------------------------------------------------------------------------- + IDEALIZED-KEY-HANDLER +--------------------------------------------------------------------------- +*/ + +/** + * Key handler for an idealized browser. + * Runs after the browser specific key handlers have normalized the key events. + * + * @param keyCode {String} keyboard code + * @param charCode {String} character code + * @param eventType {String} type of the event (keydown, keypress, keyup) + * @param domEvent {Element} DomEvent + */ +qx.Proto._idealKeyHandler = function(keyCode, charCode, eventType, domEvent) +{ + if (!keyCode && !charCode) { + return; + } + + var keyIdentifier; + + // Use: keyCode + if (keyCode) + { + keyIdentifier = this._keyCodeToIdentifier(keyCode); + qx.event.handler.EventHandler.getInstance()._onkeyevent_post(domEvent, eventType, keyCode, charCode, keyIdentifier); + } + + // Use: charCode + else + { + keyIdentifier = this._charCodeToIdentifier(charCode); + qx.event.handler.EventHandler.getInstance()._onkeyevent_post(domEvent, "keypress", keyCode, charCode, keyIdentifier); + qx.event.handler.EventHandler.getInstance()._onkeyevent_post(domEvent, "keyinput", keyCode, charCode, keyIdentifier); + } +}; + + + + + + + + + +/* +--------------------------------------------------------------------------- + BROWSER-SPECIFIC-KEY-HANDLER: MSHTML +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._lastUpDownType = {}; + + qx.Proto._charCode2KeyCode = + { + 13 : 13, + 27 : 27 + }; + + qx.Proto._onkeyupdown = function(domEvent) + { + domEvent = window.event || domEvent; + + var keyCode = domEvent.keyCode; + var charcode = 0; + var type = domEvent.type; + + // Ignore the down in such sequences dp dp dp + if (!(this._lastUpDownType[keyCode] == "keydown" && type == "keydown")) { + this._idealKeyHandler(keyCode, charcode, type, domEvent); + } + + // On non print-able character be sure to add a keypress event + if (this._isNonPrintableKeyCode(keyCode) && type == "keydown") { + this._idealKeyHandler(keyCode, charcode, "keypress", domEvent); + } + + // Store last type + this._lastUpDownType[keyCode] = type; + }; + + qx.Proto._onkeypress = function(domEvent) + { + domEvent = window.event || domEvent; + + if (this._charCode2KeyCode[domEvent.keyCode]) { + this._idealKeyHandler(this._charCode2KeyCode[domEvent.keyCode], 0, domEvent.type, domEvent); + } else { + this._idealKeyHandler(0, domEvent.keyCode, domEvent.type, domEvent); + } + }; +} + + + + + + +/* +--------------------------------------------------------------------------- + BROWSER-SPECIFIC-KEY-HANDLER: GECKO +--------------------------------------------------------------------------- +*/ + +else if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._lastUpDownType = {}; + + qx.Proto._keyCodeFix = { + 12 : qx.Proto._identifierToKeyCode("NumLock") + }; + + /** + * key handler for Gecko + * + * @param domEvent {Element} DomEvent + */ + qx.Proto._onkeyupdown = qx.Proto._onkeypress = function(domEvent) + { + var keyCode = this._keyCodeFix[domEvent.keyCode] || domEvent.keyCode; + var charCode = domEvent.charCode; + var type = domEvent.type; + + // FF repeats under windows keydown events like IE + if (qx.core.Client.getInstance().runsOnWindows()) + { + var keyIdentifier = keyCode ? this._keyCodeToIdentifier(keyCode) : this._charCodeToIdentifier(charCode) + + if (!(this._lastUpDownType[keyIdentifier] == "keypress" && type == "keydown")) { + this._idealKeyHandler(keyCode, charCode, type, domEvent); + } + + // Store last type + this._lastUpDownType[keyIdentifier] = type; + } + + // all other OSes + else + { + this._idealKeyHandler(keyCode, charCode, type, domEvent); + } + }; +} + + + + + + +/* +--------------------------------------------------------------------------- + BROWSER-SPECIFIC-KEY-HANDLER: WEBKIT +--------------------------------------------------------------------------- +*/ + +else if (qx.core.Client.getInstance().isWebkit()) +{ + qx.Proto._charCode2KeyCode = + { + // Safari/Webkit Mappings + 63289 : qx.Proto._identifierToKeyCode("NumLock"), + 63276 : qx.Proto._identifierToKeyCode("PageUp"), + 63277 : qx.Proto._identifierToKeyCode("PageDown"), + 63275 : qx.Proto._identifierToKeyCode("End"), + 63273 : qx.Proto._identifierToKeyCode("Home"), + 63234 : qx.Proto._identifierToKeyCode("Left"), + 63232 : qx.Proto._identifierToKeyCode("Up"), + 63235 : qx.Proto._identifierToKeyCode("Right"), + 63233 : qx.Proto._identifierToKeyCode("Down"), + 63272 : qx.Proto._identifierToKeyCode("Delete"), + 63302 : qx.Proto._identifierToKeyCode("Insert"), + 63236 : qx.Proto._identifierToKeyCode("F1"), + 63237 : qx.Proto._identifierToKeyCode("F2"), + 63238 : qx.Proto._identifierToKeyCode("F3"), + 63239 : qx.Proto._identifierToKeyCode("F4"), + 63240 : qx.Proto._identifierToKeyCode("F5"), + 63241 : qx.Proto._identifierToKeyCode("F6"), + 63242 : qx.Proto._identifierToKeyCode("F7"), + 63243 : qx.Proto._identifierToKeyCode("F8"), + 63244 : qx.Proto._identifierToKeyCode("F9"), + 63245 : qx.Proto._identifierToKeyCode("F10"), + 63246 : qx.Proto._identifierToKeyCode("F11"), + 63247 : qx.Proto._identifierToKeyCode("F12"), + 63248 : qx.Proto._identifierToKeyCode("PrintScreen"), + + 3 : qx.Proto._identifierToKeyCode("Enter"), + 12 : qx.Proto._identifierToKeyCode("NumLock"), + 13 : qx.Proto._identifierToKeyCode("Enter") + }; + + qx.Proto._onkeyupdown = qx.Proto._onkeypress = function(domEvent) + { + var keyCode = 0; + var charCode = 0; + var type = domEvent.type; + + // prevent Safari from sending key signals twice + // This bug is fixed in recent Webkit builds so we need a revision check + // see http://trac.mochikit.com/ticket/182 for details + if (qx.core.Client.getInstance().getVersion() < 420) + { + if (!this._lastCharCodeForType) { + this._lastCharCodeForType = {}; + } + + var isSafariSpecialKey = this._lastCharCodeForType[type] > 63000; + + if (isSafariSpecialKey) { + this._lastCharCodeForType[type] = null; + return; + } + + this._lastCharCodeForType[type] = domEvent.charCode; + } + + if (type == "keyup" || type == "keydown") { + keyCode = this._charCode2KeyCode[domEvent.charCode] || domEvent.keyCode; + } + else + { + if (this._charCode2KeyCode[domEvent.charCode]) { + keyCode = this._charCode2KeyCode[domEvent.charCode]; + } else { + charCode = domEvent.charCode; + } + } + + this._idealKeyHandler(keyCode, charCode, type, domEvent); + }; +} + + + + + +/* +--------------------------------------------------------------------------- + BROWSER-SPECIFIC-KEY-HANDLER: OPERA +--------------------------------------------------------------------------- +*/ + +else if (qx.core.Client.getInstance().isOpera()) +{ + qx.Proto._onkeyupdown = function(domEvent) { + this._idealKeyHandler(domEvent.keyCode, 0, domEvent.type, domEvent); + }; + + qx.Proto._onkeypress = function(domEvent) + { + if (this._keyCodeToIdentifierMap[domEvent.keyCode]) { + this._idealKeyHandler(domEvent.keyCode, 0, domEvent.type, domEvent); + } else { + this._idealKeyHandler(0, domEvent.keyCode, domEvent.type, domEvent); + } + }; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSE +--------------------------------------------------------------------------- +*/ + +/** + * Destructor + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Detach keyboard events + this._detachEvents(); + + return qx.core.Target.prototype.dispose.call(this); +}; + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DataEvent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DataEvent.js new file mode 100644 index 0000000000..47e08a1771 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DataEvent.js @@ -0,0 +1,50 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/*! + Event object for property changes. +*/ +qx.OO.defineClass("qx.event.type.DataEvent", qx.event.type.Event, +function(vType, vData) +{ + qx.event.type.Event.call(this, vType); + + this.setData(vData); +}); + +qx.OO.addFastProperty({ name : "propagationStopped", defaultValue : false }); +qx.OO.addFastProperty({ name : "data" }); + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + this._valueData = null; + + return qx.event.type.Event.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DomEvent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DomEvent.js new file mode 100644 index 0000000000..b6fb710c7a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DomEvent.js @@ -0,0 +1,229 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.event.type.DomEvent", qx.event.type.Event, +function(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget) +{ + qx.event.type.Event.call(this, vType); + + this.setDomEvent(vDomEvent); + this.setDomTarget(vDomTarget); + + this.setTarget(vTarget); + this.setOriginalTarget(vOriginalTarget); +}); + +qx.OO.addFastProperty({ name : "bubbles", defaultValue : true, noCompute : true }); +qx.OO.addFastProperty({ name : "propagationStopped", defaultValue : false, noCompute : true }); + +qx.OO.addFastProperty({ name : "domEvent", setOnlyOnce : true, noCompute : true }); +qx.OO.addFastProperty({ name : "domTarget", setOnlyOnce : true, noCompute : true }); + +/** + * The modifiers. A mask of the pressed modifier keys. This is an OR-combination of + * {@link #SHIFT_MASK}, {@link #CTRL_MASK}, {@link #ALT_MASK} and {@link #META_MASK}. + */ +qx.OO.addCachedProperty({ name : "modifiers", defaultValue : null }); + + +// property computer +qx.Proto._computeModifiers = function() { + var mask = 0; + var evt = this.getDomEvent(); + if (evt.shiftKey) mask |= qx.event.type.DomEvent.SHIFT_MASK; + if (evt.ctrlKey) mask |= qx.event.type.DomEvent.CTRL_MASK; + if (evt.altKey) mask |= qx.event.type.DomEvent.ALT_MASK; + if (evt.metaKey) mask |= qx.event.type.DomEvent.META_MASK; + return mask; +} + + + + + + +/* +--------------------------------------------------------------------------- + SPECIAL KEY SUPPORT +--------------------------------------------------------------------------- +*/ + +/** + * Returns whether the the ctrl key is pressed. + * + * @return {Boolean} whether the the ctrl key is pressed. + */ +qx.Proto.isCtrlPressed = function() { + return this.getDomEvent().ctrlKey; +} + +/** + * Returns whether the the ctrl key is pressed. + * + * @return {Boolean} whether the the ctrl key is pressed. + * @deprecated Use {@link #isCtrlPressed} instead. + */ +qx.Proto.getCtrlKey = qx.Proto.isCtrlPressed; + + +/** + * Returns whether the the shift key is pressed. + * + * @return {Boolean} whether the the shift key is pressed. + */ +qx.Proto.isShiftPressed = function() { + return this.getDomEvent().shiftKey; +} + +/** + * Returns whether the the shift key is pressed. + * + * @return {Boolean} whether the the shift key is pressed. + * @deprecated Use {@link #isShiftPressed} instead. + */ +qx.Proto.getShiftKey = qx.Proto.isShiftPressed; + + +/** + * Returns whether the the alt key is pressed. + * + * @return {Boolean} whether the the alt key is pressed. + */ +qx.Proto.isAltPressed = function() { + return this.getDomEvent().altKey; +} + +/** + * Returns whether the the alt key is pressed. + * + * @return {Boolean} whether the the alt key is pressed. + * @deprecated Use {@link #isAltPressed} instead. + */ +qx.Proto.getAltKey = qx.Proto.isAltPressed; + + +/** + * Returns whether the the meta key is pressed. + * + * @return {Boolean} whether the the meta key is pressed. + */ +qx.Proto.isMetaPressed = function() { + return this.getDomEvent().metaKey; +} + + +/** + * Returns whether the ctrl key or (on the Mac) the command key is pressed. + * + * @return {Boolean} <code>true</code> if the command key is pressed on the Mac + * or the ctrl key is pressed on another system. + */ +qx.Proto.isCtrlOrCommandPressed = function() { + if (qx.core.Client.getInstance().runsOnMacintosh()) { + return this.getDomEvent().metaKey; + } else { + return this.getDomEvent().ctrlKey; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + PREVENT DEFAULT +--------------------------------------------------------------------------- +*/ + +if(qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.setDefaultPrevented = function(vValue) + { + if (!vValue) { + return this.error("It is not possible to set preventDefault to false if it was true before!", "setDefaultPrevented"); + } + + this.getDomEvent().returnValue = false; + + qx.event.type.Event.prototype.setDefaultPrevented.call(this, vValue); + } +} +else +{ + qx.Proto.setDefaultPrevented = function(vValue) + { + if (!vValue) { + return this.error("It is not possible to set preventDefault to false if it was true before!", "setDefaultPrevented"); + } + + this.getDomEvent().preventDefault(); + this.getDomEvent().returnValue = false; + + qx.event.type.Event.prototype.setDefaultPrevented.call(this, vValue); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._valueDomEvent = null; + this._valueDomTarget = null; + + return qx.event.type.Event.prototype.dispose.call(this); +} + + + + +/** {int} The modifier mask for the shift key. */ +qx.Class.SHIFT_MASK = 1; + +/** {int} The modifier mask for the control key. */ +qx.Class.CTRL_MASK = 2; + +/** {int} The modifier mask for the alt key. */ +qx.Class.ALT_MASK = 4; + +/** {int} The modifier mask for the meta key (e.g. apple key on Macs). */ +qx.Class.META_MASK = 8; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DragEvent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DragEvent.js new file mode 100644 index 0000000000..a6bd360bbe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/DragEvent.js @@ -0,0 +1,207 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_dragdrop) + +************************************************************************ */ + +/*! + The event object for drag and drop sessions +*/ +qx.OO.defineClass("qx.event.type.DragEvent", qx.event.type.MouseEvent, +function(vType, vMouseEvent, vTarget, vRelatedTarget) +{ + this._mouseEvent = vMouseEvent; + + var vOriginalTarget = null; + + switch(vType) + { + case "dragstart": + case "dragover": + vOriginalTarget = vMouseEvent.getOriginalTarget(); + } + + qx.event.type.MouseEvent.call(this, vType, vMouseEvent.getDomEvent(), vTarget.getElement(), vTarget, vOriginalTarget, vRelatedTarget); +}); + + + + + +/* +--------------------------------------------------------------------------- + UTILITIY +--------------------------------------------------------------------------- +*/ + +qx.Proto.getMouseEvent = function() { + return this._mouseEvent; +} + + + + + + +/* +--------------------------------------------------------------------------- + APPLICATION CONNECTION +--------------------------------------------------------------------------- +*/ + +qx.Proto.startDrag = function() +{ + if (this.getType() != "dragstart") { + throw new Error("qx.event.type.DragEvent startDrag can only be called during the dragstart event: " + this.getType()); + } + + this.stopPropagation(); + qx.event.handler.DragAndDropHandler.getInstance().startDrag(); +} + + + + + + +/* +--------------------------------------------------------------------------- + DATA SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.addData = function(sType, oData) { + qx.event.handler.DragAndDropHandler.getInstance().addData(sType, oData); +} + +qx.Proto.getData = function(sType) { + return qx.event.handler.DragAndDropHandler.getInstance().getData(sType); +} + +qx.Proto.clearData = function() { + qx.event.handler.DragAndDropHandler.getInstance().clearData(); +} + +qx.Proto.getDropDataTypes = function() { + return qx.event.handler.DragAndDropHandler.getInstance().getDropDataTypes(); +} + + + + + + +/* +--------------------------------------------------------------------------- + ACTION SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.addAction = function(sAction) { + qx.event.handler.DragAndDropHandler.getInstance().addAction(sAction); +} + +qx.Proto.removeAction = function(sAction) { + qx.event.handler.DragAndDropHandler.getInstance().removeAction(sAction); +} + +qx.Proto.getAction = function() { + return qx.event.handler.DragAndDropHandler.getInstance().getCurrentAction(); +} + +qx.Proto.clearActions = function() { + qx.event.handler.DragAndDropHandler.getInstance().clearActions(); +} + + + + + + +/* +--------------------------------------------------------------------------- + USER FEEDBACK SUPPORT +--------------------------------------------------------------------------- +*/ + +/** + * Sets the widget to show as feedback for the user. This widget should + * represent the object(s) the user is dragging. + * + * @param widget {qx.ui.core.Widget} the feedback widget. + * @param deltaX {int ? 10} the number of pixels the top-left corner of the widget + * should be away from the mouse cursor in x direction. + * @param deltaY {int ? 10} the number of pixels the top-left corner of the widget + * should be away from the mouse cursor in y direction. + * @param autoDisposeWidget {boolean} whether the widget should be disposed when + * dragging is finished or cancelled. + */ +qx.Proto.setFeedbackWidget = function(widget, deltaX, deltaY, autoDisposeWidget) { + qx.event.handler.DragAndDropHandler.getInstance().setFeedbackWidget(widget, deltaX, deltaY, autoDisposeWidget); +}; + + + + + + +/* +--------------------------------------------------------------------------- + CURSPOR POSITIONING SUPPORT +--------------------------------------------------------------------------- +*/ + +/** + * Sets the position of the cursor feedback (the icon showing whether dropping + * is allowed at the current position and which action a drop will do). + * + * @param deltaX {int} The number of pixels the top-left corner of the + * cursor feedback should be away from the mouse cursor in x direction. + * @param deltaY {int} The number of pixels the top-left corner of the + * cursor feedback should be away from the mouse cursor in y direction. + */ +qx.Proto.setCursorPosition = function(deltaX, deltaY) { + qx.event.handler.DragAndDropHandler.getInstance().setCursorPosition(deltaX, deltaY); +}; + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._mouseEvent = null; + + return qx.event.type.MouseEvent.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/Event.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/Event.js new file mode 100644 index 0000000000..82798da893 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/Event.js @@ -0,0 +1,90 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/*! + The qooxdoo core event object. Each event object for qx.core.Targets should extend this class. +*/ +qx.OO.defineClass("qx.event.type.Event", qx.core.Object, +function(vType) +{ + qx.core.Object.call(this, false); + + this.setType(vType); +}); + +qx.OO.addFastProperty({ name : "type", setOnlyOnce : true }); + +qx.OO.addFastProperty({ name : "originalTarget", setOnlyOnce : true }); +qx.OO.addFastProperty({ name : "target", setOnlyOnce : true }); +qx.OO.addFastProperty({ name : "relatedTarget", setOnlyOnce : true }); +qx.OO.addFastProperty({ name : "currentTarget" }); + +qx.OO.addFastProperty({ name : "bubbles", defaultValue : false, noCompute : true }); +qx.OO.addFastProperty({ name : "propagationStopped", defaultValue : true, noCompute : true }); +qx.OO.addFastProperty({ name : "defaultPrevented", defaultValue : false, noCompute : true }); + +/** If the event object should automatically be disposed by the dispatcher */ +qx.OO.addFastProperty({ name : "autoDispose", defaultValue : false }); + + + + +/* +--------------------------------------------------------------------------- + SHORTCUTS +--------------------------------------------------------------------------- +*/ + +qx.Proto.preventDefault = function() { + this.setDefaultPrevented(true); +} + +qx.Proto.stopPropagation = function() { + this.setPropagationStopped(true); +} + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + this._valueOriginalTarget = null; + this._valueTarget = null; + this._valueRelatedTarget = null; + this._valueCurrentTarget = null; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/FocusEvent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/FocusEvent.js new file mode 100644 index 0000000000..d8b327cb78 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/FocusEvent.js @@ -0,0 +1,48 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/*! + This event handles all focus events. + + The four supported types are: + 1+2: focus and blur also propagate the target object + 3+4: focusout and focusin are bubbling to the parent objects +*/ +qx.OO.defineClass("qx.event.type.FocusEvent", qx.event.type.Event, +function(vType, vTarget) +{ + qx.event.type.Event.call(this, vType); + + this.setTarget(vTarget); + + switch(vType) + { + case "focusin": + case "focusout": + this.setBubbles(true); + this.setPropagationStopped(false); + } +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/KeyEvent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/KeyEvent.js new file mode 100644 index 0000000000..eb69c51242 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/KeyEvent.js @@ -0,0 +1,200 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/** + * A key event instance contains all data for each occured key event + * + * @param vType {String} event type (keydown, keypress, keyinput, keyup) + * @param vDomEvent {Element} DOM event object + * @param vDomTarget {Element} target element of the DOM event + * @param vTarget + * @param vOriginalTarget + * @param vKeyCode {Integer} emulated key code for compatibility with older qoodoo applications + * @param vCharCode {Integer} char code from the "keypress" event + * @param vKeyIdentifier {String} the key identifier + */ +qx.OO.defineClass("qx.event.type.KeyEvent", qx.event.type.DomEvent, +function(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget, vKeyCode, vCharCode, vKeyIdentifier) +{ + qx.event.type.DomEvent.call(this, vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget); + + this.setKeyCode(vKeyCode); + this.setCharCode(vCharCode); + this.setKeyIdentifier(vKeyIdentifier); +}); + +/** + * Legacy keycode + * @deprecated Will be removed with qooxdoo 0.7 + */ +qx.OO.addFastProperty({ name : "keyCode", setOnlyOnce : true, noCompute : true }); + +/** + * Unicode number of the pressed character. + * Only valid in "keyinput" events + */ +qx.OO.addFastProperty({ name : "charCode", setOnlyOnce : true, noCompute : true }); + +/** + * Identifier of the pressed key. This property is modeled after the <em>KeyboardEvent.keyIdentifier</em> property + * of the W3C DOM 3 event specification (http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-KeyboardEvent-keyIdentifier). + * + * It is not valid in "keyinput" events" + * + * Printable keys are represented by a unicode string, non-printable keys have one of the following + * values: + * <br> + * <table> + * <tr><th>Backspace</th><td>The Backspace (Back) key.</td></tr> + * <tr><th>Tab</th><td>The Horizontal Tabulation (Tab) key.</td></tr> + * <tr><th>Space</th><td>The Space (Spacebar) key.</td></tr> + * <tr><th>Enter</th><td>The Enter key. Note: This key identifier is also used for the Return (Macintosh numpad) key.</td></tr> + * <tr><th>Shift</th><td>The Shift key.</td></tr> + * <tr><th>Control</th><td>The Control (Ctrl) key.</td></tr> + * <tr><th>Alt</th><td>The Alt (Menu) key.</td></tr> + * <tr><th>CapsLock</th><td>The CapsLock key</td></tr> + * <tr><th>Meta</th><td>The Meta key. (Apple Meta and Windows key)</td></tr> + * <tr><th>Escape</th><td>The Escape (Esc) key.</td></tr> + * <tr><th>Left</th><td>The Left Arrow key.</td></tr> + * <tr><th>Up</th><td>The Up Arrow key.</td></tr> + * <tr><th>Right</th><td>The Right Arrow key.</td></tr> + * <tr><th>Down</th><td>The Down Arrow key.</td></tr> + * <tr><th>PageUp</th><td>The Page Up key.</td></tr> + * <tr><th>PageDown</th><td>The Page Down (Next) key.</td></tr> + * <tr><th>End</th><td>The End key.</td></tr> + * <tr><th>Home</th><td>The Home key.</td></tr> + * <tr><th>Insert</th><td>The Insert (Ins) key. (Does not fire in Opera/Win)</td></tr> + * <tr><th>Delete</th><td>The Delete (Del) Key.</td></tr> + * <tr><th>F1</th><td>The F1 key.</td></tr> + * <tr><th>F2</th><td>The F2 key.</td></tr> + * <tr><th>F3</th><td>The F3 key.</td></tr> + * <tr><th>F4</th><td>The F4 key.</td></tr> + * <tr><th>F5</th><td>The F5 key.</td></tr> + * <tr><th>F6</th><td>The F6 key.</td></tr> + * <tr><th>F7</th><td>The F7 key.</td></tr> + * <tr><th>F8</th><td>The F8 key.</td></tr> + * <tr><th>F9</th><td>The F9 key.</td></tr> + * <tr><th>F10</th><td>The F10 key.</td></tr> + * <tr><th>F11</th><td>The F11 key.</td></tr> + * <tr><th>F12</th><td>The F12 key.</td></tr> + * <tr><th>NumLock</th><td>The Num Lock key.</td></tr> + * <tr><th>PrintScreen</th><td>The Print Screen (PrintScrn, SnapShot) key.</td></tr> + * <tr><th>Scroll</th><td>The scroll lock key</td></tr> + * <tr><th>Pause</th><td>The pause/break key</td></tr> + * <tr><th>Win</th><td>The Windows Logo key</td></tr> + * <tr><th>Apps</th><td>The Application key (Windows Context Menu)</td></tr> + * </table> + */ +qx.OO.addFastProperty({ name : "keyIdentifier", setOnlyOnce : true, noCompute : true }); + + + + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + CLASS PROPERTIES AND METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Mapping of the old key identifiers to the key codes + * @deprecated + */ +qx.event.type.KeyEvent.keys = +{ + esc : 27, + enter : 13, + tab : 9, + space : 32, + + up : 38, + down : 40, + left : 37, + right : 39, + + shift : 16, + ctrl : 17, + alt : 18, + + f1 : 112, + f2 : 113, + f3 : 114, + f4 : 115, + f5 : 116, + f6 : 117, + f7 : 118, + f8 : 119, + f9 : 120, + f10 : 121, + f11 : 122, + f12 : 123, + + print : 124, + + del : 46, + backspace : 8, + insert : 45, + home : 36, + end : 35, + + pageup : 33, + pagedown : 34, + + numlock : 144, + + numpad_0 : 96, + numpad_1 : 97, + numpad_2 : 98, + numpad_3 : 99, + numpad_4 : 100, + numpad_5 : 101, + numpad_6 : 102, + numpad_7 : 103, + numpad_8 : 104, + numpad_9 : 105, + + numpad_divide : 111, + numpad_multiply : 106, + numpad_minus : 109, + numpad_plus : 107 +}; + +// create dynamic codes copy +(function() { + qx.event.type.KeyEvent.codes = {}; + for (var i in qx.event.type.KeyEvent.keys) { + qx.event.type.KeyEvent.codes[qx.event.type.KeyEvent.keys[i]] = i; + } +})(); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/MouseEvent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/MouseEvent.js new file mode 100644 index 0000000000..053037b281 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/event/type/MouseEvent.js @@ -0,0 +1,311 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/*! + A mouse event instance contains all data for each occured mouse event +*/ +qx.OO.defineClass("qx.event.type.MouseEvent", qx.event.type.DomEvent, +function(vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget, vRelatedTarget) +{ + qx.event.type.DomEvent.call(this, vType, vDomEvent, vDomTarget, vTarget, vOriginalTarget); + + if (vRelatedTarget) { + this.setRelatedTarget(vRelatedTarget); + } +}); + +qx.Class.C_BUTTON_LEFT = "left"; +qx.Class.C_BUTTON_MIDDLE = "middle"; +qx.Class.C_BUTTON_RIGHT = "right"; +qx.Class.C_BUTTON_NONE = "none"; + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + CLASS PROPERTIES AND METHODS +--------------------------------------------------------------------------- +*/ + +qx.event.type.MouseEvent._screenX = qx.event.type.MouseEvent._screenY = qx.event.type.MouseEvent._clientX = qx.event.type.MouseEvent._clientY = qx.event.type.MouseEvent._pageX = qx.event.type.MouseEvent._pageY = 0; +qx.event.type.MouseEvent._button = null; + +qx.event.type.MouseEvent._storeEventState = function(e) +{ + qx.event.type.MouseEvent._screenX = e.getScreenX(); + qx.event.type.MouseEvent._screenY = e.getScreenY(); + qx.event.type.MouseEvent._clientX = e.getClientX(); + qx.event.type.MouseEvent._clientY = e.getClientY(); + qx.event.type.MouseEvent._pageX = e.getPageX(); + qx.event.type.MouseEvent._pageY = e.getPageY(); + qx.event.type.MouseEvent._button = e.getButton(); +} + +qx.event.type.MouseEvent.getScreenX = function() { return qx.event.type.MouseEvent._screenX; } +qx.event.type.MouseEvent.getScreenY = function() { return qx.event.type.MouseEvent._screenY; } +qx.event.type.MouseEvent.getClientX = function() { return qx.event.type.MouseEvent._clientX; } +qx.event.type.MouseEvent.getClientY = function() { return qx.event.type.MouseEvent._clientY; } +qx.event.type.MouseEvent.getPageX = function() { return qx.event.type.MouseEvent._pageX; } +qx.event.type.MouseEvent.getPageY = function() { return qx.event.type.MouseEvent._pageY; } +qx.event.type.MouseEvent.getButton = function() { return qx.event.type.MouseEvent._button; } + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.event.type.MouseEvent.buttons = { left : 1, right : 2, middle : 4 } +} +else +{ + qx.event.type.MouseEvent.buttons = { left : 0, right : 2, middle : 1 } +} + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + SCREEN COORDINATES SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getScreenX = function() { + return this.getDomEvent().screenX; +} + +qx.Proto.getScreenY = function() { + return this.getDomEvent().screenY; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + PAGE COORDINATES SUPPORT +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ +qx.OO.addFastProperty({ name : "pageX", readOnly : true }); +qx.OO.addFastProperty({ name : "pageY", readOnly : true }); + + if (qx.core.Client.getInstance().isInQuirksMode()) + { + qx.Proto._computePageX = function() { + return this.getDomEvent().clientX + document.documentElement.scrollLeft; + } + + qx.Proto._computePageY = function() { + return this.getDomEvent().clientY + document.documentElement.scrollTop; + } + } + else + { + qx.Proto._computePageX = function() { + return this.getDomEvent().clientX + document.body.scrollLeft; + } + + qx.Proto._computePageY = function() { + return this.getDomEvent().clientY + document.body.scrollTop; + } + } +} +else if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto.getPageX = function() { + return this.getDomEvent().pageX; + } + + qx.Proto.getPageY = function() { + return this.getDomEvent().pageY; + } +} +else +{ + qx.Proto.getPageX = function() { + return this.getDomEvent().clientX; + } + + qx.Proto.getPageY = function() { + return this.getDomEvent().clientY; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + CLIENT COORDINATES SUPPORT +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isGecko()) +{ + qx.Proto.getClientX = function() { + return this.getDomEvent().clientX; + } + + qx.Proto.getClientY = function() { + return this.getDomEvent().clientY; + } +} +else +{ +qx.OO.addFastProperty({ name : "clientX", readOnly : true }); +qx.OO.addFastProperty({ name : "clientY", readOnly : true }); + + qx.Proto._computeClientX = function() { + return this.getDomEvent().clientX + (document.body && document.body.scrollLeft != null ? document.body.scrollLeft : 0); + } + + qx.Proto._computeClientY = function() { + return this.getDomEvent().clientY + (document.body && document.body.scrollTop != null ? document.body.scrollTop : 0); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + BUTTON SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.OO.addFastProperty({ name : "button", readOnly : true }); + +// IE does not set e.button in click events +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.isLeftButtonPressed = function() { + if (this.getType() == "click") { + return true; + } else { + return this.getButton() === qx.event.type.MouseEvent.C_BUTTON_LEFT; + } + } +} +else +{ + qx.Proto.isLeftButtonPressed = function() { + return this.getButton() === qx.event.type.MouseEvent.C_BUTTON_LEFT; + } +} + +qx.Proto.isMiddleButtonPressed = function() { + return this.getButton() === qx.event.type.MouseEvent.C_BUTTON_MIDDLE; +} + +qx.Proto.isRightButtonPressed = function() { + return this.getButton() === qx.event.type.MouseEvent.C_BUTTON_RIGHT; +} + +qx.Proto._computeButton = function() { + var e = this.getDomEvent(); + if (e.which) { + switch (e.which) { + case 1: + return qx.event.type.MouseEvent.C_BUTTON_LEFT; + + case 3: + return qx.event.type.MouseEvent.C_BUTTON_RIGHT; + + case 2: + return qx.event.type.MouseEvent.C_BUTTON_MIDDLE; + + default: + return qx.event.type.MouseEvent.C_BUTTON_NONE; + + } + } else { + switch(e.button) { + case 1: + return qx.event.type.MouseEvent.C_BUTTON_LEFT; + + case 2: + return qx.event.type.MouseEvent.C_BUTTON_RIGHT; + + case 4: + return qx.event.type.MouseEvent.C_BUTTON_MIDDLE; + + default: + return qx.event.type.MouseEvent.C_BUTTON_NONE; + } + } +} + + + + +/* +--------------------------------------------------------------------------- + WHEEL SUPPORT +--------------------------------------------------------------------------- +*/ + +// Implementation differences: http://ajaxian.com/archives/javascript-and-mouse-wheels + +qx.OO.addFastProperty({ name : "wheelDelta", readOnly : true }); + +if(qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._computeWheelDelta = function() { + return this.getDomEvent().wheelDelta / 120; + } +} +else if(qx.core.Client.getInstance().isOpera()) +{ + qx.Proto._computeWheelDelta = function() { + return -this.getDomEvent().wheelDelta / 120; + } +} +else +{ + qx.Proto._computeWheelDelta = function() { + return -this.getDomEvent().detail / 3; + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Dimension.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Dimension.js new file mode 100644 index 0000000000..cfbbf68fd2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Dimension.js @@ -0,0 +1,233 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Dimension"); + +/* ++-Outer----------------------------------------+ +| Margin | +| +-Box------------------------------+ | +| | Border (+ Scrollbar) | | +| | +-Area--------------------+ | | +| | | Padding | | | +| | | +-Inner----------+ | | | +| | | | | | | | +| | | +----------------+ | | | +| | +-------------------------+ | | +| +----------------------------------+ | ++----------------------------------------------+ +*/ + +// Dimensions +qx.html.Dimension.getOuterWidth = function(el) { return qx.html.Dimension.getBoxWidth(el) + qx.html.Style.getMarginLeft(el) + qx.html.Style.getMarginRight(el); } +qx.html.Dimension.getOuterHeight = function(el) { return qx.html.Dimension.getBoxHeight(el) + qx.html.Style.getMarginTop(el) + qx.html.Style.getMarginBottom(el); } + +qx.html.Dimension.getBoxWidthForZeroHeight = function(el) +{ + var h = el.offsetHeight; + if (h == 0) { + var o = el.style.height; + el.style.height = "1px"; + } + + var v = el.offsetWidth; + + if (h == 0) { + el.style.height = o; + } + + return v; +} + +qx.html.Dimension.getBoxHeightForZeroWidth = function(el) +{ + var w = el.offsetWidth; + if (w == 0) { + var o = el.style.width; + el.style.width = "1px"; + } + + var v = el.offsetHeight; + + if (w == 0) { + el.style.width = o; + } + + return v; +} + +qx.html.Dimension.getBoxWidth = function(el) { + return el.offsetWidth; +} + +qx.html.Dimension.getBoxHeight = function(el) { + return el.offsetHeight; +} + + +qx.html.Dimension.getAreaWidth = function(el) {}; +qx.html.Dimension.getAreaHeight = function(el) {}; + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.html.Dimension.getAreaWidth = function(el) + { + // 0 in clientWidth could mean both: That it is really 0 or + // that the element is not rendered by the browser and + // therefore it is 0, too + + // In Gecko based browsers there is sometimes another + // behaviour: The clientHeight is equal to the border + // sum. This is normally not correct and so we + // fix this value with a more complex calculation. + + // (Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050223 Firefox/1.0.1) + + if (el.clientWidth != 0 && el.clientWidth != (qx.html.Style.getBorderLeft(el) + qx.html.Style.getBorderRight(el))) + { + return el.clientWidth; + } + else + { + return qx.html.Dimension.getBoxWidth(el) - qx.html.Dimension.getInsetLeft(el) - qx.html.Dimension.getInsetRight(el); + } + } + + qx.html.Dimension.getAreaHeight = function(el) + { + // 0 in clientHeight could mean both: That it is really 0 or + // that the element is not rendered by the browser and + // therefore it is 0, too + + // In Gecko based browsers there is sometimes another + // behaviour: The clientHeight is equal to the border + // sum. This is normally not correct and so we + // fix this value with a more complex calculation. + + // (Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050223 Firefox/1.0.1) + + if (el.clientHeight != 0 && el.clientHeight != (qx.html.Style.getBorderTop(el) + qx.html.Style.getBorderBottom(el))) + { + return el.clientHeight; + } + else + { + return qx.html.Dimension.getBoxHeight(el) - qx.html.Dimension.getInsetTop(el) - qx.html.Dimension.getInsetBottom(el); + } + } +} +else +{ + qx.html.Dimension.getAreaWidth = function(el) + { + // 0 in clientWidth could mean both: That it is really 0 or + // that the element is not rendered by the browser and + // therefore it is 0, too + + return el.clientWidth != 0 ? el.clientWidth : (qx.html.Dimension.getBoxWidth(el) - qx.html.Dimension.getInsetLeft(el) - qx.html.Dimension.getInsetRight(el)); + } + + qx.html.Dimension.getAreaHeight = function(el) + { + // 0 in clientHeight could mean both: That it is really 0 or + // that the element is not rendered by the browser and + // therefore it is 0, too + + return el.clientHeight != 0 ? el.clientHeight : (qx.html.Dimension.getBoxHeight(el) - qx.html.Dimension.getInsetTop(el) - qx.html.Dimension.getInsetBottom(el)); + } +} + +qx.html.Dimension.getInnerWidth = function(el) { return qx.html.Dimension.getAreaWidth(el) - qx.html.Style.getPaddingLeft(el) - qx.html.Style.getPaddingRight(el); } +qx.html.Dimension.getInnerHeight = function(el) { return qx.html.Dimension.getAreaHeight(el) - qx.html.Style.getPaddingTop(el) - qx.html.Style.getPaddingBottom(el); } + + + + +// Insets +qx.html.Dimension.getInsetLeft = function(el) {}; +qx.html.Dimension.getInsetTop = function(el) {}; +qx.html.Dimension.getInsetRight = function(el) {}; +qx.html.Dimension.getInsetBottom = function(el) {}; + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.Dimension.getInsetLeft = function(el) { return el.clientLeft; } + qx.html.Dimension.getInsetTop = function(el) { return el.clientTop; } + qx.html.Dimension.getInsetRight = function(el) { + if(qx.html.Style.getStyleProperty(el, "overflowY") == "hidden" || el.clientWidth == 0) { + return qx.html.Style.getBorderRight(el); + } + + return Math.max(0, el.offsetWidth - el.clientLeft - el.clientWidth); + } + + qx.html.Dimension.getInsetBottom = function(el) { + if(qx.html.Style.getStyleProperty(el, "overflowX") == "hidden" || el.clientHeight == 0) { + return qx.html.Style.getBorderBottom(el); + } + + return Math.max(0, el.offsetHeight - el.clientTop - el.clientHeight); + } +} +else +{ + qx.html.Dimension.getInsetLeft = function(el) { return qx.html.Style.getBorderLeft(el); } + qx.html.Dimension.getInsetTop = function(el) { return qx.html.Style.getBorderTop(el); } + + qx.html.Dimension.getInsetRight = function(el) { + // Alternative method if clientWidth is unavailable + // clientWidth == 0 could mean both: unavailable or really 0 + if (el.clientWidth == 0) { + var ov = qx.html.Style.getStyleProperty(el, "overflow"); + var sbv = ov == "scroll" || ov == "-moz-scrollbars-vertical" ? 16 : 0; + return Math.max(0, qx.html.Style.getBorderRight(el) + sbv); + } + + return Math.max(0, el.offsetWidth - el.clientWidth - qx.html.Style.getBorderLeft(el)); + } + + qx.html.Dimension.getInsetBottom = function(el) { + // Alternative method if clientHeight is unavailable + // clientHeight == 0 could mean both: unavailable or really 0 + if (el.clientHeight == 0) { + var ov = qx.html.Style.getStyleProperty(el, "overflow"); + var sbv = ov == "scroll" || ov == "-moz-scrollbars-horizontal" ? 16 : 0; + return Math.max(0, qx.html.Style.getBorderBottom(el) + sbv); + } + + return Math.max(0, el.offsetHeight - el.clientHeight - qx.html.Style.getBorderTop(el)); + } +} + + +// Scrollbar +qx.html.Dimension.getScrollBarSizeLeft = function(el) { return 0; } +qx.html.Dimension.getScrollBarSizeTop = function(el) { return 0; } +qx.html.Dimension.getScrollBarSizeRight = function(el) { return qx.html.Dimension.getInsetRight(el) - qx.html.Style.getBorderRight(el); } +qx.html.Dimension.getScrollBarSizeBottom = function(el) { return qx.html.Dimension.getInsetBottom(el) - qx.html.Style.getBorderBottom(el); } + +qx.html.Dimension.getScrollBarVisibleX = function(el) { return qx.html.Dimension.getScrollBarSizeRight(el) > 0; } +qx.html.Dimension.getScrollBarVisibleY = function(el) { return qx.html.Dimension.getScrollBarSizeBottom(el) > 0; } diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/ElementFromPoint.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/ElementFromPoint.js new file mode 100644 index 0000000000..572243c912 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/ElementFromPoint.js @@ -0,0 +1,124 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.html.ElementFromPoint"); + +qx.html.ElementFromPoint.getElementFromPoint = function(x, y) { + return qx.html.ElementFromPoint.getElementFromPointHandler(document.body, x, y); +} + +qx.html.ElementFromPoint.getElementFromPointHandler = function(node, x, y, recursive) +{ + var ch = node.childNodes; + var chl = ch.length-1; + + if (chl < 0) { + return null; + } + + var chc, subres, ret; + + do + { + chc = ch[chl]; + ret = qx.html.ElementFromPoint.getElementFromPointChecker(chc, x, y); + + if (ret) + { + if (typeof recursive === "boolean" && recursive == false) + { + return chc; + } + else + { + subres = qx.html.ElementFromPoint.getElementFromPointHandler(chc, x-ret[0]-qx.html.Style.getBorderLeft(chc), y-ret[2]-qx.html.Style.getBorderTop(chc)); + return subres ? subres : chc; + } + } + } + while(chl--); + + return null; +} + +qx.html.ElementFromPoint.getElementFromPointChecker = function(chc, x, y) +{ + var xstart, ystart, xstop, ystop; + + if (chc.nodeType != 1) { + return false; + } + + xstart = qx.html.Offset.getLeft(chc); + if (x > xstart) + { + ystart = qx.html.Offset.getTop(chc); + if (y > ystart) + { + xstop = xstart + chc.offsetWidth; + + if (x < xstop) + { + ystop = ystart + chc.offsetHeight; + if (y < ystop) + { + return [ xstart, xstop, ystart, ystop ]; + } + } + } + } + + return false; +} + +qx.html.ElementFromPoint.getElementAbsolutePointChecker = function(chc, x, y) +{ + var xstart, ystart, xstop, ystop; + + if (!chc || chc.nodeType != 1) { + return false; + } + + xstart = qx.html.Location.getPageBoxLeft(chc); + if (x > xstart) + { + ystart = qx.html.Location.getPageBoxTop(chc); + if (y > ystart) + { + xstop = xstart + chc.offsetWidth; + + if (x < xstop) + { + ystop = ystart + chc.offsetHeight; + if (y < ystop) + { + return [ xstart, xstop, ystart, ystop ]; + } + } + } + } + + return false; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Entity.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Entity.js new file mode 100644 index 0000000000..6f00787d60 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Entity.js @@ -0,0 +1,323 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.lang.Object) + +************************************************************************ */ + +/** + * A Collection of utility functions to escape and unescape strings. + */ +qx.OO.defineClass("qx.html.Entity"); + + +/** Mapping of HTML entity names to the corresponding char code */ +qx.Class.TO_CHARCODE = { + "quot": 34, // " - double-quote + "amp": 38, // & + "lt": 60, // < + "gt": 62, // > + + // http://www.w3.org/TR/REC-html40/sgml/entities.html + // ISO 8859-1 characters + "nbsp": 160, // no-break space + "iexcl": 161, // inverted exclamation mark + "cent": 162, // cent sign + "pound": 163, // pound sterling sign + "curren": 164, // general currency sign + "yen": 165, // yen sign + "brvbar": 166, // broken (vertical) bar + "sect": 167, // section sign + "uml": 168, // umlaut (dieresis) + "copy": 169, // copyright sign + "ordf": 170, // ordinal indicator, feminine + "laquo": 171, // angle quotation mark, left + "not": 172, // not sign + "shy": 173, // soft hyphen + "reg": 174, // registered sign + "macr": 175, // macron + "deg": 176, // degree sign + "plusmn": 177, // plus-or-minus sign + "sup2": 178, // superscript two + "sup3": 179, // superscript three + "acute": 180, // acute accent + "micro": 181, // micro sign + "para": 182, // pilcrow (paragraph sign) + "middot": 183, // middle dot + "cedil": 184, // cedilla + "sup1": 185, // superscript one + "ordm": 186, // ordinal indicator, masculine + "raquo": 187, // angle quotation mark, right + "frac14": 188, // fraction one-quarter + "frac12": 189, // fraction one-half + "frac34": 190, // fraction three-quarters + "iquest": 191, // inverted question mark + "Agrave": 192, // capital A, grave accent + "Aacute": 193, // capital A, acute accent + "Acirc": 194, // capital A, circumflex accent + "Atilde": 195, // capital A, tilde + "Auml": 196, // capital A, dieresis or umlaut mark + "Aring": 197, // capital A, ring + "AElig": 198, // capital AE diphthong (ligature) + "Ccedil": 199, // capital C, cedilla + "Egrave": 200, // capital E, grave accent + "Eacute": 201, // capital E, acute accent + "Ecirc": 202, // capital E, circumflex accent + "Euml": 203, // capital E, dieresis or umlaut mark + "Igrave": 204, // capital I, grave accent + "Iacute": 205, // capital I, acute accent + "Icirc": 206, // capital I, circumflex accent + "Iuml": 207, // capital I, dieresis or umlaut mark + "ETH": 208, // capital Eth, Icelandic + "Ntilde": 209, // capital N, tilde + "Ograve": 210, // capital O, grave accent + "Oacute": 211, // capital O, acute accent + "Ocirc": 212, // capital O, circumflex accent + "Otilde": 213, // capital O, tilde + "Ouml": 214, // capital O, dieresis or umlaut mark + "times": 215, // multiply sign + "Oslash": 216, // capital O, slash + "Ugrave": 217, // capital U, grave accent + "Uacute": 218, // capital U, acute accent + "Ucirc": 219, // capital U, circumflex accent + "Uuml": 220, // capital U, dieresis or umlaut mark + "Yacute": 221, // capital Y, acute accent + "THORN": 222, // capital THORN, Icelandic + "szlig": 223, // small sharp s, German (sz ligature) + "agrave": 224, // small a, grave accent + "aacute": 225, // small a, acute accent + "acirc": 226, // small a, circumflex accent + "atilde": 227, // small a, tilde + "auml": 228, // small a, dieresis or umlaut mark + "aring": 229, // small a, ring + "aelig": 230, // small ae diphthong (ligature) + "ccedil": 231, // small c, cedilla + "egrave": 232, // small e, grave accent + "eacute": 233, // small e, acute accent + "ecirc": 234, // small e, circumflex accent + "euml": 235, // small e, dieresis or umlaut mark + "igrave": 236, // small i, grave accent + "iacute": 237, // small i, acute accent + "icirc": 238, // small i, circumflex accent + "iuml": 239, // small i, dieresis or umlaut mark + "eth": 240, // small eth, Icelandic + "ntilde": 241, // small n, tilde + "ograve": 242, // small o, grave accent + "oacute": 243, // small o, acute accent + "ocirc": 244, // small o, circumflex accent + "otilde": 245, // small o, tilde + "ouml": 246, // small o, dieresis or umlaut mark + "divide": 247, // divide sign + "oslash": 248, // small o, slash + "ugrave": 249, // small u, grave accent + "uacute": 250, // small u, acute accent + "ucirc": 251, // small u, circumflex accent + "uuml": 252, // small u, dieresis or umlaut mark + "yacute": 253, // small y, acute accent + "thorn": 254, // small thorn, Icelandic + "yuml": 255, // small y, dieresis or umlaut mark + // Latin Extended-B + "fnof": 402, //latin small f with hook = function= florin, U+0192 ISOtech + // Greek + "Alpha": 913, //greek capital letter alpha, U+0391 + "Beta": 914, //greek capital letter beta, U+0392 + "Gamma": 915, //greek capital letter gamma,U+0393 ISOgrk3 + "Delta": 916, //greek capital letter delta,U+0394 ISOgrk3 + "Epsilon": 917, //greek capital letter epsilon, U+0395 + "Zeta": 918, //greek capital letter zeta, U+0396 + "Eta": 919, //greek capital letter eta, U+0397 + "Theta": 920, //greek capital letter theta,U+0398 ISOgrk3 + "Iota": 921, //greek capital letter iota, U+0399 + "Kappa": 922, //greek capital letter kappa, U+039A + "Lambda": 923, //greek capital letter lambda,U+039B ISOgrk3 + "Mu": 924, //greek capital letter mu, U+039C + "Nu": 925, //greek capital letter nu, U+039D + "Xi": 926, //greek capital letter xi, U+039E ISOgrk3 + "Omicron": 927, //greek capital letter omicron, U+039F + "Pi": 928, //greek capital letter pi, U+03A0 ISOgrk3 + "Rho": 929, //greek capital letter rho, U+03A1 + // there is no Sigmaf, and no U+03A2 character either + "Sigma": 931, //greek capital letter sigma,U+03A3 ISOgrk3 + "Tau": 932, //greek capital letter tau, U+03A4 + "Upsilon": 933, //greek capital letter upsilon,U+03A5 ISOgrk3 + "Phi": 934, //greek capital letter phi,U+03A6 ISOgrk3 + "Chi": 935, //greek capital letter chi, U+03A7 + "Psi": 936, //greek capital letter psi,U+03A8 ISOgrk3 + "Omega": 937, //greek capital letter omega,U+03A9 ISOgrk3 + "alpha": 945, //greek small letter alpha,U+03B1 ISOgrk3 + "beta": 946, //greek small letter beta, U+03B2 ISOgrk3 + "gamma": 947, //greek small letter gamma,U+03B3 ISOgrk3 + "delta": 948, //greek small letter delta,U+03B4 ISOgrk3 + "epsilon": 949, //greek small letter epsilon,U+03B5 ISOgrk3 + "zeta": 950, //greek small letter zeta, U+03B6 ISOgrk3 + "eta": 951, //greek small letter eta, U+03B7 ISOgrk3 + "theta": 952, //greek small letter theta,U+03B8 ISOgrk3 + "iota": 953, //greek small letter iota, U+03B9 ISOgrk3 + "kappa": 954, //greek small letter kappa,U+03BA ISOgrk3 + "lambda": 955, //greek small letter lambda,U+03BB ISOgrk3 + "mu": 956, //greek small letter mu, U+03BC ISOgrk3 + "nu": 957, //greek small letter nu, U+03BD ISOgrk3 + "xi": 958, //greek small letter xi, U+03BE ISOgrk3 + "omicron": 959, //greek small letter omicron, U+03BF NEW + "pi": 960, //greek small letter pi, U+03C0 ISOgrk3 + "rho": 961, //greek small letter rho, U+03C1 ISOgrk3 + "sigmaf": 962, //greek small letter final sigma,U+03C2 ISOgrk3 + "sigma": 963, //greek small letter sigma,U+03C3 ISOgrk3 + "tau": 964, //greek small letter tau, U+03C4 ISOgrk3 + "upsilon": 965, //greek small letter upsilon,U+03C5 ISOgrk3 + "phi": 966, //greek small letter phi, U+03C6 ISOgrk3 + "chi": 967, //greek small letter chi, U+03C7 ISOgrk3 + "psi": 968, //greek small letter psi, U+03C8 ISOgrk3 + "omega": 969, //greek small letter omega,U+03C9 ISOgrk3 + "thetasym": 977, //greek small letter theta symbol,U+03D1 NEW + "upsih": 978, //greek upsilon with hook symbol,U+03D2 NEW + "piv": 982, //greek pi symbol, U+03D6 ISOgrk3 + // General Punctuation + "bull": 8226, //bullet = black small circle,U+2022 ISOpub + // bullet is NOT the same as bullet operator, U+2219 + "hellip": 8230, //horizontal ellipsis = three dot leader,U+2026 ISOpub + "prime": 8242, //prime = minutes = feet, U+2032 ISOtech + "Prime": 8243, //double prime = seconds = inches,U+2033 ISOtech + "oline": 8254, //overline = spacing overscore,U+203E NEW + "frasl": 8260, //fraction slash, U+2044 NEW + // Letterlike Symbols + "weierp": 8472, //script capital P = power set= Weierstrass p, U+2118 ISOamso + "image": 8465, //blackletter capital I = imaginary part,U+2111 ISOamso + "real": 8476, //blackletter capital R = real part symbol,U+211C ISOamso + "trade": 8482, //trade mark sign, U+2122 ISOnum + "alefsym": 8501, //alef symbol = first transfinite cardinal,U+2135 NEW + // alef symbol is NOT the same as hebrew letter alef,U+05D0 although the same glyph could be used to depict both characters + // Arrows + "larr": 8592, //leftwards arrow, U+2190 ISOnum + "uarr": 8593, //upwards arrow, U+2191 ISOnum--> + "rarr": 8594, //rightwards arrow, U+2192 ISOnum + "darr": 8595, //downwards arrow, U+2193 ISOnum + "harr": 8596, //left right arrow, U+2194 ISOamsa + "crarr": 8629, //downwards arrow with corner leftwards= carriage return, U+21B5 NEW + "lArr": 8656, //leftwards double arrow, U+21D0 ISOtech + // ISO 10646 does not say that lArr is the same as the 'is implied by' arrowbut also does not have any other character for that function. So ? lArr canbe used for 'is implied by' as ISOtech suggests + "uArr": 8657, //upwards double arrow, U+21D1 ISOamsa + "rArr": 8658, //rightwards double arrow,U+21D2 ISOtech + // ISO 10646 does not say this is the 'implies' character but does not have another character with this function so ?rArr can be used for 'implies' as ISOtech suggests + "dArr": 8659, //downwards double arrow, U+21D3 ISOamsa + "hArr": 8660, //left right double arrow,U+21D4 ISOamsa + // Mathematical Operators + "forall": 8704, //for all, U+2200 ISOtech + "part": 8706, //partial differential, U+2202 ISOtech + "exist": 8707, //there exists, U+2203 ISOtech + "empty": 8709, //empty set = null set = diameter,U+2205 ISOamso + "nabla": 8711, //nabla = backward difference,U+2207 ISOtech + "isin": 8712, //element of, U+2208 ISOtech + "notin": 8713, //not an element of, U+2209 ISOtech + "ni": 8715, //contains as member, U+220B ISOtech + // should there be a more memorable name than 'ni'? + "prod": 8719, //n-ary product = product sign,U+220F ISOamsb + // prod is NOT the same character as U+03A0 'greek capital letter pi' though the same glyph might be used for both + "sum": 8721, //n-ary summation, U+2211 ISOamsb + // sum is NOT the same character as U+03A3 'greek capital letter sigma' though the same glyph might be used for both + "minus": 8722, //minus sign, U+2212 ISOtech + "lowast": 8727, //asterisk operator, U+2217 ISOtech + "radic": 8730, //square root = radical sign,U+221A ISOtech + "prop": 8733, //proportional to, U+221D ISOtech + "infin": 8734, //infinity, U+221E ISOtech + "ang": 8736, //angle, U+2220 ISOamso + "and": 8743, //logical and = wedge, U+2227 ISOtech + "or": 8744, //logical or = vee, U+2228 ISOtech + "cap": 8745, //intersection = cap, U+2229 ISOtech + "cup": 8746, //union = cup, U+222A ISOtech + "int": 8747, //integral, U+222B ISOtech + "there4": 8756, //therefore, U+2234 ISOtech + "sim": 8764, //tilde operator = varies with = similar to,U+223C ISOtech + // tilde operator is NOT the same character as the tilde, U+007E,although the same glyph might be used to represent both + "cong": 8773, //approximately equal to, U+2245 ISOtech + "asymp": 8776, //almost equal to = asymptotic to,U+2248 ISOamsr + "ne": 8800, //not equal to, U+2260 ISOtech + "equiv": 8801, //identical to, U+2261 ISOtech + "le": 8804, //less-than or equal to, U+2264 ISOtech + "ge": 8805, //greater-than or equal to,U+2265 ISOtech + "sub": 8834, //subset of, U+2282 ISOtech + "sup": 8835, //superset of, U+2283 ISOtech + // note that nsup, 'not a superset of, U+2283' is not covered by the Symbol font encoding and is not included. Should it be, for symmetry?It is in ISOamsn --> <!ENTITY nsub": 8836, //not a subset of, U+2284 ISOamsn + "sube": 8838, //subset of or equal to, U+2286 ISOtech + "supe": 8839, //superset of or equal to,U+2287 ISOtech + "oplus": 8853, //circled plus = direct sum,U+2295 ISOamsb + "otimes": 8855, //circled times = vector product,U+2297 ISOamsb + "perp": 8869, //up tack = orthogonal to = perpendicular,U+22A5 ISOtech + "sdot": 8901, //dot operator, U+22C5 ISOamsb + // dot operator is NOT the same character as U+00B7 middle dot + // Miscellaneous Technical + "lceil": 8968, //left ceiling = apl upstile,U+2308 ISOamsc + "rceil": 8969, //right ceiling, U+2309 ISOamsc + "lfloor": 8970, //left floor = apl downstile,U+230A ISOamsc + "rfloor": 8971, //right floor, U+230B ISOamsc + "lang": 9001, //left-pointing angle bracket = bra,U+2329 ISOtech + // lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark' + "rang": 9002, //right-pointing angle bracket = ket,U+232A ISOtech + // rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark' + // Geometric Shapes + "loz": 9674, //lozenge, U+25CA ISOpub + // Miscellaneous Symbols + "spades": 9824, //black spade suit, U+2660 ISOpub + // black here seems to mean filled as opposed to hollow + "clubs": 9827, //black club suit = shamrock,U+2663 ISOpub + "hearts": 9829, //black heart suit = valentine,U+2665 ISOpub + "diams": 9830, //black diamond suit, U+2666 ISOpub + + // Latin Extended-A + "OElig": 338, // -- latin capital ligature OE,U+0152 ISOlat2 + "oelig": 339, // -- latin small ligature oe, U+0153 ISOlat2 + // ligature is a misnomer, this is a separate character in some languages + "Scaron": 352, // -- latin capital letter S with caron,U+0160 ISOlat2 + "scaron": 353, // -- latin small letter s with caron,U+0161 ISOlat2 + "Yuml": 376, // -- latin capital letter Y with diaeresis,U+0178 ISOlat2 + // Spacing Modifier Letters + "circ": 710, // -- modifier letter circumflex accent,U+02C6 ISOpub + "tilde": 732, //small tilde, U+02DC ISOdia + // General Punctuation + "ensp": 8194, //en space, U+2002 ISOpub + "emsp": 8195, //em space, U+2003 ISOpub + "thinsp": 8201, //thin space, U+2009 ISOpub + "zwnj": 8204, //zero width non-joiner,U+200C NEW RFC 2070 + "zwj": 8205, //zero width joiner, U+200D NEW RFC 2070 + "lrm": 8206, //left-to-right mark, U+200E NEW RFC 2070 + "rlm": 8207, //right-to-left mark, U+200F NEW RFC 2070 + "ndash": 8211, //en dash, U+2013 ISOpub + "mdash": 8212, //em dash, U+2014 ISOpub + "lsquo": 8216, //left single quotation mark,U+2018 ISOnum + "rsquo": 8217, //right single quotation mark,U+2019 ISOnum + "sbquo": 8218, //single low-9 quotation mark, U+201A NEW + "ldquo": 8220, //left double quotation mark,U+201C ISOnum + "rdquo": 8221, //right double quotation mark,U+201D ISOnum + "bdquo": 8222, //double low-9 quotation mark, U+201E NEW + "dagger": 8224, //dagger, U+2020 ISOpub + "Dagger": 8225, //double dagger, U+2021 ISOpub + "permil": 8240, //per mille sign, U+2030 ISOtech + "lsaquo": 8249, //single left-pointing angle quotation mark,U+2039 ISO proposed + // lsaquo is proposed but not yet ISO standardized + "rsaquo": 8250, //single right-pointing angle quotation mark,U+203A ISO proposed + // rsaquo is proposed but not yet ISO standardized + "euro": 8364 // -- euro sign, U+20AC NEW +}; + + +/** Mapping of char codes to HTML entity names */ +qx.Class.FROM_CHARCODE = qx.lang.Object.invert(qx.Class.TO_CHARCODE); + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/EventRegistration.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/EventRegistration.js new file mode 100644 index 0000000000..d8a8d43884 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/EventRegistration.js @@ -0,0 +1,67 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#require(qx.core.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.EventRegistration"); + +/** + * Assign a function to an event. + * + * @param vElement {Element} DOM Element + * @param vType {String} Name of the event + * @param vFunction {Function} The pointer to the function to assign + */ +qx.html.EventRegistration.addEventListener = function(vElement, vType, vFunction) {}; + +/** + * Unassign a function from an event. + * + * @param vElement {Element} DOM Element + * @param vType {String} Name of the event + * @param vFunction {Function} The pointer to the function to assign + */ +qx.html.EventRegistration.removeEventListener = function(vElement, vType, vFunction) {}; + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.EventRegistration.addEventListener = function(vElement, vType, vFunction) { + vElement.attachEvent("on" + vType, vFunction); + } + + qx.html.EventRegistration.removeEventListener = function(vElement, vType, vFunction) { + vElement.detachEvent("on" + vType, vFunction); + } +} +else +{ + qx.html.EventRegistration.addEventListener = function(vElement, vType, vFunction) { + vElement.addEventListener(vType, vFunction, false); + } + + qx.html.EventRegistration.removeEventListener = function(vElement, vType, vFunction) { + vElement.removeEventListener(vType, vFunction, false); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Form.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Form.js new file mode 100644 index 0000000000..4ebe0be8ca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Form.js @@ -0,0 +1,111 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Form"); + +qx.Class.ignoreInputTypes = [ "file", "submit", "image", "reset", "button" ]; +qx.Class.ignoreElementTypes = [ "fieldset" ]; +qx.Class.checkElementTypes = [ "radio", "checkbox" ]; +qx.Class.multiSelectType = "select-multiple"; + +qx.Class.inputFilter = function(vNode) +{ + if (vNode.disabled) { + return false; + } + + var vTag = (vNode.tagName || "").toLowerCase(); + + if (qx.lang.Array.contains(qx.html.Form.ignoreElementTypes, vTag)) { + return false; + } + + var vType = vNode.type.toLowerCase(); + + if (qx.lang.Array.contains(qx.html.Form.ignoreInputTypes, vType)) { + return false; + } + + if (!vNode.checked && qx.lang.Array.contains(qx.html.Form.checkElementTypes, vType)) { + return false; + } + + return true; +} + +qx.Class.getFields = function(vForm) { + return Array.filter(vForm.elements, qx.html.Form.inputFilter); +} + +qx.Class.encodeField = function(vNode) +{ + var vName = vNode.name || ""; + var vType = (vNode.type || "").toLowerCase(); + + if(vType === qx.html.Form.multiSelectType) + { + var vValues = []; + + for(var i=0; i<vNode.options.length; i++) + { + if(vNode.options[i].selected) { + vValues.push(vName + "=" + vNode.options[i].value); + } + } + + return vValues.join("&"); + } + else + { + return vName + "=" + vNode.value; + } +} + +qx.Class.encodeForm = function(vForm) +{ + var vFields = qx.html.Form.getFields(vForm); + var vAll = []; + + for (var i=0, l=vFields.length; i<l; i++) { + vAll.push(qx.html.Form.encodeField(vFields[i])); + } + + return vAll.join("&"); +} + +qx.Class.bind = function(vForm, vMethod) +{ + qx.html.EventRegistration.addEventListener(vForm, "submit", function(e) + { + e.returnValue = false; + + if (typeof e.preventDefault === "function") { + e.preventDefault(); + } + + return vMethod(e); + }); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Iframe.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Iframe.js new file mode 100644 index 0000000000..adc4d8fcf7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Iframe.js @@ -0,0 +1,92 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) +#require(qx.core.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Iframe"); + +qx.html.Iframe.getWindow = function(vIframe) {}; +qx.html.Iframe.getDocument = function(vIframe) {}; + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.Iframe.getWindow = function(vIframe) + { + try + { + return vIframe.contentWindow; + } + catch(ex) + { + return null; + } + } + + qx.html.Iframe.getDocument = function(vIframe) + { + try + { + var vWin = qx.html.Iframe.getWindow(vIframe); + return vWin ? vWin.document : null; + } + catch(ex) + { + return null; + } + } +} +else +{ + qx.html.Iframe.getWindow = function(vIframe) + { + try + { + var vDoc = qx.html.Iframe.getDocument(vIframe); + return vDoc ? vDoc.defaultView : null; + } + catch(ex) + { + return null; + } + } + + qx.html.Iframe.getDocument = function(vIframe) + { + try + { + return vIframe.contentDocument; + } + catch(ex) + { + return null; + } + } +} + +qx.html.Iframe.getBody = function(vIframe) +{ + var vDoc = qx.html.Iframe.getDocument(vIframe); + return vDoc ? vDoc.getElementsByTagName("body")[0] : null; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Location.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Location.js new file mode 100644 index 0000000000..b51241bb16 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Location.js @@ -0,0 +1,284 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.core.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Location"); + +qx.html.Location.getPageOuterLeft = function(el) { return qx.html.Location.getPageBoxLeft(el) - qx.html.Style.getMarginLeft(el); } +qx.html.Location.getPageOuterTop = function(el) { return qx.html.Location.getPageBoxTop(el) - qx.html.Style.getMarginTop(el); } +qx.html.Location.getPageOuterRight = function(el) { return qx.html.Location.getPageBoxRight(el) + qx.html.Style.getMarginRight(el); } +qx.html.Location.getPageOuterBottom = function(el) { return qx.html.Location.getPageBoxBottom(el) + qx.html.Style.getMarginBottom(el); } + +qx.html.Location.getClientOuterLeft = function(el) { return qx.html.Location.getClientBoxLeft(el) - qx.html.Style.getMarginLeft(el); } +qx.html.Location.getClientOuterTop = function(el) { return qx.html.Location.getClientBoxTop(el) - qx.html.Style.getMarginTop(el); } +qx.html.Location.getClientOuterRight = function(el) { return qx.html.Location.getClientBoxRight(el) + qx.html.Style.getMarginRight(el); } +qx.html.Location.getClientOuterBottom = function(el) { return qx.html.Location.getClientBoxBottom(el) + qx.html.Style.getMarginBottom(el); } + + +qx.html.Location.getClientBoxLeft = function(el) {} +qx.html.Location.getClientBoxTop = function(el) {} +qx.html.Location.getClientBoxRight = function(el) {} +qx.html.Location.getClientBoxBottom = function(el) {} +qx.html.Location.getPageBoxLeft = function(el) {} +qx.html.Location.getPageBoxTop = function(el) {} +qx.html.Location.getPageBoxRight = function(el) {} +qx.html.Location.getPageBoxBottom = function(el) {} + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.Location.getClientBoxLeft = function(el) { return el.getBoundingClientRect().left; } + qx.html.Location.getClientBoxTop = function(el) { return el.getBoundingClientRect().top; } + + qx.html.Location.getPageBoxLeft = function(el) { return qx.html.Location.getClientBoxLeft(el) + qx.html.Scroll.getLeftSum(el); } + qx.html.Location.getPageBoxTop = function(el) { return qx.html.Location.getClientBoxTop(el) + qx.html.Scroll.getTopSum(el); } +} +else if (qx.core.Client.getInstance().isGecko()) +{ + qx.html.Location.getClientBoxLeft = function(el) { return qx.html.Location.getClientAreaLeft(el) - qx.html.Style.getBorderLeft(el); } + qx.html.Location.getClientBoxTop = function(el) { return qx.html.Location.getClientAreaTop(el) - qx.html.Style.getBorderTop(el); } + + qx.html.Location.getPageBoxLeft = function(el) { return qx.html.Location.getPageAreaLeft(el) - qx.html.Style.getBorderLeft(el); } + qx.html.Location.getPageBoxTop = function(el) { return qx.html.Location.getPageAreaTop(el) - qx.html.Style.getBorderTop(el); } +} +else +{ + qx.html.Location.getPageBoxLeft = function(el) + { + var sum = el.offsetLeft; + while (el.tagName.toLowerCase() != "body") + { + el = el.offsetParent; + sum += el.offsetLeft; + } + + return sum; + } + + qx.html.Location.getPageBoxTop = function(el) + { + var sum = el.offsetTop; + while (el.tagName.toLowerCase() != "body") + { + el = el.offsetParent; + sum += el.offsetTop; + } + + return sum; + } + + qx.html.Location.getClientBoxLeft = function(el) + { + var sum = el.offsetLeft; + while (el.tagName.toLowerCase() != "body") + { + el = el.offsetParent; + sum += el.offsetLeft - el.scrollLeft; + } + + return sum; + } + + qx.html.Location.getClientBoxTop = function(el) + { + var sum = el.offsetTop; + while (el.tagName.toLowerCase() != "body") + { + el = el.offsetParent; + sum += el.offsetTop - el.scrollTop; + } + + return sum; + } +} + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.Location.getClientBoxRight = function(el) { return el.getBoundingClientRect().right; } + qx.html.Location.getClientBoxBottom = function(el) { return el.getBoundingClientRect().bottom; } + + qx.html.Location.getPageBoxRight = function(el) { return qx.html.Location.getClientBoxRight(el) + qx.html.Scroll.getLeftSum(el); } + qx.html.Location.getPageBoxBottom = function(el) { return qx.html.Location.getClientBoxBottom(el) + qx.html.Scroll.getTopSum(el); } +} +else +{ + qx.html.Location.getClientBoxRight = function(el) { return qx.html.Location.getClientBoxLeft(el) + qx.html.Dimension.getBoxWidth(el); } + qx.html.Location.getClientBoxBottom = function(el) { return qx.html.Location.getClientBoxTop(el) + qx.html.Dimension.getBoxHeight(el); } + + qx.html.Location.getPageBoxRight = function(el) { return qx.html.Location.getPageBoxLeft(el) + qx.html.Dimension.getBoxWidth(el); } + qx.html.Location.getPageBoxBottom = function(el) { return qx.html.Location.getPageBoxTop(el) + qx.html.Dimension.getBoxHeight(el); } +} + + +qx.html.Location.getClientAreaLeft = function(el) {}; +qx.html.Location.getClientAreaTop = function(el) {}; +qx.html.Location.getPageAreaLeft = function(el) {}; +qx.html.Location.getPageAreaTop = function(el) {}; + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.html.Location.getPageAreaLeft = function(el) { + return el.ownerDocument.getBoxObjectFor(el).x; + } + + qx.html.Location.getPageAreaTop = function(el) { + return el.ownerDocument.getBoxObjectFor(el).y; + } + + // We need to subtract the scroll position of all parent containers (bug #186229). + qx.html.Location.getClientAreaLeft = function(el) { + return qx.html.Location.getPageAreaLeft(el) - qx.html.Scroll.getLeftSum(el); + } + + // We need to subtract the scroll position of all parent containers (bug #186229). + qx.html.Location.getClientAreaTop = function(el) { + return qx.html.Location.getPageAreaTop(el) - qx.html.Scroll.getTopSum(el); + } +} +else +{ + qx.html.Location.getClientAreaLeft = function(el) { return qx.html.Location.getClientBoxLeft(el) + qx.html.Style.getBorderLeft(el); } + qx.html.Location.getClientAreaTop = function(el) { return qx.html.Location.getClientBoxTop(el) + qx.html.Style.getBorderTop(el); } + + qx.html.Location.getPageAreaLeft = function(el) { return qx.html.Location.getPageBoxLeft(el) + qx.html.Style.getBorderLeft(el); } + qx.html.Location.getPageAreaTop = function(el) { return qx.html.Location.getPageBoxTop(el) + qx.html.Style.getBorderTop(el); } +} + + + +qx.html.Location.getClientAreaRight = function(el) { return qx.html.Location.getClientAreaLeft(el) + qx.html.Dimension.getAreaWidth(el); } +qx.html.Location.getClientAreaBottom = function(el) { return qx.html.Location.getClientAreaTop(el) + qx.html.Dimension.getAreaHeight(el); } + +qx.html.Location.getPageAreaRight = function(el) { return qx.html.Location.getPageAreaLeft(el) + qx.html.Dimension.getAreaWidth(el); } +qx.html.Location.getPageAreaBottom = function(el) { return qx.html.Location.getPageAreaTop(el) + qx.html.Dimension.getAreaHeight(el); } + + + + +qx.html.Location.getClientInnerLeft = function(el) { return qx.html.Location.getClientAreaLeft(el) + qx.html.Style.getPaddingLeft(el); } +qx.html.Location.getClientInnerTop = function(el) { return qx.html.Location.getClientAreaTop(el) + qx.html.Style.getPaddingTop(el); } +qx.html.Location.getClientInnerRight = function(el) { return qx.html.Location.getClientInnerLeft(el) + qx.html.Dimension.getInnerWidth(el); } +qx.html.Location.getClientInnerBottom = function(el) { return qx.html.Location.getClientInnerTop(el) + qx.html.Dimension.getInnerHeight(el); } + +qx.html.Location.getPageInnerLeft = function(el) { return qx.html.Location.getPageAreaLeft(el) + qx.html.Style.getPaddingLeft(el); } +qx.html.Location.getPageInnerTop = function(el) { return qx.html.Location.getPageAreaTop(el) + qx.html.Style.getPaddingTop(el); } +qx.html.Location.getPageInnerRight = function(el) { return qx.html.Location.getPageInnerLeft(el) + qx.html.Dimension.getInnerWidth(el); } +qx.html.Location.getPageInnerBottom = function(el) { return qx.html.Location.getPageInnerTop(el) + qx.html.Dimension.getInnerHeight(el); } + + +// Screen +qx.html.Location.getScreenBoxLeft = function(el) {}; +qx.html.Location.getScreenBoxTop = function(el) {}; + +if (qx.core.Client.getInstance().isGecko()) +{ + /* + screenX and screenY seem to return the distance to the box + and not to the area. Confusing, especially as the x and y properties + of the BoxObject return the distance to the area. + */ + + qx.html.Location.getScreenBoxLeft = function(el) + { + // We need to subtract the scroll position of all + // parent containers (bug #186229). + var sum = 0; + var p = el.parentNode; + while (p.nodeType == 1) { + sum += p.scrollLeft; + p = p.parentNode; + } + + return el.ownerDocument.getBoxObjectFor(el).screenX - sum; + } + + qx.html.Location.getScreenBoxTop = function(el) + { + // We need to subtract the scroll position of all + // parent containers (bug #186229). + var sum = 0; + var p = el.parentNode; + while (p.nodeType == 1) { + sum += p.scrollTop; + p = p.parentNode; + } + + return el.ownerDocument.getBoxObjectFor(el).screenY - sum; + } +} +else +{ + // Hope this works in khtml, too (opera 7.6p3 seems to be ok) + qx.html.Location.getScreenBoxLeft = function(el) { return qx.html.Location.getScreenDocumentLeft(el) + qx.html.Location.getPageBoxLeft(el); } + qx.html.Location.getScreenBoxTop = function(el) { return qx.html.Location.getScreenDocumentTop(el) + qx.html.Location.getPageBoxTop(el); } +} + +qx.html.Location.getScreenBoxRight = function(el) { return qx.html.Location.getScreenBoxLeft(el) + qx.html.Dimension.getBoxWidth(el); } +qx.html.Location.getScreenBoxBottom = function(el) { return qx.html.Location.getScreenBoxTop(el) + qx.html.Dimension.getBoxHeight(el); } + +qx.html.Location.getScreenOuterLeft = function(el) { return qx.html.Location.getScreenBoxLeft(el) - qx.html.Style.getMarginLeft(el); } +qx.html.Location.getScreenOuterTop = function(el) { return qx.html.Location.getScreenBoxTop(el) - qx.html.Style.getMarginTop(el); } +qx.html.Location.getScreenOuterRight = function(el) { return qx.html.Location.getScreenBoxRight(el) + qx.html.Style.getMarginRight(el); } +qx.html.Location.getScreenOuterBottom = function(el) { return qx.html.Location.getScreenBoxBottom(el) + qx.html.Style.getMarginBottom(el); } + +qx.html.Location.getScreenAreaLeft = function(el) { return qx.html.Location.getScreenBoxLeft(el) + qx.html.Dimension.getInsetLeft(el); } +qx.html.Location.getScreenAreaTop = function(el) { return qx.html.Location.getScreenBoxTop(el) + qx.html.Dimension.getInsetTop(el); } +qx.html.Location.getScreenAreaRight = function(el) { return qx.html.Location.getScreenBoxRight(el) - qx.html.Dimension.getInsetRight(el); } +qx.html.Location.getScreenAreaBottom = function(el) { return qx.html.Location.getScreenBoxBottom(el) - qx.html.Dimension.getInsetBottom(el); } + +qx.html.Location.getScreenInnerLeft = function(el) { return qx.html.Location.getScreenAreaLeft(el) + qx.html.Style.getPaddingLeft(el); } +qx.html.Location.getScreenInnerTop = function(el) { return qx.html.Location.getScreenAreaTop(el) + qx.html.Style.getPaddingTop(el); } +qx.html.Location.getScreenInnerRight = function(el) { return qx.html.Location.getScreenAreaRight(el) - qx.html.Style.getPaddingRight(el); } +qx.html.Location.getScreenInnerBottom = function(el) { return qx.html.Location.getScreenAreaBottom(el) - qx.html.Style.getPaddingBottom(el); } + + +qx.html.Location.getScreenDocumentLeft = function(el) {}; +qx.html.Location.getScreenDocumentTop = function(el) {}; +qx.html.Location.getScreenDocumentRight = function(el) {}; +qx.html.Location.getScreenDocumentBottom = function(el) {}; + +if (qx.core.Client.getInstance().isGecko()) +{ + /* + Notice: + This doesn't work like the mshtml method: + el.ownerDocument.defaultView.screenX; + */ + + // Tested in Gecko 1.7.5 + qx.html.Location.getScreenDocumentLeft = function(el) { return qx.html.Location.getScreenOuterLeft(el.ownerDocument.body); } + qx.html.Location.getScreenDocumentTop = function(el) { return qx.html.Location.getScreenOuterTop(el.ownerDocument.body); } + qx.html.Location.getScreenDocumentRight = function(el) { return qx.html.Location.getScreenOuterRight(el.ownerDocument.body); } + qx.html.Location.getScreenDocumentBottom = function(el) { return qx.html.Location.getScreenOuterBottom(el.ownerDocument.body); } +} +else +{ + // Tested in Opera 7.6b3 and Mshtml 6.0 (XP-SP2) + // What's up with khtml (Safari/Konq)? + qx.html.Location.getScreenDocumentLeft = function(el) { return el.document.parentWindow.screenLeft; } + qx.html.Location.getScreenDocumentTop = function(el) { return el.document.parentWindow.screenTop; } + qx.html.Location.getScreenDocumentRight = function(el) {} + qx.html.Location.getScreenDocumentBottom = function(el) {} +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Offset.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Offset.js new file mode 100644 index 0000000000..e39631a9c4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Offset.js @@ -0,0 +1,125 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.core.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Offset"); + +/* +Mozilla seems to be a little buggy here. +Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1.0 + +It calculates some borders and/or paddings to the offsetProperties. +*/ + +qx.html.Offset.getLeft = function(vElement) {}; +qx.html.Offset.getTop = function(vElement) {}; + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.html.Offset.getLeft = function(el) + { + var val = el.offsetLeft; + var pa = el.parentNode; + + var pose = qx.html.Style.getStyleProperty(el, "position"); + var posp = qx.html.Style.getStyleProperty(pa, "position"); + + // If element is positioned non-static: Substract the border of the element + if (pose != "absolute" && pose != "fixed") { + val -= qx.html.Style.getBorderLeft(pa); + } + + // If parent is positioned static: Substract the border of the first + // parent element which is ab positioned non-static. + if (posp != "absolute" && posp != "fixed") + { + while(pa) + { + pa = pa.parentNode; + + if (!pa || typeof pa.tagName !== "string") { + break; + } + + var posi = qx.html.Style.getStyleProperty(pa, "position"); + + if (posi == "absolute" || posi == "fixed") { + val -= qx.html.Style.getBorderLeft(pa) + qx.html.Style.getPaddingLeft(pa); + break; + } + } + } + + return val; + } + + qx.html.Offset.getTop = function(el) + { + var val = el.offsetTop; + var pa = el.parentNode; + + var pose = qx.html.Style.getStyleProperty(el, "position"); + var posp = qx.html.Style.getStyleProperty(pa, "position"); + + // If element is positioned non-static: Substract the border of the element + if (pose != "absolute" && pose != "fixed") { + val -= qx.html.Style.getBorderTop(pa); + } + + // If parent is positioned static: Substract the border of the first + // parent element which is ab positioned non-static. + if (posp != "absolute" && posp != "fixed") + { + while(pa) + { + pa = pa.parentNode; + + if (!pa || typeof pa.tagName !== "string") { + break; + } + + var posi = qx.html.Style.getStyleProperty(pa, "position"); + + if (posi == "absolute" || posi == "fixed") { + val -= qx.html.Style.getBorderTop(pa) + qx.html.Style.getPaddingTop(pa); + break; + } + } + } + + return val; + } +} +else +{ + qx.html.Offset.getLeft = function(el) { + return el.offsetLeft; + } + + qx.html.Offset.getTop = function(el) { + return el.offsetTop; + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Scroll.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Scroll.js new file mode 100644 index 0000000000..afcd59f6d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Scroll.js @@ -0,0 +1,55 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Scroll"); + +qx.html.Scroll.getLeftSum = function(el) +{ + var sum = 0; + var p = el.parentNode; + + while (p.nodeType == 1) + { + sum += p.scrollLeft; + p = p.parentNode; + } + + return sum; +} + +qx.html.Scroll.getTopSum = function(el) +{ + var sum = 0; + var p = el.parentNode; + + while (p.nodeType == 1) + { + sum += p.scrollTop; + p = p.parentNode; + } + + return sum; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/ScrollIntoView.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/ScrollIntoView.js new file mode 100644 index 0000000000..bb01b7658d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/ScrollIntoView.js @@ -0,0 +1,197 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.html.Style) + +************************************************************************ */ + +/** + * Functions to scroll DOM elements into the visible area of the parent element + */ +qx.OO.defineClass("qx.html.ScrollIntoView"); + +// Internet Explorer has invented scrollIntoView, but does not behave the same like in Mozilla (which would be better) +// Mozilla has a native well working method scrollIntoView +// Safari does not support scrollIntoView (but it can be found in Webkit since May 2005) +// Opera does not support scrollIntoView + +/** the documents body tag name */ +qx.dom.BODY_TAG_NAME = "body"; + + +/** + * Scroll the parent DOM element so that the element's so that the x coordinate is inside + * the visible area of the parent. + * + * @param vElement {Element} DOM node to be scrolled into view + * @param vAlignLeft {Boolean} whether the element should be left aligned + */ +qx.html.ScrollIntoView.scrollX = function(vElement, vAlignLeft) +{ + var vParentWidth, vParentScrollLeft, vWidth, vHasScroll; + + var vParent = vElement.parentNode; + var vOffset = vElement.offsetLeft; + var vWidth = vElement.offsetWidth; + + while(vParent) + { + switch(qx.html.Style.getStyleProperty(vParent, "overflow")) + { + case "scroll": + case "auto": + case "-moz-scrollbars-horizontal": + vHasScroll = true; + break; + + default: + switch(qx.html.Style.getStyleProperty(vParent, "overflowX")) + { + case "scroll": + case "auto": + vHasScroll = true; + break; + + default: + vHasScroll = false; + } + } + + if (vHasScroll) + { + vParentWidth = vParent.clientWidth; + vParentScrollLeft = vParent.scrollLeft; + + if (vAlignLeft) + { + vParent.scrollLeft = vOffset; + } + else if (vAlignLeft == false) + { + vParent.scrollLeft = vOffset + vWidth - vParentWidth; + } + else if (vWidth > vParentWidth || vOffset < vParentScrollLeft) + { + vParent.scrollLeft = vOffset; + } + else if ((vOffset + vWidth) > (vParentScrollLeft + vParentWidth)) + { + vParent.scrollLeft = vOffset + vWidth - vParentWidth; + } + + vOffset = vParent.offsetLeft; + vWidth = vParent.offsetWidth; + } + else + { + vOffset += vParent.offsetLeft; + } + + if (vParent.tagName.toLowerCase() == qx.dom.BODY_TAG_NAME) { + break; + } + + vParent = vParent.parentNode; + } + + return true; +} + + +/** + * Scroll the parent DOM element so that the element's so that the y coordinate is inside + * the visible area of the parent. + * + * @param vElement {Element} DOM node to be scrolled into view + * @param vAlignTop {Boolean} whether the element should be top aligned + */ +qx.html.ScrollIntoView.scrollY = function(vElement, vAlignTop) +{ + var vParentHeight, vParentScrollTop, vHeight, vHasScroll; + + var vParent = vElement.parentNode; + var vOffset = vElement.offsetTop; + var vHeight = vElement.offsetHeight; + + while(vParent) + { + switch(qx.html.Style.getStyleProperty(vParent, "overflow")) + { + case "scroll": + case "auto": + case "-moz-scrollbars-vertical": + vHasScroll = true; + break; + + default: + switch(qx.html.Style.getStyleProperty(vParent, "overflowY")) + { + case "scroll": + case "auto": + vHasScroll = true; + break; + + default: + vHasScroll = false; + } + } + + if (vHasScroll) + { + vParentHeight = vParent.clientHeight; + vParentScrollTop = vParent.scrollTop; + + if (vAlignTop) + { + vParent.scrollTop = vOffset; + } + else if (vAlignTop == false) + { + vParent.scrollTop = vOffset + vHeight - vParentHeight; + } + else if (vHeight > vParentHeight || vOffset < vParentScrollTop) + { + vParent.scrollTop = vOffset; + } + else if ((vOffset + vHeight) > (vParentScrollTop + vParentHeight)) + { + vParent.scrollTop = vOffset + vHeight - vParentHeight; + } + + vOffset = vParent.offsetTop; + vHeight = vParent.offsetHeight; + } + else + { + vOffset += vParent.offsetTop; + } + + if (vParent.tagName.toLowerCase() == qx.dom.BODY_TAG_NAME) { + break; + } + + vParent = vParent.parentNode; + } + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/String.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/String.js new file mode 100644 index 0000000000..b2664ecb6e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/String.js @@ -0,0 +1,123 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.lang.Object) + +************************************************************************ */ + +/** + * A Collection of utility functions to escape and unescape strings. + */ +qx.OO.defineClass("qx.html.String"); + + +/** + * Escapes the characters in a <code>String</code> using HTML entities. + * + * For example: <tt>"bread" & "butter"</tt> => <tt>&quot;bread&quot; &amp; &quot;butter&quot;</tt>. + * Supports all known HTML 4.0 entities, including funky accents. + * + * * <a href="http://www.w3.org/TR/REC-html32#latin1">HTML 3.2 Character Entities for ISO Latin-1</a> + * * <a href="http://www.w3.org/TR/REC-html40/sgml/entities.html">HTML 4.0 Character entity references</a> + * * <a href="http://www.w3.org/TR/html401/charset.html#h-5.3">HTML 4.01 Character References</a> + * * <a href="http://www.w3.org/TR/html401/charset.html#code-position">HTML 4.01 Code positions</a> + * + * @see #unescape + * + * @param str {String} the String to escape + * @return {String} a new escaped String + */ +qx.Class.escape = function(str) { + return qx.dom.String.escapeEntities( + str, + qx.html.Entity.FROM_CHARCODE + ); +}; + + +/** + * Unescapes a string containing entity escapes to a string + * containing the actual Unicode characters corresponding to the + * escapes. Supports HTML 4.0 entities. + * + * For example, the string "&lt;Fran&ccedil;ais&gt;" + * will become "<Français>" + * + * If an entity is unrecognized, it is left alone, and inserted + * verbatim into the result string. e.g. "&gt;&zzzz;x" will + * become ">&zzzz;x". + * + * @see #escape + * + * @param str {String} the String to unescape, may be null + * @return a new unescaped String + */ +qx.Class.unescape = function(str) { + return qx.dom.String.unescapeEntities( + str, + qx.html.Entity.TO_CHARCODE + ); +}; + + +/** + * Converts a plain text string into HTML. + * This is similar to {@link #escape} but converts new lines to + * <tt><:br>:</tt> and preserves whitespaces. + * + * @see #escape + * + * @param str {String} the String to convert + * @return {String} a new converted String + */ +qx.Class.fromText = function(str) { + return qx.html.String.escape(str).replace(/( |\n)/g, function(chr) { + var map = { + " ": " ", + "\n": "<br>" + } + return map[chr] || chr; + }); +} + + +/** + * Converts HTML to plain text. + * + * * Strips all HTML tags + * * converts <tt><:br>:</tt> to new line + * * unescapes HTML entities + * + * @param str {String} HTML string to converts + * @return {String} plain text representaion of the HTML string + */ +qx.Class.toText = function(str) { + return qx.html.String.unescape(str.replace(/\s+|<([^>])+>/gi, function(chr) { + if (/\s+/.test(chr)) { + return " "; + } + else if (/^<BR|^<br/gi.test(chr)) { + return "\n"; + } else { + return ""; + } + })); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Style.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Style.js new file mode 100644 index 0000000000..9ab7847f97 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Style.js @@ -0,0 +1,228 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.core.Client) + +************************************************************************ */ + +/** + * Methods to get CSS style properties of DOM elements. + */ +qx.OO.defineClass("qx.html.Style"); + +/** + * TODO + */ +qx.html.Style.getStylePropertySure = function(vElement, propertyName) {}; + +/** + * Get the (CSS) style property of a given DOM element + * + * @param vElement {Element} the DOM element + * @param propertyName {String} the name of the style property. e.g. "color", "border", ... + * @return {String} the (CSS) style property + */ +qx.html.Style.getStyleProperty = function(vElement, propertyName) {}; + +if (Boolean(document.defaultView) && Boolean(document.defaultView.getComputedStyle)) +{ + qx.html.Style.getStylePropertySure = function(el, prop) { return !el ? null : el.ownerDocument ? el.ownerDocument.defaultView.getComputedStyle(el, "")[prop] : el.style[prop]; } + + qx.html.Style.getStyleProperty = function(el, prop) + { + try + { + return el.ownerDocument.defaultView.getComputedStyle(el, "")[prop]; + } + catch(ex) + { + throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex); + } + } +} +else if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.Style.getStyleProperty = function(el, prop) + { + try + { + return el.currentStyle[prop]; + } + catch(ex) + { + throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex); + } + } + + qx.html.Style.getStylePropertySure = function(el, prop) + { + try + { + if (!el) { + return null; + } + + if (el.parentNode && el.currentStyle) + { + return el.currentStyle[prop]; + } + else + { + var v1 = el.runtimeStyle[prop]; + + if (v1 != null && typeof v1 != "undefined" && v1 != "") { + return v1; + } + + return el.style[prop]; + } + } + catch(ex) + { + throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]: " + ex); + } + } +} +else +{ + qx.html.Style.getStylePropertySure = function(el, prop) { return !el ? null : el.style[prop]; } + + qx.html.Style.getStyleProperty = function(el, prop) + { + try + { + return el.style[prop]; + } + catch(ex) + { + throw new Error("Could not evaluate computed style: " + el + "[" + prop + "]"); + } + } +} + +/** + * Get a (CSS) style property of a given DOM element and interpret the property as integer value + * + * @param vElement {Element} the DOM element + * @param propertyName {String} the name of the style property. e.g. "paddingTop", "marginLeft", ... + * @return {Integer} the (CSS) style property converted to an integer value + */ +qx.html.Style.getStyleSize = function(vElement, propertyName) { return parseInt(qx.html.Style.getStyleProperty(vElement, propertyName)) || 0; } + + +// Properties +/** + * Get the element's left margin. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's left margin size + */ +qx.html.Style.getMarginLeft = function(vElement) { return qx.html.Style.getStyleSize(vElement, "marginLeft"); } + +/** + * Get the element's top margin. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's top margin size + */ +qx.html.Style.getMarginTop = function(vElement) { return qx.html.Style.getStyleSize(vElement, "marginTop"); } + +/** + * Get the element's right margin. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's right margin size + */ +qx.html.Style.getMarginRight = function(vElement) { return qx.html.Style.getStyleSize(vElement, "marginRight"); } + +/** + * Get the element's bottom margin. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's bottom margin size + */ +qx.html.Style.getMarginBottom = function(vElement) { return qx.html.Style.getStyleSize(vElement, "marginBottom"); } + +/** + * Get the element's left padding. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's left padding size + */ +qx.html.Style.getPaddingLeft = function(vElement) { return qx.html.Style.getStyleSize(vElement, "paddingLeft"); } + +/** + * Get the element's top padding. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's top padding size + */ +qx.html.Style.getPaddingTop = function(vElement) { return qx.html.Style.getStyleSize(vElement, "paddingTop"); } + +/** + * Get the element's right padding. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's right padding size + */ +qx.html.Style.getPaddingRight = function(vElement) { return qx.html.Style.getStyleSize(vElement, "paddingRight"); } + +/** + * Get the element's bottom padding. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's bottom padding size + */ +qx.html.Style.getPaddingBottom = function(vElement) { return qx.html.Style.getStyleSize(vElement, "paddingBottom"); } + +/** + * Get the element's left border width. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's left border width + */ +qx.html.Style.getBorderLeft = function(vElement) { return qx.html.Style.getStyleProperty(vElement, "borderLeftStyle") == "none" ? 0 : qx.html.Style.getStyleSize(vElement, "borderLeftWidth"); } + +/** + * Get the element's top border width. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's top border width + */ +qx.html.Style.getBorderTop = function(vElement) { return qx.html.Style.getStyleProperty(vElement, "borderTopStyle") == "none" ? 0 : qx.html.Style.getStyleSize(vElement, "borderTopWidth"); } + +/** + * Get the element's right border width. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's right border width + */ +qx.html.Style.getBorderRight = function(vElement) { return qx.html.Style.getStyleProperty(vElement, "borderRightStyle") == "none" ? 0 : qx.html.Style.getStyleSize(vElement, "borderRightWidth"); } + +/** + * Get the element's bottom border width. + * + * @param vElement {Element} the DOM element + * @return {Integer} the element's bottom border width + */ +qx.html.Style.getBorderBottom = function(vElement) { return qx.html.Style.getStyleProperty(vElement, "borderBottomStyle") == "none" ? 0 : qx.html.Style.getStyleSize(vElement, "borderBottomWidth"); } diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/StyleSheet.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/StyleSheet.js new file mode 100644 index 0000000000..c2fdcc0189 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/StyleSheet.js @@ -0,0 +1,325 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Andreas Junghans (lucidcake) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.core.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.StyleSheet"); + +/** + * Include a CSS file + * + * @param vHref {String} Href value + */ +qx.html.StyleSheet.includeFile = function(vHref) +{ + var el = document.createElement("link"); + el.type = "text/css"; + el.rel = "stylesheet"; + el.href = vHref; + + var head = document.getElementsByTagName("head")[0]; + head.appendChild(el); +}; + +/** + * create a new Stylesheet node and append it to the document + * + * @param vCssText {String} optional string of css rules + */ +qx.html.StyleSheet.createElement = function(vCssText) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.createElement = function(vCssText) + { + var vSheet = document.createStyleSheet(); + + if (vCssText) { + vSheet.cssText = vCssText; + } + + return vSheet; + }; +} +else // FF, Opera, Safari +{ + qx.html.StyleSheet.createElement = function(vCssText) + { + var vElement = document.createElement("style"); + vElement.type = "text/css"; + + // Safari 2.0 doesn't like empty stylesheets + vElement.appendChild(document.createTextNode(vCssText || "body {}")); + + document.getElementsByTagName("head")[0].appendChild(vElement); + + if (vElement.sheet) { + return vElement.sheet; + } else { + // Safari 2.0 doesn't support element.sheet so we neet a workaround + var styles = document.styleSheets; + for (var i=styles.length-1; i>=0; i--) { + if (styles[i].ownerNode == vElement) { + return styles[i]; + } + } + } + throw "Error: Could not get a reference to the sheet object"; + }; +} + + +/** + * insert a new CSS rule into a given Stylesheet + * + * @param vSheet {Object} the target Stylesheet object + * @param vSelector {String} the selector + * @param vStyle {String} style rule + */ +qx.html.StyleSheet.addRule = function(vSheet, vSelector, vStyle) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.addRule = function(vSheet, vSelector, vStyle) { + vSheet.addRule(vSelector, vStyle); + }; +} +else if (qx.core.Client.getInstance().isSafari2()) // insertRule in Safari 2 doesn't work +{ + qx.html.StyleSheet.addRule = function(vSheet, vSelector, vStyle) { + if (!vSheet._qxRules) { + vSheet._qxRules = {}; + } + if (!vSheet._qxRules[vSelector]) { + var ruleNode = document.createTextNode(vSelector + "{" + vStyle + "}"); + vSheet.ownerNode.appendChild(ruleNode); + vSheet._qxRules[vSelector] = ruleNode; + } + }; +} +else // FF, Opera +{ + qx.html.StyleSheet.addRule = function(vSheet, vSelector, vStyle) { + vSheet.insertRule(vSelector + "{" + vStyle + "}", vSheet.cssRules.length); + }; +} + + +/** + * remove a CSS rule from a stylesheet + * + * @param vSheet {Object} the Stylesheet + * @param vSelector {String} the Selector of the rule to remove + */ +qx.html.StyleSheet.removeRule = function(vSheet, vSelector) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.removeRule = function(vSheet, vSelector) + { + var vRules = vSheet.rules; + var vLength = vRules.length; + + for (var i=vLength-1; i>=0; i--) + { + if (vRules[i].selectorText == vSelector) { + vSheet.removeRule(i); + } + } + }; +} +else if (qx.core.Client.getInstance().isSafari2()) // removeRule in Safari 2 doesn't work +{ + qx.html.StyleSheet.removeRule = function(vSheet, vSelector) + { + var warn = function() { + qx.log.Logger.ROOT_LOGGER.warn("In Safari/Webkit you can only remove rules that are created using qx.html.StyleSheet.addRule"); + } + if (!vSheet._qxRules) { + warn(); + } + var ruleNode = vSheet._qxRules[vSelector]; + if (ruleNode) { + vSheet.ownerNode.removeChild(ruleNode); + vSheet._qxRules[vSelector] = null; + } else { + warn(); + } + }; +} +else +{ + qx.html.StyleSheet.removeRule = function(vSheet, vSelector) + { + var vRules = vSheet.cssRules; + var vLength = vRules.length; + + for (var i=vLength-1; i>=0; i--) + { + if (vRules[i].selectorText == vSelector) { + vSheet.deleteRule(i); + } + } + }; +} + + +/** + * remove all CSS rules from a stylesheet + * + * @param vSheet {Object} the stylesheet object + */ +qx.html.StyleSheet.removeAllRules = function(vSheet) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.removeAllRules = function(vSheet) + { + var vRules = vSheet.rules; + var vLength = vRules.length; + + for (var i=vLength-1; i>=0; i--) { + vSheet.removeRule(i); + } + }; +} +else if (qx.core.Client.getInstance().isSafari2()) // removeRule in Safari 2 doesn't work +{ + qx.html.StyleSheet.removeAllRules = function(vSheet) + { + var node = vSheet.ownerNode; + var rules = node.childNodes; + while (rules.length > 0) { + node.removeChild(rules[0]); + } + }; +} +else // FF, etc +{ + qx.html.StyleSheet.removeAllRules = function(vSheet) + { + var vRules = vSheet.cssRules; + var vLength = vRules.length; + + for (var i=vLength-1; i>=0; i--) { + vSheet.deleteRule(i); + } + }; +} + + + +// TODO import functions are not working crossbrowser (Safari) !! +// see CSS_1.html test + +/** + * add an import of an external CSS file to a stylesheet + * @param vSheet {Object} the stylesheet object + * @param vUrl {String} URL of the external stylesheet file + */ +qx.html.StyleSheet.addImport = function(vSheet, vUrl) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.addImport = function(vSheet, vUrl) { + vSheet.addImport(vUrl); + }; +} +else if (qx.core.Client.getInstance().isSafari2()) // insertRule in Safari 2 doesn't work +{ + qx.html.StyleSheet.addImport = function(vSheet, vUrl) { + vSheet.ownerNode.appendChild(document.createTextNode('@import "' + vUrl + '";')); + }; +} +else // FF, etc +{ + qx.html.StyleSheet.addImport = function(vSheet, vUrl) { + vSheet.insertRule('@import "' + vUrl + '";', vSheet.cssRules.length); + }; +} + + +/** + * removes an import from a stylesheet + * + * @param vSheet {Object} the stylesheet object + * @param vUrl {String} URL of the importet CSS file + */ +qx.html.StyleSheet.removeImport = function(vSheet, vUrl) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.removeImport = function(vSheet, vUrl) { + var vImports = vSheet.imports; + var vLength = vImports.length; + + for (var i=vLength-1; i>=0; i--) { + if (vImports[i].href == vUrl) { + vSheet.removeImport(i); + } + } + }; +} +else // FF, etc +{ + qx.html.StyleSheet.removeImport = function(vSheet, vUrl) { + var vRules = vSheet.cssRules; + var vLength = vRules.length; + + for (var i=vLength-1; i>=0; i--) { + if (vRules[i].href == vUrl) { + vSheet.deleteRule(i); + } + } + }; +} + + +/** + * remove all imports from a stylesheet + * + * @param vSheet {Object} the stylesheet object + */ +qx.html.StyleSheet.removeAllImports = function(vSheet) {}; +if (document.createStyleSheet) // IE 4+ +{ + qx.html.StyleSheet.removeAllImports = function(vSheet) { + var vImports = vSheet.imports; + var vLength = vImports.length; + + for (var i=vLength-1; i>=0; i--) { + vSheet.removeImport(i); + } + }; +} +else // FF, etc +{ + qx.html.StyleSheet.removeAllImports = function(vSheet) { + var vRules = vSheet.cssRules; + var vLength = vRules.length; + + for (var i=vLength-1; i>=0; i--) { + if (vRules[i].type == vRules[i].IMPORT_RULE) { + vSheet.deleteRule(i); + } + } + }; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Textile.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Textile.js new file mode 100644 index 0000000000..ceaccd3ed0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Textile.js @@ -0,0 +1,178 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Optimized version of SuperTextile + */ +qx.OO.defineClass("qx.html.Textile"); + +/** + * Textilizes a string + * http://www.creatimation.net/journal/textile-live-preview (offline) + * + * @param s {String} Text to be textilized. + * @return {String} The textilized text. + */ +qx.html.Textile.textilize = function(s) +{ + var r = s; + + // quick tags first + var qtags = [ + ["\\*", "strong"], + ["\\?\\?", "cite"], + ["\\+", "ins"], + ["~", "sub"], + ["\\^", "sup"], + ["@", "code"] + ]; + + var ttag, htag, re, line, lines, nr, changed, inlist, listtype; + + for (var i=0;i<qtags.length;i++) { + ttag = qtags[i][0]; htag = qtags[i][1]; + re = new RegExp(ttag+"\\b(.+?)\\b"+ttag,"g"); + r = r.replace(re,"<"+htag+">"+"$1"+"</"+htag+">"); + } + + // underscores count as part of a word, so do them separately + re = new RegExp("\\b_(.+?)_\\b","g"); + r = r.replace(re,"<em>$1</em>"); + + // jeff: so do dashes + re = new RegExp("[\s\n]-(.+?)-[\s\n]","g"); + r = r.replace(re,"<del>$1</del>"); + + // links + re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g'); + r = r.replace(re,'<a href="$3" title="$2">$1</a>'); + re = new RegExp('"\\b(.+?)\\b":([^\\s]+)','g'); + r = r.replace(re,'<a href="$2">$1</a>'); + + // images + re = new RegExp("!\\b(.+?)\\(\\b(.+?)\\b\\)!","g"); + r = r.replace(re,'<img src="$1" alt="$2">'); + re = new RegExp("!\\b(.+?)\\b!","g"); + r = r.replace(re,'<img src="$1">'); + + // block level formatting + + // Jeff's hack to show single line breaks as they should. + // insert breaks - but you get some....stupid ones + re = new RegExp("(.*)\n([^#\*\n].*)","g"); + r = r.replace(re,"$1<br />$2"); + + // remove the stupid breaks. + re = new RegExp("\n<br />","g"); + r = r.replace(re,"\n"); + + lines = r.split("\n"); + nr = ""; + + for (var i=0;i<lines.length;i++) + { + line = lines[i].replace(/\s*$/,""); + changed = 0; + + if (line.search(/^\s*bq\.\s+/) != -1) + { + line = line.replace(/^\s*bq\.\s+/,"\t<blockquote>")+"</blockquote>"; + changed = 1; + } + + // jeff adds h#. + if (line.search(/^\s*h[1-6]\.\s+/) != -1) + { + re = new RegExp("h([1-6])\.(.+)","g"); + line = line.replace(re,"<h$1>$2</h$1>"); + changed = 1; + } + + if (line.search(/^\s*\*\s+/) != -1) + { + // for bullet list; make up an liu tag to be fixed later + line = line.replace(/^\s*\*\s+/,"\t<liu>") + "</liu>"; + changed = 1; + } + + if (line.search(/^\s*#\s+/) != -1) + { + // # for numeric list; make up an lio tag to be fixed later + line = line.replace(/^\s*#\s+/,"\t<lio>") + "</lio>"; + changed = 1; + } + + if (!changed && (line.replace(/\s/g,"").length > 0)) + { + line = "<p>"+line+"</p>"; + } + + lines[i] = line + "\n"; + } + + // Second pass to do lists + inlist = 0; + listtype = ""; + + for (var i=0;i<lines.length;i++) + { + line = lines[i]; + + if (inlist && listtype == "ul" && !line.match(/^\t<liu/)) + { + line = "</ul>\n" + line; + inlist = 0; + } + + if (inlist && listtype == "ol" && !line.match(/^\t<lio/)) + { + line = "</ol>\n" + line; + inlist = 0; + } + + if (!inlist && line.match(/^\t<liu/)) + { + line = "<ul>" + line; + inlist = 1; + listtype = "ul"; + } + + if (!inlist && line.match(/^\t<lio/)) + { + line = "<ol>" + line; + inlist = 1; + listtype = "ol"; + } + + lines[i] = line; + } + + r = lines.join("\n"); + + // jeff added : will correctly replace <li(o|u)> AND </li(o|u)> + r = r.replace(/li[o|u]>/g, "li>"); + + return r; +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Window.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Window.js new file mode 100644 index 0000000000..71f6520da9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/html/Window.js @@ -0,0 +1,138 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.core.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.html.Window"); + + +/** + * Get the inner width of the given browser window + * + * @param window {window} browser window + * @return {Integer} the window's inner width + */ +qx.html.Window.getInnerWidth = function(window) {}; + +/** + * Get the inner height of the given browser window + * + * @param window {window} browser window + * @return {Integer} the window's inner height + */ +qx.html.Window.getInnerHeight = function(window) {}; + +/** + * Get the left scroll position of the given browser window + * + * @param window {window} browser window + * @return {Integer} the window's left scroll position + */ +qx.html.Window.getScrollLeft = function(window) {}; + +/** + * Get the top scroll position of the given browser window + * + * @param window {window} browser window + * @return {Integer} the window's top scroll position + */ +qx.html.Window.getScrollTop = function(window) {}; + + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.html.Window.getInnerWidth = function(w) + { + if (w.document.documentElement && w.document.documentElement.clientWidth) + { + return w.document.documentElement.clientWidth; + } + else if (w.document.body) + { + return w.document.body.clientWidth; + } + + return 0; + } + + qx.html.Window.getInnerHeight = function(w) + { + if (w.document.documentElement && w.document.documentElement.clientHeight) + { + return w.document.documentElement.clientHeight; + } + else if (w.document.body) + { + return w.document.body.clientHeight; + } + + return 0; + } + + qx.html.Window.getScrollLeft = function(w) + { + if (w.document.documentElement && w.document.documentElement.scrollLeft) + { + return w.document.documentElement.scrollLeft; + } + else if (w.document.body) + { + return w.document.body.scrollTop; + } + + return 0; + } + + qx.html.Window.getScrollTop = function(w) + { + if (w.document.documentElement && w.document.documentElement.scrollTop) + { + return w.document.documentElement.scrollTop; + } + else if (w.document.body) + { + return w.document.body.scrollTop; + } + + return 0; + } +} +else +{ + qx.html.Window.getInnerWidth = function(w) { + return w.innerWidth; + } + + qx.html.Window.getInnerHeight = function(w) { + return w.innerHeight; + } + + qx.html.Window.getScrollLeft = function(w) { + return w.document.body.scrollLeft; + } + + qx.html.Window.getScrollTop = function(w) { + return w.document.body.scrollTop; + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/Json.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/Json.js new file mode 100644 index 0000000000..1a966defe5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/Json.js @@ -0,0 +1,404 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 STZ-IDA, Germany, http://www.stz-ida.de + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Andreas Junghans (lucidcake) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + + +/* +Copyright (c) 2005 JSON.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + + +/** + * This is a slightly modified JSON implementation that supports Dates and + * treats undefined like null. + */ + +qx.OO.defineClass("qx.io.Json"); + +/** + * Stringify a JavaScript value, producing a JSON text. + * + * @param v {var} the object to serialize. + * @param beautify {Boolean ? false} whether to beautify the serialized string + * by adding some white space that indents objects and arrays. + * @return {String} the serialized object. + */ +qx.Class.stringify = function (v, beautify) {}; + +/** + * Parse a JSON text, producing a JavaScript value. + * It returns false if there is a syntax error. + * + * @param text {String} JSON string + * @return {var} evaluated JSON string. + */ +qx.Class.parse = function (text) {}; + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("encodeUndefined", true); +qx.Settings.setDefault("enableDebug", false); + + + + + +/* +--------------------------------------------------------------------------- + IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +qx.io.Json = function () +{ + var m = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + s = { + 'boolean': function (x) { + return String(x); + }, + + number: function (x) { + return isFinite(x) ? String(x) : 'null'; + }, + + string: function (x) { + if (/["\\\x00-\x1f]/.test(x)) { + x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) { + var c = m[b]; + if (c) { + return c; + } + c = b.charCodeAt(); + return '\\u00' + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }); + } + return '"' + x + '"'; + }, + + object: function (x) { + if (x) { + var a = [], b, f, i, l, v; + if (x instanceof Array) { + var beautify = qx.io.Json._beautify; + a[0] = '['; + if (beautify) { + qx.io.Json._indent += qx.io.Json.BEAUTIFYING_INDENT; + a.push(qx.io.Json._indent); + } + l = x.length; + for (i = 0; i < l; i += 1) { + v = x[i]; + f = s[typeof v]; + if (f) { + v = f(v); + if (typeof v == 'string') { + if (b) { + a[a.length] = ','; + if (beautify) { + a.push(qx.io.Json._indent); + } + } + a[a.length] = v; + b = true; + } + } + } + if (beautify) { + qx.io.Json._indent = qx.io.Json._indent.substring(0, qx.io.Json._indent.length - qx.io.Json.BEAUTIFYING_INDENT.length); + a.push(qx.io.Json._indent); + } + a[a.length] = ']'; + // AJ, DJL -- + } else if (x instanceof Date) { + /* + * The Date object is a primitive type in Javascript, + * but the Javascript specification neglects to provide + * a literal form for it. The only way to generate a + * Date object is with "new Date()". For fast + * processing by Javascript, we want to be able to + * eval() a JSON response. If Date objects are to be + * passed to the client using JSON, about the only + * reasonable way to do it is to have "new Date()" + * in the JSON message. See this page for a proposal to + * add a Date literal syntax to Javascript which, + * if/when implemented in Javascript, would eliminate + * the need to pass "new Date() in JSON": + * + * http://www.hikhilk.net/DateSyntaxForJSON.aspx + * + * Sending a JSON message from client to server, we have + * no idea what language the server will be written in, + * what size integers it supports, etc. We do want to + * be able to represent as large a range of dates as + * possible, though. If we were to send the number of + * milliseconds since the beginning of the epoch, the + * value would exceed, in many cases, what can fit in a + * 32-bit integer. Even if one were to simply strip off + * the last three digits (milliseconds), the number of + * seconds could exceed a 32-bit signed integer's range + * with very distant past or distant future dates. To + * make it easier for any generic server to handle a + * date without risk of loss of precision due to + * automatic type casting, we'll send a UTC date with + * separated fields, in the form: + * + * new Date(Date.UTC(year,month,day,hour,min,sec,ms)) + * + * The server can fairly easily parse this in its JSON + * implementation by stripping off "new Date(Date.UTC(" + * from the beginning of the string, and "))" from the + * end of the string. What remains is the set of + * comma-separated date components, which are also very + * easy to parse. + * + * The server should send this same format to the + * client, which can simply eval() it just as with the + * remainder of JSON. + * + * A requirement of the implementation of the server is + * that after a date has been sent from the client to + * the server, converted by the server into whatever + * native type the date will be stored or manipulated + * in, convered back to JSON, and received back at the + * client, a comparison of the sent and received Date + * object should yield identity. This means that even + * if the server does not natively operate on + * milliseconds, it must maintain milliseconds in dates + * sent to it by the client. + */ + var dateParams = + x.getUTCFullYear() + "," + + x.getUTCMonth() + "," + + x.getUTCDate() + "," + + x.getUTCHours() + "," + + x.getUTCMinutes() + "," + + x.getUTCSeconds() + "," + + x.getUTCMilliseconds(); + return "new Date(Date.UTC(" + dateParams + "))"; + // -- AJ, DJL + } else if (x instanceof Object) { + var beautify = qx.io.Json._beautify; + a[0] = '{'; + if (beautify) { + qx.io.Json._indent += qx.io.Json.BEAUTIFYING_INDENT; + a.push(qx.io.Json._indent); + } + for (i in x) { + v = x[i]; + f = s[typeof v]; + if (f) { + v = f(v); + if (typeof v == 'string') { + if (b) { + a[a.length] = ','; + if (beautify) { + a.push(qx.io.Json._indent); + } + } + a.push(s.string(i), ':', v); + b = true; + } + } + } + if (beautify) { + qx.io.Json._indent = qx.io.Json._indent.substring(0, qx.io.Json._indent.length - qx.io.Json.BEAUTIFYING_INDENT.length); + a.push(qx.io.Json._indent); + } + a[a.length] = '}'; + } else { + return; + } + return a.join(''); + } + return 'null'; + }, + + // AJ, DJL -- + undefined: function(x) { + if (qx.Settings.getValueOfClass("qx.io.Json", "encodeUndefined")) + return 'null'; + } + // -- AJ, DJL + } + + return { + copyright: '(c)2005 JSON.org', + license: 'http://www.JSON.org/license.html', + + /** + * Stringify a JavaScript value, producing a JSON text. + * + * @param v {var} the object to serialize. + * @param beautify {Boolean ? false} whether to beautify the serialized string + * by adding some white space that indents objects and arrays. + * @return {String} the serialized object. + */ + stringify: function (v, beautify) { + this._beautify = beautify; + this._indent = this.BEAUTIFYING_LINE_END; + + var f = s[typeof v]; + // AJ, DJL -- + var ret = null; + // -- AJ, DJL + if (f) { + v = f(v); + if (typeof v == 'string') { + // DJL -- + ret = v; + // -- DJL + } + } + + // DJL -- + if (qx.Settings.getValueOfClass("qx.io.Json", "enableDebug")) { + var logger = qx.log.Logger.getClassLogger(qx.core.Object); + logger.debug("JSON request: " + ret); + } + + return ret; + // -- DJL + }, +/* + Parse a JSON text, producing a JavaScript value. + It returns false if there is a syntax error. +*/ + parse: function (text) { + try { + return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( + text.replace(/"(\\.|[^"\\])*"/g, ''))) && + eval('(' + text + ')'); + } catch (e) { + return false; + } + } + } +}(); + + +///* +// * Recursively descend through an object looking for any class hints. Right +// * now, the only class hint we support is 'Date' which can not be easily sent +// * from javascript to an arbitrary (e.g. PHP) JSON-RPC server and back again +// * without truncation or modification. +// */ +//qx.io.Json._fixObj = function(obj) { +// /* If there's a class hint... */ +// if (obj.__jsonclass__) +// { +// /* ... then check for supported classes. We support only Date. */ +// if (obj.__jsonclass__ == "Date" && obj.secSinceEpoch && obj.msAdditional) +// { +// /* Found a Date. Replace class hint object with a Date object. */ +// obj = new Date((obj.secSinceEpoch * 1000) + obj.msAdditional); +// return obj; +// } +// } +// +// /* +// * It wasn't something with a supported class hint, so recursively descend +// */ +// for (var member in obj) { +// thisObj = obj[member]; +// if (typeof thisObj == 'object' && thisObj !== null) { +// obj[member] = qx.io.Json._fixObj(thisObj); +// } +// } +// +// return obj; +//} + + +/** + * Parse a JSON text, producing a JavaScript value. + * It triggers an exception if there is a syntax error. + * + * @param text {String} JSON string + * @return {var} evaluated JSON string. + */ +qx.io.Json.parseQx = function(text) { + /* Convert the result text into a result primitive or object */ + + if (qx.Settings.getValueOfClass("qx.io.Json", "enableDebug")) { + var logger = qx.log.Logger.getClassLogger(qx.core.Object); + logger.debug("JSON response: " + text); + } + + var obj = (text && text.length > 0) ? eval('(' + text + ')') : null; + +// /* +// * Something like this fixObj() call may be used later when we want to +// * support class hints. For now, ignore that code +// */ +// +// /* If it's an object, not null, and contains a "result" field.. */ +// if (typeof obj == 'object' && obj !== null && obj.result) { +// /* ... then 'fix' the result by handling any supported class hints */ +// obj.result = qx.io.Json._fixObj(obj.result); +// } + + return obj; +} + +/** indent string for JSON pretty printing */ +qx.io.Json.BEAUTIFYING_INDENT = " "; + +/** new line string for JSON pretty printing */ +qx.io.Json.BEAUTIFYING_LINE_END = "\n"; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/image/Preloader.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/image/Preloader.js new file mode 100644 index 0000000000..1a3a450fca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/image/Preloader.js @@ -0,0 +1,199 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/** + * This is the preloader used from qx.ui.basic.Image instances. + * + * @event load {qx.event.type.Event} + * @event error {qx.event.type.Event} + */ +qx.OO.defineClass("qx.io.image.Preloader", qx.core.Target, +function(vSource) +{ + if(qx.manager.object.ImagePreloaderManager.getInstance().has(vSource)) + { + this.debug("Reuse qx.io.image.Preloader in old-style!"); + this.debug("Please use qx.manager.object.ImagePreloaderManager.getInstance().create(source) instead!"); + + return qx.manager.object.ImagePreloaderManager.getInstance().get(vSource); + } + + qx.core.Target.call(this); + + // Create Image-Node + // Does not work with document.createElement("img") in Webkit. Interesting. + // Compare this to the bug in qx.ui.basic.Image. + this._element = new Image; + + // This is needed for wrapping event to the object + this._element.qx_ImagePreloader = this; + + // Define handler if image events occurs + if (qx.core.Client.getInstance().isWebkit()) + { + // Webkit as of version 41xxx + // does not get the target right. We need to help out a bit + // ugly closure! + var self = this; + this._element.onload = function(e) { + return self._onload(e); + }; + this._element.onerror = function(e) { + return self._onerror(e); + }; + } + else + { + this._element.onload = qx.io.image.Preloader.__onload; + this._element.onerror = qx.io.image.Preloader.__onerror; + } + + // Set Source + this._source = vSource; + this._element.src = vSource; + + // Set PNG State + if (qx.core.Client.getInstance().isMshtml()) { + this._isPng = /\.png$/i.test(this._element.nameProp); + } + + qx.manager.object.ImagePreloaderManager.getInstance().add(this); +}); + + + + +/* +--------------------------------------------------------------------------- + STATE MANAGERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._source = null; +qx.Proto._isLoaded = false; +qx.Proto._isErroneous = false; + + + + + +/* +--------------------------------------------------------------------------- + CROSSBROWSER GETTERS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getUri = function() { return this._source; }; +qx.Proto.getSource = function() { return this._source; }; +qx.Proto.isLoaded = function() { return this._isLoaded; }; +qx.Proto.isErroneous = function() { return this._isErroneous; }; + +// only used in mshtml: true when the image format is in png +qx.Proto._isPng = false; +qx.Proto.getIsPng = function() { return this._isPng; }; + +if(qx.core.Client.getInstance().isGecko()) +{ + qx.Proto.getWidth = function() { return this._element.naturalWidth; }; + qx.Proto.getHeight = function() { return this._element.naturalHeight; }; +} +else +{ + qx.Proto.getWidth = function() { return this._element.width; }; + qx.Proto.getHeight = function() { return this._element.height; }; +} + + + + + +/* +--------------------------------------------------------------------------- + EVENT MAPPING +--------------------------------------------------------------------------- +*/ + +qx.io.image.Preloader.__onload = function(e) { this.qx_ImagePreloader._onload(); }; +qx.io.image.Preloader.__onerror = function(e) { this.qx_ImagePreloader._onerror(); }; + +qx.Proto._onload = function() +{ + if (this._isLoaded || this._isErroneous) { + return; + } + + this._isLoaded = true; + this._isErroneous = false; + + if (this.hasEventListeners("load")) { + this.dispatchEvent(new qx.event.type.Event("load"), true); + } +} + +qx.Proto._onerror = function() +{ + if (this._isLoaded || this._isErroneous) { + return; + } + + this.debug("Could not load: " + this._source); + + this._isLoaded = false; + this._isErroneous = true; + + if (this.hasEventListeners("error")) { + this.dispatchEvent(new qx.event.type.Event("error"), true); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + if (this._element) + { + this._element.onload = this._element.onerror = null; + this._element.qx_ImagePreloader = null; + this._element = null; + } + + this._isLoaded = this._isErroneous = this._isPng = false; + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/image/PreloaderSystem.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/image/PreloaderSystem.js new file mode 100755 index 0000000000..bf18ceb259 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/image/PreloaderSystem.js @@ -0,0 +1,189 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/** + * @event completed {qx.event.type.Event} + */ +qx.OO.defineClass("qx.io.image.PreloaderSystem", qx.core.Target, +function(vPreloadList, vCallBack, vCallBackScope) +{ + qx.core.Target.call(this); + + this._list = vPreloadList; + + // Create timer + this._timer = new qx.client.Timer(this.getSetting("timeout")); + this._timer.addEventListener("interval", this._oninterval, this); + + // If we use the compact syntax, automatically add an event listeners and start the loading process + if (vCallBack) + { + this.addEventListener("completed", vCallBack, vCallBackScope || null); + this.start(); + } +}); + +qx.Proto._stopped = false; + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("timeout", 3000); + + + + + +/* +--------------------------------------------------------------------------- + USER ACCESS +--------------------------------------------------------------------------- +*/ + +qx.Proto.start = function() +{ + if (qx.lang.Object.isEmpty(this._list)) + { + this.createDispatchEvent("completed"); + return; + } + + for (var vSource in this._list) + { + var vPreloader = qx.manager.object.ImagePreloaderManager.getInstance().create(qx.manager.object.AliasManager.getInstance().resolvePath(vSource)); + + if (vPreloader.isErroneous() || vPreloader.isLoaded()) + { + delete this._list[vSource]; + } + else + { + vPreloader._origSource = vSource; + + vPreloader.addEventListener("load", this._onload, this); + vPreloader.addEventListener("error", this._onerror, this); + } + } + + // Initial check + this._check(); +} + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onload = function(e) +{ + delete this._list[e.getTarget()._origSource]; + this._check(); +} + +qx.Proto._onerror = function(e) +{ + delete this._list[e.getTarget()._origSource]; + this._check(); +} + +qx.Proto._oninterval = function(e) +{ + this.error("Could not preload: " + qx.lang.Object.getKeysAsString(this._list)); + + this._stopped = true; + this._timer.stop(); + + this.createDispatchEvent("completed"); +} + + + + + + +/* +--------------------------------------------------------------------------- + CHECK +--------------------------------------------------------------------------- +*/ + +qx.Proto._check = function() +{ + if (this._stopped) { + return; + } + + // this.debug("Check: " + qx.lang.Object.getKeysAsString(this._list)); + + if (qx.lang.Object.isEmpty(this._list)) + { + this._timer.stop(); + this.createDispatchEvent("completed"); + } + else + { + // Restart timer for timeout + this._timer.restart(); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + this._list = null; + + if (this._timer) + { + this._timer.dispose(); + this._timer = null; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/local/CookieApi.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/local/CookieApi.js new file mode 100755 index 0000000000..c5ebad3f04 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/local/CookieApi.js @@ -0,0 +1,141 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.io.local.CookieApi", +{ + STR_EXPIRES : "expires", + STR_PATH : "path", + STR_DOMAIN : "domain", + STR_SECURE : "secure", + STR_DELDATA : "Thu, 01-Jan-1970 00:00:01 GMT" +}); + + + + + +/* +--------------------------------------------------------------------------- + USER APPLICATION METHODS +--------------------------------------------------------------------------- +*/ + +qx.Class.get = function(vName) +{ + var start = document.cookie.indexOf(vName + "="); + var len = start + vName.length + 1; + + if ((!start) && (vName != document.cookie.substring(0, vName.length))) { + return null; + } + + if (start == -1) { + return null; + } + + var end = document.cookie.indexOf(";", len); + + if (end == -1) { + end = document.cookie.length; + } + + return unescape(document.cookie.substring(len, end)); +} + +qx.Class.set = function(vName, vValue, vExpires, vPath, vDomain, vSecure) +{ + var today = new Date(); + today.setTime(today.getTime()); + + // Generate cookie + var vCookie = [ vName, "=", escape(vValue) ]; + + if (vExpires) + { + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_EXPIRES); + vCookie.push("="); + vCookie.push(new Date(today.getTime() + (vExpires * 1000 * 60 * 60 * 24)).toGMTString()); + } + + if (vPath) + { + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_PATH); + vCookie.push("="); + vCookie.push(vPath); + } + + if (vDomain) + { + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_DOMAIN); + vCookie.push("="); + vCookie.push(vDomain); + } + + if (vSecure) + { + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_SECURE); + } + + // Store cookie + document.cookie = vCookie.join(""); +} + +qx.Class.del = function(vName, vPath, vDomain) +{ + if (!qx.io.local.CookieApi.get(vName)) { + return; + } + + // Generate cookie + var vCookie = [ vName, "=" ]; + + if (vPath) + { + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_PATH); + vCookie.push("="); + vCookie.push(vPath); + } + + if (vDomain) + { + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_DOMAIN); + vCookie.push("="); + vCookie.push(vDomain); + } + + vCookie.push(";"); + vCookie.push(qx.io.local.CookieApi.STR_EXPIRES); + vCookie.push("="); + vCookie.push(qx.io.local.CookieApi.STR_DELDATA); + + // Store cookie + document.cookie = vCookie.join(""); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/local/CookieTransport.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/local/CookieTransport.js new file mode 100755 index 0000000000..46a07cfa02 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/local/CookieTransport.js @@ -0,0 +1,178 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.io.local.CookieTransport", +{ + BASENAME : "qx", + ITEMSEPARATOR : "&", + KEYVALUESEPARATOR : "=", + MAXCOOKIES : 20, + MAXSIZE : 4096 +}); + + + + + +/* +--------------------------------------------------------------------------- + USER APPLICATION METHODS +--------------------------------------------------------------------------- +*/ + +qx.Class.set = function(vName, vValue) +{ + if (vValue === undefined) { + return qx.io.local.CookieTransport.del(vName); + } + + var vAll = qx.io.local.CookieTransport._getAll(); + vAll[vName] = vValue; + this._setAll(vAll); +} + +qx.Class.get = function(vName) +{ + var vAll = qx.io.local.CookieTransport._getAll(); + + return vAll[vName] || ""; +} + +qx.Class.del = function(vName) +{ + var vAll = qx.io.local.CookieTransport._getAll(); + delete vAll[vName]; + this._setAll(vAll); +} + +qx.Class.setAll = function(vHash) +{ + var vAll = qx.io.local.CookieTransport._getAll(); + vAll = qx.lang.Object.mergeWith(vAll, vHash); + qx.io.local.CookieTransport._setAll(vAll); +} + +qx.Class.getAll = function() { + return qx.io.local.CookieTransport._getAll(); +} + +qx.Class.replaceAll = function(vHash) { + qx.io.local.CookieTransport._setAll(vHash); +} + +qx.Class.delAll = function() { + qx.io.local.CookieTransport.replaceAll({}); +} + + + + + +/* +--------------------------------------------------------------------------- + LOW LEVEL INTERNAL METHODS +--------------------------------------------------------------------------- +*/ + +qx.Class._getAll = function() +{ + var vHash = {}; + var vCookie, vItems, vItem; + + for (var i=0; i<qx.io.local.CookieTransport.MAXCOOKIES; i++) + { + vCookie = qx.io.local.CookieApi.get(qx.io.local.CookieTransport.BASENAME + i); + if (vCookie) + { + vItems = vCookie.split(qx.io.local.CookieTransport.ITEMSEPARATOR); + for (var j=0, l=vItems.length; j<l; j++) + { + vItem = vItems[j].split(qx.io.local.CookieTransport.KEYVALUESEPARATOR); + vHash[vItem[0]] = vItem[1]; + } + } + } + + return vHash; +} + +qx.Class._setAll = function(vHash) +{ + var vString = ""; + var vTemp; + var vIndex = 0; + + for (var vName in vHash) + { + vTemp = vName + qx.io.local.CookieTransport.KEYVALUESEPARATOR + vHash[vName]; + + if (vTemp.length > qx.io.local.CookieTransport.MAXSIZE) + { + qx.log.Logger.getClassLogger(qx.io.local.CookieTransport).debug("Could not store value of name '" + vName + "': Maximum size of " + qx.io.local.CookieTransport.MAXSIZE + "reached!"); + continue; + } + + if ((qx.io.local.CookieTransport.ITEMSEPARATOR.length + vString.length + vTemp.length) > qx.io.local.CookieTransport.MAXSIZE) + { + qx.io.local.CookieTransport._setCookie(vIndex++, vString); + + if (vIndex == qx.io.local.CookieTransport.MAXCOOKIES) + { + qx.log.Logger.getClassLogger(qx.io.local.CookieTransport).debug("Failed to store cookie. Max cookie amount reached!", "error"); + return false; + } + + vString = vTemp; + } + else + { + if (vString != "") { + vString += qx.io.local.CookieTransport.ITEMSEPARATOR; + } + + vString += vTemp; + } + } + + if (vString != "") { + qx.io.local.CookieTransport._setCookie(vIndex++, vString); + } + + while (vIndex < qx.io.local.CookieTransport.MAXCOOKIES) { + qx.io.local.CookieTransport._delCookie(vIndex++); + } +} + +qx.Class._setCookie = function(vIndex, vString) +{ + // qx.log.Logger.getClassLogger(qx.io.local.CookieTransport).debug("Store: " + vIndex + " = " + vString); + qx.io.local.CookieApi.set(qx.io.local.CookieTransport.BASENAME + vIndex, vString); +} + +qx.Class._delCookie = function(vIndex) +{ + // qx.log.Logger.getClassLogger(qx.io.local.CookieTransport).debug("Delete: " + vIndex); + qx.io.local.CookieApi.del(qx.io.local.CookieTransport.BASENAME + vIndex); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/AbstractRemoteTransport.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/AbstractRemoteTransport.js new file mode 100644 index 0000000000..00be49a5dd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/AbstractRemoteTransport.js @@ -0,0 +1,330 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + +/** + * @event created {qx.event.type.Event} + * @event configured {qx.event.type.Event} + * @event sending {qx.event.type.Event} + * @event receiving {qx.event.type.Event} + * @event completed {qx.event.type.Event} + * @event aborted {qx.event.type.Event} + * @event failed {qx.event.type.Event} + * @event timeout {qx.event.type.Event} + */ +qx.OO.defineClass("qx.io.remote.AbstractRemoteTransport", qx.core.Target, +function() { + qx.core.Target.call(this); +}); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Target url to issue the request to +*/ +qx.OO.addProperty({ name : "url", type : "string" }); + +/*! + Determines what type of request to issue +*/ +qx.OO.addProperty({ name : "method", type : "string" }); + +/*! + Set the request to asynchronous +*/ +qx.OO.addProperty({ name : "asynchronous", type : "boolean" }); + +/*! + Set the data to be sent via this request +*/ +qx.OO.addProperty({ name : "data", type : "string" }); + +/*! + Username to use for HTTP authentication +*/ +qx.OO.addProperty({ name : "username", type : "string" }); + +/*! + Password to use for HTTP authentication +*/ +qx.OO.addProperty({ name : "password", type : "string" }); + +/*! + The state of the current request +*/ +qx.OO.addProperty( +{ + name : "state", + type : "string", + possibleValues : [ + "created", "configured", + "sending", "receiving", + "completed", "aborted", + "timeout", "failed" + ], + defaultValue : "created" +}); + +/*! + Request headers +*/ +qx.OO.addProperty({ name : "requestHeaders", type: "object" }); + +/*! + Request parameters to send. +*/ +qx.OO.addProperty({ name : "parameters", type: "object" }); + +/*! + Response Type +*/ +qx.OO.addProperty({ name : "responseType", type: "string" }); + +/*! + Use Basic HTTP Authentication +*/ +qx.OO.addProperty({ name : "useBasicHttpAuth", type : "boolean" }); + + + + + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.send = function() { + throw new Error("send is abstract"); +} + +qx.Proto.abort = function() +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Aborting..."); + } + + this.setState("aborted"); +} + +/*! + +*/ +qx.Proto.timeout = function() +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Timeout..."); + } + + this.setState("timeout"); +} + +/*! + + Force the transport into the failed state ("failed"). + + Listeners of the "failed" signal are notified about the event. +*/ +qx.Proto.failed = function() +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Failed..."); + } + + this.setState("failed"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + REQUEST HEADER SUPPORT +--------------------------------------------------------------------------- +*/ +/*! + Add a request header to this transports qx.io.remote.Request. + + This method is virtual and concrete subclasses are supposed to + implement it. +*/ +qx.Proto.setRequestHeader = function(vLabel, vValue) { + throw new Error("setRequestHeader is abstract"); +} + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE HEADER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getResponseHeader = function(vLabel) { + throw new Error("getResponseHeader is abstract"); +} + +/*! + Provides an hash of all response headers. +*/ +qx.Proto.getResponseHeaders = function() { + throw new Error("getResponseHeaders is abstract"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + STATUS SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Returns the current status code of the request if available or -1 if not. +*/ +qx.Proto.getStatusCode = function() { + throw new Error("getStatusCode is abstract"); +} + +/*! + Provides the status text for the current request if available and null otherwise. +*/ +qx.Proto.getStatusText = function() { + throw new Error("getStatusText is abstract"); +} + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE DATA SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Provides the response text from the request when available and null otherwise. + By passing true as the "partial" parameter of this method, incomplete data will + be made available to the caller. +*/ +qx.Proto.getResponseText = function() { + throw new Error("getResponseText is abstract"); +} + +/*! + Provides the XML provided by the response if any and null otherwise. + By passing true as the "partial" parameter of this method, incomplete data will + be made available to the caller. +*/ +qx.Proto.getResponseXml = function() { + throw new Error("getResponseXml is abstract"); +} + +/*! + Returns the length of the content as fetched thus far +*/ +qx.Proto.getFetchedLength = function() { + throw new Error("getFetchedLength is abstract"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyState = function(propValue, propOldValue, propData) +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("State: " + propValue); + } + + switch(propValue) + { + case "created": + this.createDispatchEvent("created"); + break; + + case "configured": + this.createDispatchEvent("configured"); + break; + + case "sending": + this.createDispatchEvent("sending"); + break; + + case "receiving": + this.createDispatchEvent("receiving"); + break; + + case "completed": + this.createDispatchEvent("completed"); + break; + + case "aborted": + this.createDispatchEvent("aborted"); + break; + + case "failed": + this.createDispatchEvent("failed"); + break; + + case "timeout": + this.createDispatchEvent("timeout"); + break; + } + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Exchange.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Exchange.js new file mode 100644 index 0000000000..4487498b9d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Exchange.js @@ -0,0 +1,706 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + * Andreas Junghans (lucidcake) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + +/** + * @event sending {qx.event.type.Event} + * @event receiving {qx.event.type.Event} + * @event completed {qx.event.type.Event} + * @event aborted {qx.event.type.Event} + * @event timeout {qx.event.type.Event} + * @event failed {qx.event.type.Event} + */ +qx.OO.defineClass("qx.io.remote.Exchange", qx.core.Target, +function(vRequest) +{ + qx.core.Target.call(this); + + this.setRequest(vRequest); + vRequest.setTransport(this); +}); + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("enableDebug", false); + + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + TRANSPORT TYPE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.io.remote.Exchange.typesOrder = [ "qx.io.remote.XmlHttpTransport", "qx.io.remote.IframeTransport", "qx.io.remote.ScriptTransport" ]; + +qx.io.remote.Exchange.typesReady = false; + +qx.io.remote.Exchange.typesAvailable = {}; +qx.io.remote.Exchange.typesSupported = {}; + +qx.io.remote.Exchange.registerType = function(vClass, vId) { + qx.io.remote.Exchange.typesAvailable[vId] = vClass; +} + +qx.io.remote.Exchange.initTypes = function() +{ + if (qx.io.remote.Exchange.typesReady) { + return; + } + + for (var vId in qx.io.remote.Exchange.typesAvailable) + { + var vTransporterImpl = qx.io.remote.Exchange.typesAvailable[vId]; + + if (vTransporterImpl.isSupported()) { + qx.io.remote.Exchange.typesSupported[vId] = vTransporterImpl; + } + } + + qx.io.remote.Exchange.typesReady = true; + + if (qx.lang.Object.isEmpty(qx.io.remote.Exchange.typesSupported)) { + throw new Error("No supported transport types were found!"); + } +} + +qx.io.remote.Exchange.canHandle = function(vImpl, vNeeds, vResponseType) +{ + if (!qx.lang.Array.contains(vImpl.handles.responseTypes, vResponseType)) { + return false; + } + + for (var vKey in vNeeds) + { + if (!vImpl.handles[vKey]) { + return false; + } + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + MAPPING +--------------------------------------------------------------------------- +*/ + +/* +http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/0e6a34e4-f90c-489d-acff-cb44242fafc6.asp + +0: UNINITIALIZED +The object has been created, but not initialized (the open method has not been called). + +1: LOADING +The object has been created, but the send method has not been called. + +2: LOADED +The send method has been called, but the status and headers are not yet available. + +3: INTERACTIVE +Some data has been received. Calling the responseBody and responseText properties at this state to obtain partial results will return an error, because status and response headers are not fully available. + +4: COMPLETED +All the data has been received, and the complete data is available in the +*/ + +qx.io.remote.Exchange._nativeMap = +{ + 0 : "created", + 1 : "configured", + 2 : "sending", + 3 : "receiving", + 4 : "completed" +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILS +--------------------------------------------------------------------------- +*/ + +qx.io.remote.Exchange.wasSuccessful = function(vStatusCode, vReadyState, vIsLocal) +{ + if (vIsLocal) + { + switch(vStatusCode) + { + case null: + case 0: + return true; + + case -1: + // Not Available (OK for readystates: MSXML<4=1-3, MSXML>3=1-2, Gecko=1) + return vReadyState < 4; + + default: + // at least older versions of Safari don't set the status code for local file access + return typeof vStatusCode === "undefined"; + } + } + else + { + switch(vStatusCode) + { + case -1: // Not Available (OK for readystates: MSXML<4=1-3, MSXML>3=1-2, Gecko=1) + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug") && vReadyState > 3) { + qx.log.Logger.getClassLogger(qx.io.remote.Exchange).debug("Failed with statuscode: -1 at readyState " + vReadyState); + } + + return vReadyState < 4; + + + case 200: // OK + case 304: // Not Modified + return true; + + + case 201: // Created + case 202: // Accepted + case 203: // Non-Authoritative Information + case 204: // No Content + case 205: // Reset Content + return true; + + + case 206: // Partial Content + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug") && vReadyState === 4) { + qx.log.Logger.getClassLogger(qx.io.remote.Exchange).debug("Failed with statuscode: 206 (Partial content while being complete!)"); + } + + return vReadyState !== 4; + + + case 300: // Multiple Choices + case 301: // Moved Permanently + case 302: // Moved Temporarily + case 303: // See Other + case 305: // Use Proxy + case 400: // Bad Request + case 401: // Unauthorized + case 402: // Payment Required + case 403: // Forbidden + case 404: // Not Found + case 405: // Method Not Allowed + case 406: // Not Acceptable + case 407: // Proxy Authentication Required + case 408: // Request Time-Out + case 409: // Conflict + case 410: // Gone + case 411: // Length Required + case 412: // Precondition Failed + case 413: // Request Entity Too Large + case 414: // Request-URL Too Large + case 415: // Unsupported Media Type + case 500: // Server Error + case 501: // Not Implemented + case 502: // Bad Gateway + case 503: // Out of Resources + case 504: // Gateway Time-Out + case 505: // HTTP Version not supported + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + qx.log.Logger.getClassLogger(qx.io.remote.Exchange).debug("Failed with typical HTTP statuscode: " + vStatusCode); + } + + return false; + + + // The following case labels are wininet.dll error codes that may be encountered. + // Server timeout + case 12002: + // 12029 to 12031 correspond to dropped connections. + case 12029: + case 12030: + case 12031: + // Connection closed by server. + case 12152: + // See above comments for variable status. + case 13030: + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + qx.log.Logger.getClassLogger(qx.io.remote.Exchange).debug("Failed with MSHTML specific HTTP statuscode: " + vStatusCode); + } + + return false; + + + default: + // Handle all 20x status codes as OK as defined in the corresponding RFC + // http://www.w3.org/Protocols/rfc2616/rfc2616.html + if (vStatusCode > 206 && vStatusCode < 300) { + return true; + } + + qx.log.Logger.getClassLogger(qx.io.remote.Exchange).debug("Unknown status code: " + vStatusCode + " (" + vReadyState + ")"); + throw new Error("Unknown status code: " + vStatusCode); + } + } +} + + +qx.io.remote.Exchange.statusCodeToString = function(vStatusCode) +{ + switch(vStatusCode) + { + case -1: return "Not available"; + case 200: return "Ok"; + case 304: return "Not modified"; + case 206: return "Partial content"; + case 204: return "No content"; + case 300: return "Multiple choices"; + case 301: return "Moved permanently"; + case 302: return "Moved temporarily"; + case 303: return "See other"; + case 305: return "Use proxy"; + case 400: return "Bad request"; + case 401: return "Unauthorized"; + case 402: return "Payment required"; + case 403: return "Forbidden"; + case 404: return "Not found"; + case 405: return "Method not allowed"; + case 406: return "Not acceptable"; + case 407: return "Proxy authentication required"; + case 408: return "Request time-out"; + case 409: return "Conflict"; + case 410: return "Gone"; + case 411: return "Length required"; + case 412: return "Precondition failed"; + case 413: return "Request entity too large"; + case 414: return "Request-URL too large"; + case 415: return "Unsupported media type"; + case 500: return "Server error"; + case 501: return "Not implemented"; + case 502: return "Bad gateway"; + case 503: return "Out of resources"; + case 504: return "Gateway time-out"; + case 505: return "HTTP version not supported"; + case 12002: return "Server timeout"; + case 12029: return "Connection dropped"; + case 12030: return "Connection dropped"; + case 12031: return "Connection dropped"; + case 12152: return "Connection closed by server"; + case 13030: return "MSHTML-specific HTTP status code"; + default: return "Unknown status code"; + } +} + + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Set the request to send with this transport. +*/ +qx.OO.addProperty({ name : "request", type : "object", instance : "qx.io.remote.Request" }); +/*! + Set the implementation to use to send the request with. + + The implementation should be a subclass of qx.io.remote.AbstractRemoteTransport and + must implement all methods in the transport API. +*/ +qx.OO.addProperty({ name : "implementation", type : "object" }); +qx.OO.addProperty( +{ + name : "state", + type : "string", + possibleValues : [ + "configured", "sending", + "receiving", "completed", + "aborted", "timeout", + "failed" + ], + defaultValue : "configured" +}); + + + + + + + + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.send = function() +{ + var vRequest = this.getRequest(); + + if (!vRequest) { + return this.error("Please attach a request object first"); + } + + qx.io.remote.Exchange.initTypes(); + + var vUsage = qx.io.remote.Exchange.typesOrder; + var vSupported = qx.io.remote.Exchange.typesSupported; + + // Mapping settings to contenttype and needs to check later + // if the selected transport implementation can handle + // fulfill these requirements. + var vResponseType = vRequest.getResponseType(); + var vNeeds = {}; + + if (vRequest.getAsynchronous()) { + vNeeds.asynchronous = true; + } else { + vNeeds.synchronous = true; + } + + if (vRequest.getCrossDomain()) { + vNeeds.crossDomain = true; + } + + if (vRequest.getFileUpload()) { + vNeeds.fileUpload = true; + } + + var vTransportImpl, vTransport; + for (var i=0, l=vUsage.length; i<l; i++) + { + vTransportImpl = vSupported[vUsage[i]]; + + if (vTransportImpl) + { + if (!qx.io.remote.Exchange.canHandle(vTransportImpl, vNeeds, vResponseType)) { + continue; + } + + try + { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("Using implementation: " + vTransportImpl.classname); + } + + vTransport = new vTransportImpl; + this.setImplementation(vTransport); + + vTransport.setUseBasicHttpAuth(vRequest.getUseBasicHttpAuth()); + + vTransport.send(); + return true; + } + catch(ex) + { + return this.error("Request handler throws error", ex); + } + } + } + + this.error("There is no transport implementation available to handle this request: " + vRequest); +} +/*! + Force the transport into the aborted ("aborted") + state. +*/ +qx.Proto.abort = function() +{ + var vImplementation = this.getImplementation(); + + if (vImplementation) + { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("Abort: implementation " + vImplementation.toHashCode()); + } + vImplementation.abort(); + } + else + { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("Abort: forcing state to be aborted"); + } + this.setState("aborted"); + } +} +/*! + Force the transport into the timeout state. +*/ +qx.Proto.timeout = function() +{ + var vImplementation = this.getImplementation(); + + if (vImplementation) + { + this.warn("Timeout: implementation " + vImplementation.toHashCode()); + vImplementation.timeout(); + } + else + { + this.warn("Timeout: forcing state to timeout"); + this.setState("timeout"); + } + + // Disable future timeouts in case user handler blocks + if (this.getRequest()) { + this.getRequest().setTimeout(0); + } +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onsending = function(e) { + this.setState("sending"); +} + +qx.Proto._onreceiving = function(e) { + this.setState("receiving"); +} + +qx.Proto._oncompleted = function(e) { + this.setState("completed"); +} + +qx.Proto._onabort = function(e) { + this.setState("aborted"); +} + +qx.Proto._onfailed = function(e) { + this.setState("failed"); +} + +qx.Proto._ontimeout = function(e) { + this.setState("timeout"); +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyImplementation = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + propOldValue.removeEventListener("sending", this._onsending, this); + propOldValue.removeEventListener("receiving", this._onreceiving, this); + propOldValue.removeEventListener("completed", this._oncompleted, this); + propOldValue.removeEventListener("aborted", this._onabort, this); + propOldValue.removeEventListener("timeout", this._ontimeout, this); + propOldValue.removeEventListener("failed", this._onfailed, this); + } + + if (propValue) + { + var vRequest = this.getRequest(); + + propValue.setUrl(vRequest.getUrl()); + propValue.setMethod(vRequest.getMethod()); + propValue.setAsynchronous(vRequest.getAsynchronous()); + + propValue.setUsername(vRequest.getUsername()); + propValue.setPassword(vRequest.getPassword()); + + propValue.setParameters(vRequest.getParameters()); + propValue.setRequestHeaders(vRequest.getRequestHeaders()); + propValue.setData(vRequest.getData()); + + propValue.setResponseType(vRequest.getResponseType()); + + propValue.addEventListener("sending", this._onsending, this); + propValue.addEventListener("receiving", this._onreceiving, this); + propValue.addEventListener("completed", this._oncompleted, this); + propValue.addEventListener("aborted", this._onabort, this); + propValue.addEventListener("timeout", this._ontimeout, this); + propValue.addEventListener("failed", this._onfailed, this); + } + + return true; +} + +qx.Proto._modifyState = function(propValue, propOldValue, propData) +{ + var vRequest = this.getRequest(); + + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("State: " + propOldValue + " => " + propValue); + } + + switch(propValue) + { + case "sending": + this.createDispatchEvent("sending"); + break; + + case "receiving": + this.createDispatchEvent("receiving"); + break; + + case "completed": + case "aborted": + case "timeout": + case "failed": + var vImpl = this.getImplementation(); + + if (! vImpl) { + // implementation has already been disposed + break; + } + + var vResponse = new qx.io.remote.Response; + + if (propValue == "completed") { + var vContent = vImpl.getResponseContent(); + vResponse.setContent(vContent); + + /* + * Was there acceptable content? This might occur, for example, if + * the web server was shut down unexpectedly and thus the connection + * closed with no data having been sent. + */ + if (vContent === null) { + // Nope. Change COMPLETED to FAILED. + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("Altered State: " + propValue + " => failed"); + } + propValue = "failed"; + } + } + + vResponse.setStatusCode(vImpl.getStatusCode()); + vResponse.setResponseHeaders(vImpl.getResponseHeaders()); + + // this.debug("Result Text: " + vResponse.getTextContent()); + + var vEventType; + + switch(propValue) + { + case "completed": + vEventType = "completed"; + break; + + case "aborted": + vEventType = "aborted"; + break; + + case "timeout": + vEventType = "timeout"; + break; + + case "failed": + vEventType = "failed"; + break; + } + + // Disconnect and dispose implementation + this.setImplementation(null); + vImpl.dispose(); + + // Fire event to listeners + this.createDispatchDataEvent(vEventType, vResponse); + break; + } + + return true; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + var vImpl = this.getImplementation(); + if (vImpl) + { + this.setImplementation(null); + vImpl.dispose(); + } + + this.setRequest(null); + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js new file mode 100644 index 0000000000..9e9d50c588 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js @@ -0,0 +1,476 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + * Andreas Junghans (lucidcake) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) +#require(qx.io.remote.Exchange) +#require(qx.util.Mime) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/*! + Transports requests to a server using an IFRAME. + + This class should not be used directly by client programmers. + */ +qx.OO.defineClass("qx.io.remote.IframeTransport", qx.io.remote.AbstractRemoteTransport, +function() +{ + qx.io.remote.AbstractRemoteTransport.call(this); + + var vUniqueId = (new Date).valueOf(); + var vFrameName = "frame_" + vUniqueId; + var vFormName = "form_" + vUniqueId; + + // Mshtml allows us to define a full HTML as a parameter for createElement. + // Using this method is the only (known) working to register the frame + // to the known elements of the Internet Explorer. + if (qx.core.Client.getInstance().isMshtml()) { + this._frame = document.createElement('<iframe name="' + vFrameName + '"></iframe>'); + } else { + this._frame = document.createElement("iframe"); + } + + this._frame.src = "javascript:void(0)"; + this._frame.id = this._frame.name = vFrameName; + this._frame.onload = function(e) { return o._onload(e); } + + this._frame.style.display = "none"; + + document.body.appendChild(this._frame); + + this._form = document.createElement("form"); + this._form.target = vFrameName; + this._form.id = this._form.name = vFormName; + + this._form.style.display = "none"; + + document.body.appendChild(this._form); + + this._data = document.createElement("textarea"); + this._data.id = this._data.name = "_data_"; + this._form.appendChild(this._data); + + var o = this; + this._frame.onreadystatechange = function(e) { return o._onreadystatechange(e); } +}); + +qx.Proto._lastReadyState = 0; + + + + + +/* +--------------------------------------------------------------------------- + CLASS PROPERTIES AND METHODS +--------------------------------------------------------------------------- +*/ + +// basic registration to qx.io.remote.Exchange +// the real availability check (activeX stuff and so on) follows at the first real request +qx.io.remote.Exchange.registerType(qx.io.remote.IframeTransport, "qx.io.remote.IframeTransport"); + +qx.io.remote.IframeTransport.handles = +{ + synchronous : false, + asynchronous : true, + crossDomain : false, + fileUpload: true, + responseTypes : [ qx.util.Mime.TEXT, qx.util.Mime.JAVASCRIPT, qx.util.Mime.JSON, qx.util.Mime.XML, qx.util.Mime.HTML ] +} + +qx.io.remote.IframeTransport.isSupported = function() { + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.send = function() +{ + var vMethod = this.getMethod(); + var vUrl = this.getUrl(); + + + + // -------------------------------------- + // Adding parameters + // -------------------------------------- + + var vParameters = this.getParameters(); + var vParametersList = []; + for (var vId in vParameters) { + var value = vParameters[vId]; + if (value instanceof Array) { + for (var i = 0; i < value.length; i++) { + vParametersList.push(encodeURIComponent(vId) + "=" + + encodeURIComponent(value[i])); + } + } else { + vParametersList.push(encodeURIComponent(vId) + "=" + + encodeURIComponent(value)); + } + } + + if (vParametersList.length > 0) { + vUrl += (vUrl.indexOf("?") >= 0 ? + "&" : "?") + vParametersList.join("&"); + } + + + + // -------------------------------------- + // Preparing form + // -------------------------------------- + + this._form.action = vUrl; + this._form.method = vMethod; + + + + // -------------------------------------- + // Sending data + // -------------------------------------- + + this._data.appendChild(document.createTextNode(this.getData())); + this._form.submit(); +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENER +--------------------------------------------------------------------------- +*/ + +// For reference: +// http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readyState_1.asp +qx.io.remote.IframeTransport._numericMap = +{ + "uninitialized" : 1, + "loading" : 2, + "loaded" : 2, + "interactive" : 3, + "complete" : 4 +} + +/*! + Converting complete state to numeric value and update state property +*/ +qx.Proto._onload = function(e) +{ + if (this._form.src) { + return; + } + + this._switchReadyState(qx.io.remote.IframeTransport._numericMap.complete); +} + +/*! + Converting named readyState to numeric value and update state property +*/ +qx.Proto._onreadystatechange = function(e) { + this._switchReadyState(qx.io.remote.IframeTransport._numericMap[this._frame.readyState]); +} + +qx.Proto._switchReadyState = function(vReadyState) +{ + // Ignoring already stopped requests + switch(this.getState()) + { + case "completed": + case "aborted": + case "failed": + case "timeout": + this.warn("Ignore Ready State Change"); + return; + } + + // Updating internal state + while (this._lastReadyState < vReadyState) { + this.setState(qx.io.remote.Exchange._nativeMap[++this._lastReadyState]); + } +} + + + + + +/* +--------------------------------------------------------------------------- + REQUEST HEADER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.setRequestHeader = function(vLabel, vValue) +{ + // TODO + // throw new Error("setRequestHeader is abstract"); +} + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE HEADER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getResponseHeader = function(vLabel) +{ + return null; + + // TODO + // this.error("Need implementation", "getResponseHeader"); +} + +/*! + Provides an hash of all response headers. +*/ +qx.Proto.getResponseHeaders = function() +{ + return {} + + // TODO + // throw new Error("getResponseHeaders is abstract"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + STATUS SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Returns the current status code of the request if available or -1 if not. +*/ +qx.Proto.getStatusCode = function() +{ + return 200; + + // TODO + // this.error("Need implementation", "getStatusCode"); +} + +/*! + Provides the status text for the current request if available and null otherwise. +*/ +qx.Proto.getStatusText = function() +{ + return ""; + + // TODO + // this.error("Need implementation", "getStatusText"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + FRAME UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getIframeWindow = function() { + return qx.html.Iframe.getWindow(this._frame); +} + +qx.Proto.getIframeDocument = function() { + return qx.html.Iframe.getDocument(this._frame); +} + +qx.Proto.getIframeBody = function() { + return qx.html.Iframe.getBody(this._frame); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE DATA SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getIframeTextContent = function() +{ + var vBody = this.getIframeBody(); + + if (!vBody) { + return null; + } + + // Mshtml returns the content inside a PRE + // element if we use plain text + if (vBody.firstChild.tagName.toLowerCase() == "pre") + { + return vBody.firstChild.innerHTML; + } + else + { + return vBody.innerHTML; + } +} + +qx.Proto.getIframeHtmlContent = function() +{ + var vBody = this.getIframeBody(); + return vBody ? vBody.innerHTML : null; +} + +/*! + Returns the length of the content as fetched thus far +*/ +qx.Proto.getFetchedLength = function() +{ + return 0; + + // TODO + // throw new Error("getFetchedLength is abstract"); +} + +qx.Proto.getResponseContent = function() +{ + if (this.getState() !== "completed") + { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Transfer not complete, ignoring content!"); + } + + return null; + } + + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("Returning content for responseType: " + this.getResponseType()); + } + + var vText = this.getIframeTextContent(); + + switch(this.getResponseType()) + { + case qx.util.Mime.TEXT: + return vText; + break; + + case qx.util.Mime.HTML: + return this.getIframeHtmlContent(); + break; + + case qx.util.Mime.JSON: + try { + return vText && vText.length > 0 ? qx.io.Json.parseQx(vText) : null; + } catch(ex) { + return this.error("Could not execute json: (" + vText + ")", ex); + } + + case qx.util.Mime.JAVASCRIPT: + try { + return vText && vText.length > 0 ? window.eval(vText) : null; + } catch(ex) { + return this.error("Could not execute javascript: (" + vText + ")", ex); + } + + case qx.util.Mime.XML: + return this.getIframeDocument(); + + default: + this.warn("No valid responseType specified (" + this.getResponseType() + ")!"); + return null; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._frame) + { + this._frame.onload = null; + this._frame.onreadystatechange = null; + + // Reset source to a blank image for gecko + // Otherwise it will switch into a load-without-end behaviour + if (qx.core.Client.getInstance().isGecko()) { + this._frame.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + } + + // Finally remove element node + document.body.removeChild(this._frame); + + this._frame = null; + } + + if (this._form) + { + document.body.removeChild(this._form); + this._form = null; + } + + return qx.io.remote.AbstractRemoteTransport.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Request.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Request.js new file mode 100644 index 0000000000..0c8640d628 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Request.js @@ -0,0 +1,559 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) +#require(qx.net.Http) +#require(qx.util.Mime) + +************************************************************************ */ + +/** + * This class is used to send HTTP requests to the server. + * + * @event created {qx.event.type.Event} + * @event configured {qx.event.type.Event} + * @event sending {qx.event.type.Event} + * @event receiving {qx.event.type.Event} + * @event completed {qx.event.type.Event} + * @event failed {qx.event.type.Event} + * @event aborted {qx.event.type.Event} + * @event timeout {qx.event.type.Event} + * + * @param vUrl {String} Target url to issue the request to. + * @param vMethod {String} Determines that type of request to issue (GET or POST). Default is GET. + * @param vResponseType {String} The mime type of the response. Default is text/plain {@link qx.util.Mime}. + */ +qx.OO.defineClass("qx.io.remote.Request", qx.core.Target, +function(vUrl, vMethod, vResponseType) +{ + qx.core.Target.call(this); + + this._requestHeaders = {}; + this._parameters = {}; + + this.setUrl(vUrl); + this.setMethod(vMethod || qx.net.Http.METHOD_GET); + this.setResponseType(vResponseType || qx.util.Mime.TEXT); + + this.setProhibitCaching(true); + + // Prototype-Style Request Headers + this.setRequestHeader("X-Requested-With", "qooxdoo"); + this.setRequestHeader("X-Qooxdoo-Version", qx.core.Version.toString()); + + // Get the next sequence number for this request + this._seqNum = ++qx.io.remote.Request._seqNum; +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ +/*! + Target url to issue the request to. +*/ +qx.OO.addProperty({ name : "url", type : "string" }); +/*! + Determines what type of request to issue (GET or POST). +*/ +qx.OO.addProperty( +{ + name : "method", + type : "string", + possibleValues : [ + qx.net.Http.METHOD_GET, qx.net.Http.METHOD_POST, + qx.net.Http.METHOD_PUT, qx.net.Http.METHOD_HEAD, + qx.net.Http.METHOD_DELETE + ] +}); +/*! + Set the request to asynchronous. +*/ +qx.OO.addProperty({ name : "asynchronous", type : "boolean", defaultValue : true, + getAlias: "isAsynchronous" }); +/*! + Set the data to be sent via this request +*/ +qx.OO.addProperty({ name : "data", type : "string" }); +/*! + Username to use for HTTP authentication. Null if HTTP authentication + is not used. +*/ +qx.OO.addProperty({ name : "username", type : "string" }); +/*! + Password to use for HTTP authentication. Null if HTTP authentication + is not used. +*/ +qx.OO.addProperty({ name : "password", type : "string" }); +qx.OO.addProperty( +{ + name : "state", + type : "string", + possibleValues : [ + "configured", "queued", + "sending", "receiving", + "completed", "aborted", + "timeout", "failed" + ], + defaultValue : "configured" +}); +/* + Response type of request. + + The response type is a MIME type, default is text/plain. Other + supported MIME types are text/javascript, text/html, application/json, + application/xml. + + @see qx.util.Mime +*/ +qx.OO.addProperty({ + name : "responseType", + type : "string", + possibleValues : [ + qx.util.Mime.TEXT, + qx.util.Mime.JAVASCRIPT, qx.util.Mime.JSON, + qx.util.Mime.XML, qx.util.Mime.HTML + ] +}); +/*! + Number of millieseconds before the request is being timed out. + + If this property is null, the timeout for the request comes is the + qx.io.remote.RequestQueue's property defaultTimeout. +*/ +qx.OO.addProperty({ name : "timeout", type : "number" }); + +/*! + Prohibit request from being cached. + + Setting the value to true adds a parameter "nocache" to the request + with a value of the current time. Setting the value to false removes + the parameter. +*/ +qx.OO.addProperty({ name : "prohibitCaching", type : "boolean" }); +/*! + Indicate that the request is cross domain. + + A request is cross domain if the request's URL points to a host other + than the local host. This switches the concrete implementation that + is used for sending the request from qx.io.remote.XmlHttpTransport to + qx.io.remote.ScriptTransport, because only the latter can handle cross domain + requests. +*/ +qx.OO.addProperty({ name : "crossDomain", type : "boolean", defaultValue : false }); +/*! + Indicate that the request will be used for a file upload. + + The request will be used for a file upload. This switches the concrete + implementation that is used for sending the request from + qx.io.remote.XmlHttpTransport to qx.io.remote.IFrameTransport, because only + the latter can handle file uploads. +*/ +qx.OO.addProperty({ name : "fileUpload", type : "boolean", defaultValue : false }); +/*! + The transport instance used for the request. + + This is necessary to be able to abort an asynchronous request. +*/ +qx.OO.addProperty({ name : "transport", type : "object", instance : "qx.io.remote.Exchange" }); +/*! + Use Basic HTTP Authentication +*/ +qx.OO.addProperty({ name : "useBasicHttpAuth", type : "boolean" }); + + + + + + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ +/*! + Schedule this request for transport to server. + + The request is added to the singleton class qx.io.remote.RequestQueue's list of + pending requests. +*/ +qx.Proto.send = function() { + qx.io.remote.RequestQueue.getInstance().add(this); +} + +/*! + Abort sending this request. + + The request is removed from the singleton class qx.io.remote.RequestQueue's + list of pending events. If the request haven't been scheduled this + method is a noop. +*/ +qx.Proto.abort = function() { + qx.io.remote.RequestQueue.getInstance().abort(this); +} + +qx.Proto.reset = function() +{ + switch(this.getState()) + { + case "sending": + case "receiving": + this.error("Aborting already sent request!"); + // no break + + case "queued": + this.abort(); + break; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + STATE ALIASES +--------------------------------------------------------------------------- +*/ + +qx.Proto.isConfigured = function() { + return this.getState() === "configured"; +} + +qx.Proto.isQueued = function() { + return this.getState() === "queued"; +} + +qx.Proto.isSending = function() { + return this.getState() === "sending"; +} + +qx.Proto.isReceiving = function() { + return this.getState() === "receiving"; +} + +qx.Proto.isCompleted = function() { + return this.getState() === "completed"; +} + +qx.Proto.isAborted = function() { + return this.getState() === "aborted"; +} + +qx.Proto.isTimeout = function() { + return this.getState() === "timeout"; +} + +/*! + Return true if the request is in the failed state + ("failed"). +*/ +qx.Proto.isFailed = function() { + return this.getState() === "failed"; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onqueued = function(e) +{ + // Modify internal state + this.setState("queued"); + + // Bubbling up + this.dispatchEvent(e); +} + +qx.Proto._onsending = function(e) +{ + // Modify internal state + this.setState("sending"); + + // Bubbling up + this.dispatchEvent(e); +} + +qx.Proto._onreceiving = function(e) +{ + // Modify internal state + this.setState("receiving"); + + // Bubbling up + this.dispatchEvent(e); +} + +qx.Proto._oncompleted = function(e) +{ + // Modify internal state + this.setState("completed"); + + // Bubbling up + this.dispatchEvent(e); + + // Automatically dispose after event completion + this.dispose(); +} + +qx.Proto._onaborted = function(e) +{ + // Modify internal state + this.setState("aborted"); + + // Bubbling up + this.dispatchEvent(e); + + // Automatically dispose after event completion + this.dispose(); +} + +qx.Proto._ontimeout = function(e) +{ +/* + // User's handler can block until timeout. + switch(this.getState()) + { + // If we're no longer running... + case "completed": + case "timeout": + case "aborted": + case "failed": + // then don't bubble up the timeout event + return; + } +*/ + + // Modify internal state + this.setState("timeout"); + + // Bubbling up + this.dispatchEvent(e); + + // Automatically dispose after event completion + this.dispose(); +} + +qx.Proto._onfailed = function(e) +{ + // Modify internal state + this.setState("failed"); + + // Bubbling up + this.dispatchEvent(e); + + // Automatically dispose after event completion + this.dispose(); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyState = function(propValue, propOldValue, propData) +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("State: " + propValue); + } + + return true; +} + +qx.Proto._modifyProhibitCaching = function(propValue, propOldValue, propData) +{ + propValue ? this.setParameter("nocache", new Date().valueOf()) : this.removeParameter("nocache"); + + return true; +} + +qx.Proto._modifyMethod = function(propValue, propOldValue, propData) +{ + if (propValue === qx.net.Http.METHOD_POST) { + this.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + } + + return true; +} + +qx.Proto._modifyResponseType = function(propValue, propOldValue, propData) +{ + this.setRequestHeader("X-Qooxdoo-Response-Type", propValue); + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + REQUEST HEADER +--------------------------------------------------------------------------- +*/ +/*! + Add a request header to the request. + + Example: request.setRequestHeader("Content-Type", qx.util.Mime.HTML) +*/ +qx.Proto.setRequestHeader = function(vId, vValue) { + this._requestHeaders[vId] = vValue; +} + +qx.Proto.removeRequestHeader = function(vId) { + delete this._requestHeaders[vId]; +} + +qx.Proto.getRequestHeader = function(vId) { + return this._requestHeaders[vId] || null; +} + +qx.Proto.getRequestHeaders = function() { + return this._requestHeaders; +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + PARAMETERS +--------------------------------------------------------------------------- +*/ +/*! + Add a parameter to the request. + + @param vId String identifier of the parameter to add. + @param vValue Value of parameter. May be a string (for one parameter) or an + array of strings (for setting multiple parameter values with the same + parameter name). +*/ +qx.Proto.setParameter = function(vId, vValue) { + this._parameters[vId] = vValue; +} + +/*! + Remove a parameter from the request. + + @param vId String identifier of the parameter to remove. +*/ +qx.Proto.removeParameter = function(vId) { + delete this._parameters[vId]; +} + +/*! + Get a parameter in the request. + + @param vId String identifier of the parameter to get. +*/ +qx.Proto.getParameter = function(vId) { + return this._parameters[vId] || null; +} + +/*! + Returns an object containg all parameters for the request. +*/ +qx.Proto.getParameters = function() { + return this._parameters; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + SEQUENCE NUMBER +--------------------------------------------------------------------------- +*/ + +/* + * Sequence (id) number of a request, used to associate a response or error + * with its initiating request. + */ +qx.io.remote.Request._seqNum = 0; + +/** + * Obtain the sequence (id) number used for this request + */ +qx.Proto.getSequenceNumber = function() { + return this._seqNum; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._requestHeaders = null; + this._parameters = null; + + this.setTransport(null); + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/RequestQueue.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/RequestQueue.js new file mode 100644 index 0000000000..9cf8dac297 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/RequestQueue.js @@ -0,0 +1,409 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + +/** + * Handles scheduling of requests to be sent to a server. + * + * This class is a singleton and is used by qx.io.remote.Request to schedule its + * requests. It should not be used directly. + */ +qx.OO.defineClass("qx.io.remote.RequestQueue", qx.core.Target, +function() +{ + qx.core.Target.call(this); + + this._queue = []; + this._active = []; + + this._totalRequests = 0; + + // timeout handling + this._timer = new qx.client.Timer(500); + this._timer.addEventListener("interval", this._oninterval, this); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * @deprecated + */ +qx.OO.addProperty({ name : "maxTotalRequests", type : "number" }); + +/** + * Maximum number of parallel requests. + */ +qx.OO.addProperty({ name : "maxConcurrentRequests", type : "number", defaultValue : 3 }); + +/** + * Default timeout for remote requests in milliseconds. + */ +qx.OO.addProperty({ name : "defaultTimeout", type : "number", defaultValue : 5000 }); + + + + + + +/* +--------------------------------------------------------------------------- + QUEUE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._debug = function() +{ + // Debug output + var vText = this._active.length + "/" + (this._queue.length+this._active.length); + + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) + { + this.debug("Progress: " + vText); + window.status = "Request-Queue Progress: " + vText; + } +} + +qx.Proto._check = function() +{ + // Debug output + this._debug(); + + // Check queues and stop timer if not needed anymore + if (this._active.length == 0 && this._queue.length == 0) { + this._timer.stop(); + } + + // Checking if enabled + if (!this.getEnabled()) { + return; + } + + // Checking active queue fill + if (this._active.length >= this.getMaxConcurrentRequests() || this._queue.length == 0) { + return; + } + + // Checking number of total requests + if (this.getMaxTotalRequests() != null && this._totalRequests >= this.getMaxTotalRequests()) { + return; + } + + var vRequest = this._queue.shift(); + var vTransport = new qx.io.remote.Exchange(vRequest); + + // Increment counter + this._totalRequests++; + + // Add to active queue + this._active.push(vTransport); + + // Debug output + this._debug(); + + // Establish event connection between qx.io.remote.Exchange instance and qx.io.remote.Request + vTransport.addEventListener("sending", vRequest._onsending, vRequest); + vTransport.addEventListener("receiving", vRequest._onreceiving, vRequest); + vTransport.addEventListener("completed", vRequest._oncompleted, vRequest); + vTransport.addEventListener("aborted", vRequest._onaborted, vRequest); + vTransport.addEventListener("timeout", vRequest._ontimeout, vRequest); + vTransport.addEventListener("failed", vRequest._onfailed, vRequest); + + // Establish event connection between qx.io.remote.Exchange and me. + vTransport.addEventListener("sending", this._onsending, this); + vTransport.addEventListener("completed", this._oncompleted, this); + vTransport.addEventListener("aborted", this._oncompleted, this); + vTransport.addEventListener("timeout", this._oncompleted, this); + vTransport.addEventListener("failed", this._oncompleted, this); + + // Store send timestamp + vTransport._start = (new Date).valueOf(); + + // Send + vTransport.send(); + + // Retry + if (this._queue.length > 0) { + this._check(); + } +} + +qx.Proto._remove = function(vTransport) +{ + var vRequest = vTransport.getRequest(); + + // Destruct event connection between qx.io.remote.Exchange instance and qx.io.remote.Request + vTransport.removeEventListener("sending", vRequest._onsending, vRequest); + vTransport.removeEventListener("receiving", vRequest._onreceiving, vRequest); + vTransport.removeEventListener("completed", vRequest._oncompleted, vRequest); + vTransport.removeEventListener("aborted", vRequest._onaborted, vRequest); + vTransport.removeEventListener("timeout", vRequest._ontimeout, vRequest); + vTransport.removeEventListener("failed", vRequest._onfailed, vRequest); + + // Destruct event connection between qx.io.remote.Exchange and me. + vTransport.removeEventListener("sending", this._onsending, this); + vTransport.removeEventListener("completed", this._oncompleted, this); + vTransport.removeEventListener("aborted", this._oncompleted, this); + vTransport.removeEventListener("timeout", this._oncompleted, this); + vTransport.removeEventListener("failed", this._oncompleted, this); + + // Remove from active transports + qx.lang.Array.remove(this._active, vTransport); + + // Dispose transport object + vTransport.dispose(); + + // Check again + this._check(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._activeCount = 0; + +qx.Proto._onsending = function(e) +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) + { + this._activeCount++; + e.getTarget()._counted = true; + + this.debug("ActiveCount: " + this._activeCount); + } +} + +qx.Proto._oncompleted = function(e) +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) + { + if (e.getTarget()._counted) + { + this._activeCount--; + this.debug("ActiveCount: " + this._activeCount); + } + } + + this._remove(e.getTarget()); +} + + + + + + + +/* +--------------------------------------------------------------------------- + TIMEOUT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._oninterval = function(e) +{ + var vActive = this._active; + + if (vActive.length == 0) { + return; + } + + var vCurrent = (new Date).valueOf(); + var vTransport; + var vRequest; + var vDefaultTimeout = this.getDefaultTimeout(); + var vTimeout; + var vTime; + + for (var i=vActive.length-1; i>=0; i--) + { + vTransport = vActive[i]; + vRequest = vTransport.getRequest(); + if (vRequest.isAsynchronous()) { + vTimeout = vRequest.getTimeout(); + + // if timer is disabled... + if (vTimeout == 0) { + // then ignore it. + continue; + } + + if (vTimeout == null) { + vTimeout = vDefaultTimeout; + } + + vTime = vCurrent - vTransport._start; + + if (vTime > vTimeout) + { + this.warn("Timeout: transport " + vTransport.toHashCode()); + this.warn(vTime + "ms > " + vTimeout + "ms"); + vTransport.timeout(); + } + } + } +} + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (propValue) { + this._check(); + } + + this._timer.setEnabled(propValue); + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ +/*! + Add the request to the pending requests queue. +*/ +qx.Proto.add = function(vRequest) +{ + vRequest.setState("queued"); + + this._queue.push(vRequest); + this._check(); + + if (this.getEnabled()) { + this._timer.start(); + } +} + +/*! + Remove the request from the pending requests queue. + + The underlying transport of the request is forced into the aborted + state ("aborted") and listeners of the "aborted" + signal are notified about the event. If the request isn't in the + pending requests queue, this method is a noop. +*/ +qx.Proto.abort = function(vRequest) +{ + var vTransport = vRequest.getTransport(); + + if (vTransport) + { + vTransport.abort(); + } + else if (qx.lang.Array.contains(this._queue, vRequest)) + { + qx.lang.Array.remove(this._queue, vRequest); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Disposer + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._active) + { + for (var i=0, a=this._active, l=a.length; i<l; i++) { + this._remove(a[i]); + } + + this._active = null; + } + + if (this._timer) + { + this._timer.removeEventListener("interval", this._oninterval, this); + this._timer = null; + } + + this._queue = null; + + return qx.core.Target.prototype.dispose.call(this); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Response.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Response.js new file mode 100644 index 0000000000..7668c921d5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Response.js @@ -0,0 +1,112 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + +qx.OO.defineClass("qx.io.remote.Response", qx.core.Target, +function() { + qx.core.Target.call(this); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "state", type : "number" }); +/*! + Status code of the response. +*/ +qx.OO.addProperty({ name : "statusCode", type : "number" }); +qx.OO.addProperty({ name : "content" }); +qx.OO.addProperty({ name : "responseHeaders", type : "object" }); + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +/* +qx.Proto._modifyResponseHeaders = function(propValue, propOldValue, propData) +{ + for (vKey in propValue) { + this.debug("R-Header: " + vKey + "=" + propValue[vKey]); + } + + return true; +} +*/ + + + + + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getResponseHeader = function(vHeader) +{ + var vAll = this.getResponseHeaders(); + if (vAll) { + return vAll[vHeader] || null; + } + + return null; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Rpc.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Rpc.js new file mode 100644 index 0000000000..88fe2f46a6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/Rpc.js @@ -0,0 +1,581 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Andreas Junghans (lucidcake) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) + +************************************************************************ */ + + +/** + * Provides a Remote Procedure Call (RPC) implementation. + * + * Each instance of this class represents a "Service". These services can + * correspond to various concepts on the server side (depending on the + * programming language/environment being used), but usually, a service means + * a class on the server. + * + * In case multiple instances of the same service are needed, they can be + * distinguished by ids. If such an id is specified, the server routes all + * calls to a service that have the same id to the same server-side instance. + * + * When calling a server-side method, the parameters and return values are + * converted automatically. Supported types are int (and Integer), double + * (and Double), String, Date, Map, and JavaBeans. Beans must habe a default + * constructor on the server side and are represented by simple JavaScript + * objects on the client side (used as associative arrays with keys matching + * the server-side properties). Beans can also be nested, but be careful to not + * create circular references! There are no checks to detect these (which would + * be expensive), so you as the user are responsible for avoiding them. + * + * @param url {String} identifies the url where the service + * is found. Note that if the url is to + * a domain (server) other than where the + * qooxdoo script came from, i.e. it is + * cross-domain, then you must also call + * the setCrossDomain(true) method to + * enable the ScriptTransport instead of + * the XmlHttpTransport, since the latter + * can not handle cross-domain requests. + * + * @param serviceName {String} identifies the service. For the Java + * implementation, this is the fully + * qualified name of the class that offers + * the service methods + * (e.g. "my.pkg.MyService"). + * + * @event completed (qx.event.type.DataEvent) + * @event failed (qx.event.type.DataEvent) + * @event timeout (qx.event.type.DataEvent) + * @event aborted (qx.event.type.DataEvent) + */ + +qx.OO.defineClass("qx.io.remote.Rpc", qx.core.Target, +function(url, serviceName) +{ + qx.core.Target.call(this); + + this.setUrl(url); + if (serviceName != null) { + this.setServiceName(serviceName); + } + this._previousServerSuffix = null; + this._currentServerSuffix = null; + if (qx.core.ServerSettings) { + this._currentServerSuffix = qx.core.ServerSettings.serverPathSuffix; + } +}); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + The timeout for asynchronous calls in milliseconds. + */ +qx.OO.addProperty({ name : "timeout", type : "number" }); + +/** + Indicate that the request is cross domain. + + A request is cross domain if the request's URL points to a host other + than the local host. This switches the concrete implementation that + is used for sending the request from qx.io.remote.XmlHttpTransport to + qx.io.remote.ScriptTransport because only the latter can handle cross domain + requests. +*/ +qx.OO.addProperty({ name : "crossDomain", type : "boolean", defaultValue : false }); + +/** + The URL at which the service is located. +*/ +qx.OO.addProperty({ name : "url", type : "string", defaultValue : null }); + +/** + The service name. +*/ +qx.OO.addProperty({ name : "serviceName", type : "string", defaultValue : null }); + +/** + Data sent as "out of band" data in the request to the server. The format of + the data is opaque to RPC and may be recognized only by particular servers + It is up to the server to decide what to do with it: whether to ignore it, + handle it locally before calling the specified method, or pass it on to the + method. This server data is not sent to the server if it has been set to + 'undefined'. +*/ +qx.OO.addProperty({ name : "serverData", type : "object", defaultValue : undefined }); + +/** + Username to use for HTTP authentication. Null if HTTP authentication + is not used. +*/ +qx.OO.addProperty({ name : "username", type : "string" }); + +/** + Password to use for HTTP authentication. Null if HTTP authentication + is not used. +*/ +qx.OO.addProperty({ name : "password", type : "string" }); + +/** + Use Basic HTTP Authentication +*/ +qx.OO.addProperty({ name : "useBasicHttpAuth", type : "boolean" }); + +/** + Origins of errors +*/ +qx.io.remote.Rpc.origin = +{ + server : 1, + application : 2, + transport : 3, + local : 4 +} + +/** + Locally-detected errors +*/ +qx.io.remote.Rpc.localError = +{ + timeout : 1, + abort : 2 +} + + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ + +/* callType: 0 = sync, 1 = async with handler, 2 = async event listeners */ +/** + * Internal RPC call method + * + * @param args {Array} array of arguments + * @param callType {Integer} 0 = sync, 1 = async with handler, 2 = async event listeners + * @param refreshSession {Boolean} whether a new session should be requested + */ +qx.Proto._callInternal = function(args, callType, refreshSession) { + var self = this; + var offset = (callType == 0 ? 0 : 1) + var whichMethod = (refreshSession ? "refreshSession" : args[offset]); + var handler = args[0]; + var argsArray = []; + var eventTarget = this; + + for (var i = offset + 1; i < args.length; ++i) { + argsArray.push(args[i]); + } + var req = new qx.io.remote.Request(this.getUrl(), + qx.net.Http.METHOD_POST, + qx.util.Mime.JSON); + var requestObject = { + "service": (refreshSession ? null : this.getServiceName()), + "method": whichMethod, + "id": req.getSequenceNumber(), + "params": argsArray + // additional field 'server_data' optionally included, below + } + + // See if there's any out-of-band data to be sent to the server + var serverData = this.getServerData(); + if (serverData !== undefined) { + // There is. Send it. + requestObject.server_data = serverData; + } + + req.setCrossDomain(this.getCrossDomain()); + + if (this.getUsername()) { + req.setUseBasicHttpAuth(this.getUseBasicHttpAuth()); + req.setUsername(this.getUsername()); + req.setPassword(this.getPassword()); + } + + req.setTimeout(this.getTimeout()); + var ex = null; + var id = null; + var result = null; + + var handleRequestFinished = function(eventType, eventTarget) { + switch(callType) + { + case 0: // sync + break; + + case 1: // async with handler function + handler(result, ex, id); + break; + + case 2: // async with event listeners + // Dispatch the event to our listeners. + if (! ex) { + eventTarget.createDispatchDataEvent(eventType, result); + } else { + // Add the id to the exception + ex.id = id; + + if (args[0]) { // coalesce + // They requested that we coalesce all failure types to "failed" + eventTarget.createDispatchDataEvent("failed", ex); + } else { + // No coalese so use original event type + eventTarget.createDispatchDataEvent(eventType, ex); + } + } + } + } + + var addToStringToObject = function(obj) { + obj.toString = function() { + switch(obj.origin) + { + case qx.io.remote.Rpc.origin.server: + return "Server error " + obj.code + ": " + obj.message; + case qx.io.remote.Rpc.origin.application: + return "Application error " + obj.code + ": " + obj.message; + case qx.io.remote.Rpc.origin.transport: + return "Transport error " + obj.code + ": " + obj.message; + case qx.io.remote.Rpc.origin.local: + return "Local error " + obj.code + ": " + obj.message; + default: + return "UNEXPECTED origin " + obj.origin + " error " + obj.code + ": " + obj.message; + } + } + } + + var makeException = function(origin, code, message) { + var ex = new Object(); + + ex.origin = origin; + ex.code = code; + ex.message = message; + addToStringToObject(ex); + + return ex; + } + + req.addEventListener("failed", function(evt) { + var code = evt.getData().getStatusCode(); + ex = makeException(qx.io.remote.Rpc.origin.transport, + code, + qx.io.remote.Exchange.statusCodeToString(code)); + id = this.getSequenceNumber(); + handleRequestFinished("failed", eventTarget); + }); + req.addEventListener("timeout", function(evt) { + ex = makeException(qx.io.remote.Rpc.origin.local, + qx.io.remote.Rpc.localError.timeout, + "Local time-out expired"); + id = this.getSequenceNumber(); + handleRequestFinished("timeout", eventTarget); + }); + req.addEventListener("aborted", function(evt) { + ex = makeException(qx.io.remote.Rpc.origin.local, + qx.io.remote.Rpc.localError.abort, + "Aborted"); + id = this.getSequenceNumber(); + handleRequestFinished("aborted", eventTarget); + }); + req.addEventListener("completed", function(evt) { + result = evt.getData().getContent(); + id = result["id"]; + if (id != this.getSequenceNumber()) { + this.warn("Received id (" + id + ") does not match requested id (" + this.getSequenceNumber() + ")!"); + } + var exTest = result["error"]; + if (exTest != null) { + result = null; + addToStringToObject(exTest); + ex = exTest; + } else { + result = result["result"]; + if (refreshSession) { + result = eval("(" + result + ")"); + var newSuffix = qx.core.ServerSettings.serverPathSuffix; + if (self._currentServerSuffix != newSuffix) { + self._previousServerSuffix = self._currentServerSuffix; + self._currentServerSuffix = newSuffix; + } + self.setUrl(self.fixUrl(self.getUrl())); + } + } + handleRequestFinished("completed", eventTarget); + }); + req.setData(qx.io.Json.stringify(requestObject)); + req.setAsynchronous(callType > 0); + + if (req.getCrossDomain()) { + // Our choice here has no effect anyway. This is purely informational. + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + } else { + // When not cross-domain, set type to text/json + req.setRequestHeader("Content-Type", qx.util.Mime.JSON); + } + + req.send(); + + if (callType == 0) { + if (ex != null) { + var error = new Error(ex.toString()); + error.rpcdetails = ex; + throw error; + } + return result; + } else { + return req; + } +} + + +/** + * Helper method to rewrite a URL with a stale session id (so that it includes + * the correct session id afterwards). + * + * @param url {String} the URL to examine. + * + * @return {String} the (possibly re-written) URL. + */ + +qx.Proto.fixUrl = function(url) { + if (this._previousServerSuffix == null || this._currentServerSuffix == null || + this._previousServerSuffix == "" || + this._previousServerSuffix == this._currentServerSuffix) { + return url; + } + var index = url.indexOf(this._previousServerSuffix); + if (index == -1) { + return url; + } + return url.substring(0, index) + this._currentServerSuffix + + url.substring(index + this._previousServerSuffix.length); +}; + + +/** + * Makes a synchronous server call. The method arguments (if any) follow + * after the method name (as normal JavaScript arguments, separated by commas, + * not as an array). + * <p> + * If a problem occurs when making the call, an exception is thrown. + * </p> + * <p> + * WARNING. With some browsers, the synchronous interface + * causes the browser to hang while awaiting a response! If the server + * decides to pause for a minute or two, your browser may do nothing + * (including refreshing following window changes) until the response is + * received. Instead, use the asynchronous interface. + * </p> + * <p> + * YOU HAVE BEEN WARNED. + * </p> + * + * @param methodName {String} the name of the method to call. + * + * @return {var} the result returned by the server. + */ + +qx.Proto.callSync = function(methodName) { + return this._callInternal(arguments, 0); +} + + +/** + * Makes an asynchronous server call. The method arguments (if any) follow + * after the method name (as normal JavaScript arguments, separated by commas, + * not as an array). + * <p> + * When an answer from the server arrives, the <code>handler</code> function + * is called with the result of the call as the first, an exception as the + * second parameter, and the id (aka sequence number) of the invoking request + * as the third parameter. If the call was successful, the second parameter is + * <code>null</code>. If there was a problem, the second parameter contains an + * exception, and the first one is <code>null</code>. + * </p> + * <p> + * The return value of this method is a call reference that you can store if + * you want to abort the request later on. This value should be treated as + * opaque and can change completely in the future! The only thing you can rely + * on is that the <code>abort</code> method will accept this reference and + * that you can retrieve the sequence number of the request by invoking the + * getSequenceNumber() method (see below). + * </p> + * <p> + * If a specific method is being called, asynchronously, a number of times in + * succession, the getSequenceNumber() method may be used to disambiguate + * which request a response corresponds to. The sequence number value is a + * value which increments with each request.) + * </p> + * + * @param handler {Function} the callback function. + * + * @param methodName {String} the name of the method to call. + * + * @return {var} the method call reference. + */ + +qx.Proto.callAsync = function(handler, methodName) { + return this._callInternal(arguments, 1); +} + + +/** + * Makes an asynchronous server call and dispatch an event upon completion or + * failure. The method arguments (if any) follow after the method name (as + * normal JavaScript arguments, separated by commas, not as an array). + * <p> + * When an answer from the server arrives (or fails to arrive on time), if an + * exception occurred, a "failed", "timeout" or "aborted" event, as + * appropriate, is dispatched to any waiting event listeners. If no exception + * occurred, a "completed" event is dispatched. + * </p> + * <p> + * When a "failed", "timeout" or "aborted" event is dispatched, the event data + * contains an object with the properties 'origin', 'code', 'message' and + * 'id'. The object has a toString() function which may be called to convert + * the exception to a string. + * </p> + * <p> + * When a "completed" event is dispatched, the event data contains the + * JSON-RPC result. + * </p> + * <p> + * The return value of this method is a call reference that you can store if + * you want to abort the request later on. This value should be treated as + * opaque and can change completely in the future! The only thing you can rely + * on is that the <code>abort</code> method will accept this reference and + * that you can retrieve the sequence number of the request by invoking the + * getSequenceNumber() method (see below). + * </p> + * <p> + * If a specific method is being called, asynchronously, a number of times in + * succession, the getSequenceNumber() method may be used to disambiguate + * which request a response corresponds to. The sequence number value is a + * value which increments with each request.) + * </p> + * + * @param coalesce {Boolean} coalesce all failure types ("failed", + * "timeout", and "aborted") to "failed". + * This is reasonable in many cases, as + * the provided exception contains adequate + * disambiguating information. + * + * @param methodName {String} the name of the method to call. + * + * @return {var} the method call reference. + */ + +qx.Proto.callAsyncListeners = function(coalesce, methodName) { + return this._callInternal(arguments, 2); +} + + +/** + * Refreshes a server session by retrieving the session id again from the + * server. + * <p> + * The specified handler function is called when the refresh is complete. The + * first parameter can be <code>true</code> (indicating that a refresh either + * wasn't necessary at this time or it was successful) or <code>false</code> + * (indicating that a refresh would have been necessary but can't be performed + * because the server backend doesn't support it). If there is a non-null + * second parameter, it's an exception indicating that there was an error when + * refreshing the session. + * </p> + * + * @param handler {Function} a callback function that is called when the + * refresh is complete (or failed). + */ + +qx.Proto.refreshSession = function(handler) { + if (this.getCrossDomain()) { + if (qx.core.ServerSettings && qx.core.ServerSettings.serverPathSuffix) { + var timeDiff = (new Date()).getTime() - qx.core.ServerSettings.lastSessionRefresh; + if (timeDiff/1000 > (qx.core.ServerSettings.sessionTimeoutInSeconds - 30)) { + //this.info("refreshing session"); + this._callInternal([handler], 1, true); + } else { + handler(true); // session refresh was OK (in this case: not needed) + } + } else { + handler(false); // no refresh possible, but would be necessary + } + } else { + handler(true); // session refresh was OK (in this case: not needed) + } +} + + +/** + * Aborts an asynchronous server call. Consequently, the callback function + * provided to <code>callAsync</code> or <code>callAsyncListeners</code> will + * be called with an exception. + * + * @param opaqueCallRef {var} the call reference as returned by + * <code>callAsync</code> or + * <code>callAsyncListeners</code> + */ + +qx.Proto.abort = function(opaqueCallRef) { + opaqueCallRef.abort(); +} + + +/** + * Creates an URL for talking to a local service. A local service is one that + * lives in the same application as the page calling the service. For backends + * that don't support this auto-generation, this method returns null. + * + * @param instanceId {String ? null} an optional identifier for the + * server side instance that should be + * used. All calls to the same service + * with the same instance id are + * routed to the same object instance + * on the server. The instance id can + * also be used to provide additional + * data for the service instantiation + * on the server. + * + * @return {String} the url. + */ + +qx.Class.makeServerURL = function(instanceId) { + var retVal = null; + if (qx.core.ServerSettings) { + retVal = qx.core.ServerSettings.serverPathPrefix + "/.qxrpc" + + qx.core.ServerSettings.serverPathSuffix; + if (instanceId != null) { + retVal += "?instanceId=" + instanceId; + } + } + return retVal; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/ScriptTransport.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/ScriptTransport.js new file mode 100644 index 0000000000..40fe0dc74e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/ScriptTransport.js @@ -0,0 +1,361 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + * Andreas Junghans (lucidcake) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) +#require(qx.io.remote.Exchange) + +************************************************************************ */ + +/*! + Transports requests to a server using dynamic script tags. + + This class should not be used directly by client programmers. + */ +qx.OO.defineClass("qx.io.remote.ScriptTransport", qx.io.remote.AbstractRemoteTransport, +function() +{ + qx.io.remote.AbstractRemoteTransport.call(this); + + var vUniqueId = ++qx.io.remote.ScriptTransport._uniqueId; + if (vUniqueId >= 2000000000) { + qx.io.remote.ScriptTransport._uniqueId = vUniqueId = 1; + } + + this._element = null; + this._uniqueId = vUniqueId; +}); + +qx.Class._uniqueId = 0; +qx.Class._instanceRegistry = {}; +qx.Class.ScriptTransport_PREFIX = "_ScriptTransport_"; +qx.Class.ScriptTransport_ID_PARAM = qx.Class.ScriptTransport_PREFIX + "id"; +qx.Class.ScriptTransport_DATA_PARAM = qx.Class.ScriptTransport_PREFIX + "data"; +qx.Proto._lastReadyState = 0; + + + + + +/* +--------------------------------------------------------------------------- + CLASS PROPERTIES AND METHODS +--------------------------------------------------------------------------- +*/ + +// basic registration to qx.io.remote.Exchange +// the real availability check (activeX stuff and so on) follows at the first real request +qx.io.remote.Exchange.registerType(qx.io.remote.ScriptTransport, "qx.io.remote.ScriptTransport"); + +qx.io.remote.ScriptTransport.handles = +{ + synchronous : false, + asynchronous : true, + crossDomain : true, + fileUpload: false, + responseTypes : [ qx.util.Mime.TEXT, qx.util.Mime.JAVASCRIPT, qx.util.Mime.JSON ] +} + +qx.io.remote.ScriptTransport.isSupported = function() { + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.send = function() +{ + var vUrl = this.getUrl(); + + + + // -------------------------------------- + // Adding parameters + // -------------------------------------- + + vUrl += (vUrl.indexOf("?") >= 0 ? "&" : "?") + qx.io.remote.ScriptTransport.ScriptTransport_ID_PARAM + "=" + this._uniqueId; + + var vParameters = this.getParameters(); + var vParametersList = []; + for (var vId in vParameters) { + if (vId.indexOf(qx.io.remote.ScriptTransport.ScriptTransport_PREFIX) == 0) { + this.error("Illegal parameter name. The following prefix is used internally by qooxdoo): " + + qx.io.remote.ScriptTransport.ScriptTransport_PREFIX); + } + var value = vParameters[vId]; + if (value instanceof Array) { + for (var i = 0; i < value.length; i++) { + vParametersList.push(encodeURIComponent(vId) + "=" + + encodeURIComponent(value[i])); + } + } else { + vParametersList.push(encodeURIComponent(vId) + "=" + + encodeURIComponent(value)); + } + } + + if (vParametersList.length > 0) { + vUrl += "&" + vParametersList.join("&"); + } + + + + // -------------------------------------- + // Sending data + // -------------------------------------- + + vData = this.getData(); + if (vData != null) { + vUrl += "&" + qx.io.remote.ScriptTransport.ScriptTransport_DATA_PARAM + "=" + encodeURIComponent(vData); + } + + qx.io.remote.ScriptTransport._instanceRegistry[this._uniqueId] = this; + this._element = document.createElement("script"); + this._element.charset = "utf-8"; // IE needs this (it ignores the + // encoding from the header sent by the + // server for dynamic script tags) + this._element.src = vUrl; + + document.body.appendChild(this._element); +} + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENER +--------------------------------------------------------------------------- +*/ + +// For reference: +// http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readyState_1.asp +qx.io.remote.ScriptTransport._numericMap = +{ + "uninitialized" : 1, + "loading" : 2, + "loaded" : 2, + "interactive" : 3, + "complete" : 4 +} + +qx.Proto._switchReadyState = function(vReadyState) +{ + // Ignoring already stopped requests + switch(this.getState()) + { + case "completed": + case "aborted": + case "failed": + case "timeout": + this.warn("Ignore Ready State Change"); + return; + } + + // Updating internal state + while (this._lastReadyState < vReadyState) { + this.setState(qx.io.remote.Exchange._nativeMap[++this._lastReadyState]); + } +} +qx.Class._requestFinished = function(id, content) { + var vInstance = qx.io.remote.ScriptTransport._instanceRegistry[id]; + if (vInstance == null) { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Request finished for an unknown instance (probably aborted or timed out before)"); + } + } else { + vInstance._responseContent = content; + vInstance._switchReadyState(qx.io.remote.ScriptTransport._numericMap.complete); + } +} + + + + + +/* +--------------------------------------------------------------------------- + REQUEST HEADER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.setRequestHeader = function(vLabel, vValue) +{ + // TODO + // throw new Error("setRequestHeader is abstract"); +} + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE HEADER SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getResponseHeader = function(vLabel) +{ + return null; + + // TODO + // this.error("Need implementation", "getResponseHeader"); +} + +/*! + Provides an hash of all response headers. +*/ +qx.Proto.getResponseHeaders = function() +{ + return {} + + // TODO + // throw new Error("getResponseHeaders is abstract"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + STATUS SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Returns the current status code of the request if available or -1 if not. +*/ +qx.Proto.getStatusCode = function() +{ + return 200; + + // TODO + // this.error("Need implementation", "getStatusCode"); +} + +/*! + Provides the status text for the current request if available and null otherwise. +*/ +qx.Proto.getStatusText = function() +{ + return ""; + + // TODO + // this.error("Need implementation", "getStatusText"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE DATA SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Returns the length of the content as fetched thus far +*/ +qx.Proto.getFetchedLength = function() +{ + return 0; + + // TODO + // throw new Error("getFetchedLength is abstract"); +} + +qx.Proto.getResponseContent = function() +{ + if (this.getState() !== "completed") + { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Transfer not complete, ignoring content!"); + } + + return null; + } + + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.debug("Returning content for responseType: " + this.getResponseType()); + } + + switch(this.getResponseType()) + { + case qx.util.Mime.TEXT: + // server is responsible for using a string as the response + + case qx.util.Mime.JSON: + case qx.util.Mime.JAVASCRIPT: + return this._responseContent; + + default: + this.warn("No valid responseType specified (" + this.getResponseType() + ")!"); + return null; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._element != null) + { + delete qx.io.remote.ScriptTransport._instanceRegistry[this._uniqueId]; + document.body.removeChild(this._element); + this._element = null; + } + + return qx.io.remote.AbstractRemoteTransport.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/XmlHttpTransport.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/XmlHttpTransport.js new file mode 100644 index 0000000000..6c79e08f93 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/io/remote/XmlHttpTransport.js @@ -0,0 +1,738 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(io_remote) +#require(qx.io.remote.Exchange) +#require(qx.util.Mime) + +************************************************************************ */ + +/** + * @event created {qx.event.type.Event} + * @event configured {qx.event.type.Event} + * @event sending {qx.event.type.Event} + * @event receiving {qx.event.type.Event} + * @event completed {qx.event.type.Event} + * @event failed {qx.event.type.Event} + * @event aborted {qx.event.type.Event} + * @event timeout {qx.event.type.Event} + */ +qx.OO.defineClass("qx.io.remote.XmlHttpTransport", + qx.io.remote.AbstractRemoteTransport, +function() +{ + qx.io.remote.AbstractRemoteTransport.call(this); + + this._req = qx.io.remote.XmlHttpTransport.createRequestObject(); + + var o = this; + this._req.onreadystatechange = + function(e) { return o._onreadystatechange(e); } +}); + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +// basic registration to qx.io.remote.Exchange +// the real availability check (activeX stuff and so on) follows at the first real request +qx.io.remote.Exchange.registerType(qx.io.remote.XmlHttpTransport, + "qx.io.remote.XmlHttpTransport"); + +qx.io.remote.XmlHttpTransport.handles = +{ + synchronous : true, + asynchronous : true, + crossDomain : false, + fileUpload: false, + responseTypes : [ + qx.util.Mime.TEXT, + qx.util.Mime.JAVASCRIPT, + qx.util.Mime.JSON, + qx.util.Mime.XML, + qx.util.Mime.HTML + ] +} + +qx.io.remote.XmlHttpTransport.requestObjects = []; +qx.io.remote.XmlHttpTransport.requestObjectCount = 0; + +qx.io.remote.XmlHttpTransport.isSupported = function() +{ + return qx.net.HttpRequest.create() != null ? true : false; +}; + +qx.io.remote.XmlHttpTransport.createRequestObject = function() { + return qx.net.HttpRequest.create(); +} + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto._localRequest = false; +qx.Proto._lastReadyState = 0; + +qx.Proto.getRequest = function() { + return this._req; +} + + + + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.send = function() +{ + this._lastReadyState = 0; + + var vRequest = this.getRequest(); + var vMethod = this.getMethod(); + var vAsynchronous = this.getAsynchronous(); + var vUrl = this.getUrl(); + + + + // -------------------------------------- + // Local handling + // -------------------------------------- + + var vLocalRequest = (qx.core.Client.getInstance().getRunsLocally() && + !(/^http(s){0,1}\:/.test(vUrl))); + this._localRequest = vLocalRequest; + + + // -------------------------------------- + // Adding parameters + // -------------------------------------- + + var vParameters = this.getParameters(); + var vParametersList = []; + for (var vId in vParameters) { + var value = vParameters[vId]; + if (value instanceof Array) { + for (var i = 0; i < value.length; i++) { + vParametersList.push(encodeURIComponent(vId) + "=" + + encodeURIComponent(value[i])); + } + } else { + vParametersList.push(encodeURIComponent(vId) + "=" + + encodeURIComponent(value)); + } + } + + if (vParametersList.length > 0) { + vUrl += (vUrl.indexOf("?") >= 0 + ? "&" : "?") + vParametersList.join("&"); + } + + + var encode64 = function (input) { + var keyStr = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + do { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output += + keyStr.charAt(enc1) + + keyStr.charAt(enc2) + + keyStr.charAt(enc3) + + keyStr.charAt(enc4); + + } while (i < input.length); + + return output; + } + + // -------------------------------------- + // Opening connection + // -------------------------------------- + + if (this.getUsername()) { + if (this.getUseBasicHttpAuth()) { + vRequest.open(vMethod, vUrl, vAsynchronous); + vRequest.setRequestHeader('Authorization', + 'Basic ' + encode64(this.getUsername() + + ':' + + this.getPassword())); + } else { + vRequest.open(vMethod, vUrl, vAsynchronous, + this.getUsername(), this.getPassword()); + } + } else { + vRequest.open(vMethod, vUrl, vAsynchronous); + } + + + + // -------------------------------------- + // Applying request header + // -------------------------------------- + + // Add a Referer header + vRequest.setRequestHeader('Referer', window.location.href); + + var vRequestHeaders = this.getRequestHeaders(); + for (var vId in vRequestHeaders) { + vRequest.setRequestHeader(vId, vRequestHeaders[vId]); + } + + + + // -------------------------------------- + // Sending data + // -------------------------------------- + + try + { + vRequest.send(this.getData()); + } + catch(ex) + { + if (vLocalRequest) + { + this.failedLocally(); + } + else + { + this.error("Failed to send data: " + ex, "send"); + this.failed(); + } + + return; + } + + + + // -------------------------------------- + // Readystate for sync reqeusts + // -------------------------------------- + + if (!vAsynchronous) { + this._onreadystatechange(); + } +} + +/*! + Force the transport into the failed state + ("failed"). + + This method should be used only if the requests URI was local + access. I.e. it started with "file://". +*/ +qx.Proto.failedLocally = function() +{ + if (this.getState() === "failed") { + return; + } + + // should only occur on "file://" access + this.warn("Could not load from file: " + this.getUrl()); + + this.failed(); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onreadystatechange = function(e) +{ + // Ignoring already stopped requests + switch(this.getState()) + { + case "completed": + case "aborted": + case "failed": + case "timeout": + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { + this.warn("Ignore Ready State Change"); + } + return; + } + + // Checking status code + var vReadyState = this.getReadyState(); + if (vReadyState == 4) { + // The status code is only meaningful when we reach ready state 4. + // (Important for Opera since it goes through other states before + // reaching 4, and the status code is not valid before 4 is reached.) + if (!qx.io.remote.Exchange.wasSuccessful(this.getStatusCode(), vReadyState, this._localRequest)) { + return this.failed(); + } + } + + // Updating internal state + while (this._lastReadyState < vReadyState) { + this.setState(qx.io.remote.Exchange._nativeMap[++this._lastReadyState]); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + READY STATE +--------------------------------------------------------------------------- +*/ +/*! + Get the ready state of this transports request. + + For qx.io.remote.XmlHttpTransports, the ready state is a number between 1 to 4. +*/ +qx.Proto.getReadyState = function() +{ + var vReadyState = null; + + try { + vReadyState = this._req.readyState; + } catch(ex) {} + + return vReadyState; +} + + + + + + + +/* +--------------------------------------------------------------------------- + REQUEST HEADER SUPPORT +--------------------------------------------------------------------------- +*/ +/*! + Add a request header to this transports request. +*/ +qx.Proto.setRequestHeader = function(vLabel, vValue) { + this._req.setRequestHeader(vLabel, vValue); +} + + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE HEADER SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Returns a specific header provided by the server upon sending a request, + with header name determined by the argument headerName. + + Only available at readyState 3 and 4 universally and in readyState 2 + in Gecko. +*/ +qx.Proto.getResponseHeader = function(vLabel) +{ + var vResponseHeader = null; + + try { + this.getRequest().getResponseHeader(vLabel) || null; + } catch(ex) {} + + return vResponseHeader; +} + +qx.Proto.getStringResponseHeaders = function() +{ + var vSourceHeader = null; + + try + { + var vLoadHeader = this._req.getAllResponseHeaders(); + if (vLoadHeader) { + vSourceHeader = vLoadHeader; + } + } catch(ex) {} + + return vSourceHeader; +} + +/*! + Provides a hash of all response headers. +*/ +qx.Proto.getResponseHeaders = function() +{ + var vSourceHeader = this.getStringResponseHeaders(); + var vHeader = {}; + + if (vSourceHeader) + { + var vValues = vSourceHeader.split(/[\r\n]+/g); + + for(var i=0, l=vValues.length; i<l; i++) + { + var vPair = vValues[i].match(/^([^:]+)\s*:\s*(.+)$/i); + if(vPair) { + vHeader[vPair[1]] = vPair[2]; + } + } + } + + return vHeader; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + STATUS SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Returns the current status code of the request if available or -1 if not. +*/ +qx.Proto.getStatusCode = function() +{ + var vStatusCode = -1; + + try { + vStatusCode = this.getRequest().status; + } catch(ex) {} + + return vStatusCode; +} + +/*! + Provides the status text for the current request if available and null + otherwise. +*/ +qx.Proto.getStatusText = function() +{ + var vStatusText = ""; + + try { + vStatusText = this.getRequest().statusText; + } catch(ex) {} + + return vStatusText; +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + RESPONSE DATA SUPPORT +--------------------------------------------------------------------------- +*/ + +/*! + Provides the response text from the request when available and null + otherwise. By passing true as the "partial" parameter of this method, + incomplete data will be made available to the caller. +*/ +qx.Proto.getResponseText = function() +{ + var vResponseText = null; + + var vStatus = this.getStatusCode(); + var vReadyState = this.getReadyState(); + if (qx.io.remote.Exchange.wasSuccessful(vStatus, vReadyState, this._localRequest)) + { + try { + vResponseText = this.getRequest().responseText; + } catch(ex) {} + } + + return vResponseText; +} + +/*! + Provides the XML provided by the response if any and null otherwise. By + passing true as the "partial" parameter of this method, incomplete data will + be made available to the caller. +*/ +qx.Proto.getResponseXml = function() +{ + var vResponseXML = null; + + var vStatus = this.getStatusCode(); + var vReadyState = this.getReadyState(); + if (qx.io.remote.Exchange.wasSuccessful(vStatus, vReadyState, this._localRequest)) + { + try { + vResponseXML = this.getRequest().responseXML; + } catch(ex) {} + } + + // Typical behaviour on file:// on mshtml + // Could we check this with something like: /^file\:/.test(path); ? + // No browser check here, because it doesn't seem to break other browsers + // * test for this.req.responseXML's objecthood added by * + // * FRM, 20050816 * + if (typeof vResponseXML == "object" && vResponseXML != null) + { + if (!vResponseXML.documentElement) + { + // Clear xml file declaration, this breaks non unicode files (like ones with Umlauts) + var s = String(this.getRequest().responseText).replace(/<\?xml[^\?]*\?>/, ""); + vResponseXML.loadXML(s); + }; + // Re-check if fixed... + if (!vResponseXML.documentElement) { + throw new Error("Missing Document Element!"); + }; + + if (vResponseXML.documentElement.tagName == "parseerror") { + throw new Error("XML-File is not well-formed!"); + }; + } + else + { + throw new Error("Response was not a valid xml document [" + this.getRequest().responseText + "]"); + }; + + return vResponseXML; +} + +/*! + Returns the length of the content as fetched thus far +*/ +qx.Proto.getFetchedLength = function() +{ + var vText = this.getResponseText(); + return typeof vText == "string" ? vText.length : 0; +} + +qx.Proto.getResponseContent = function() +{ + if (this.getState() !== "completed") + { + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", + "enableDebug")) { + this.warn("Transfer not complete, ignoring content!"); + } + + return null; + } + + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", + "enableDebug")) { + this.debug("Returning content for responseType: " + this.getResponseType()); + } + + var vText = this.getResponseText(); + + switch(this.getResponseType()) + { + case qx.util.Mime.TEXT: + case qx.util.Mime.HTML: + return vText; + + case qx.util.Mime.JSON: + try { + return vText && vText.length > 0 ? qx.io.Json.parseQx(vText) : null; + } catch(ex) { + this.error("Could not execute json: [" + vText + "]", ex); + return "<pre>Could not execute json: \n" + vText + "\n</pre>" + } + + case qx.util.Mime.JAVASCRIPT: + try { + return vText && vText.length > 0 ? window.eval(vText) : null; + } catch(ex) { + return this.error("Could not execute javascript: [" + vText + "]", ex); + } + + case qx.util.Mime.XML: + return this.getResponseXml(); + + default: + this.warn("No valid responseType specified (" + this.getResponseType() + ")!"); + return null; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyState = function(propValue, propOldValue, propData) +{ + if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", + "enableDebug")) { + this.debug("State: " + propValue); + } + + switch(propValue) + { + case "created": + this.createDispatchEvent("created"); + break; + + case "configured": + this.createDispatchEvent("configured"); + break; + + case "sending": + this.createDispatchEvent("sending"); + break; + + case "receiving": + this.createDispatchEvent("receiving"); + break; + + case "completed": + this.createDispatchEvent("completed"); + break; + + case "failed": + this.createDispatchEvent("failed"); + break; + + case "aborted": + this.getRequest().abort(); + this.createDispatchEvent("aborted"); + break; + + case "timeout": + this.getRequest().abort(); + this.createDispatchEvent("timeout"); + break; + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + var vRequest = this.getRequest(); + + if (vRequest) + { + // Should be right, + // but is not compatible to mshtml (throws an exception) + if (!qx.core.Client.getInstance().isMshtml()) { + vRequest.onreadystatechange = null; + } + + // Aborting + switch(vRequest.readyState) + { + case 1: + case 2: + case 3: + vRequest.abort(); + } + + // Cleanup objects + this._req = null; + } + + return qx.io.remote.AbstractRemoteTransport.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Array.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Array.js new file mode 100644 index 0000000000..9110099ed1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Array.js @@ -0,0 +1,262 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Helper functions for arrays. + * + * The native JavaScript Array is not modified by this class. However, + * there are modifications to the native Array in {@link qx.lang.Core} for + * browsers that do not support certain JavaScript 1.6 features natively . + * + * The additions implemented here may be added directly to native Array by + * a setting in {@link qx.lang.Prototypes}. This feature is not enabled by + * default. + * + * The string/array generics introduced in JavaScript 1.6 are supported by + * {@link qx.lang.Generics}. + */ +qx.OO.defineClass("qx.lang.Array"); + +/** + * Convert an arguments object into an array + * + * @param args {arguments} arguments object + * @return {Array} + */ +qx.lang.Array.fromArguments = function(args) { + return Array.prototype.slice.call(args, 0); +}; + + +/** + * Expand shorthand definition to a four element list. + * This is an utility function for padding/margin and all other shorthand handling. + * + * @param input {Array} array with one to four elements + * @return {Array} array with four elements + */ +qx.lang.Array.fromShortHand = function(input) +{ + var len = input.length; + + if (len > 4 || len == 0) { + this.error("Invalid number of arguments!"); + } + + var result = qx.lang.Array.copy(input); + + // Copy Values (according to the length) + switch(len) + { + case 1: + result[1] = result[2] = result[3] = result[0]; + break; + + case 2: + result[2] = result[0]; + // no break here + + case 3: + result[3] = result[1]; + } + + // Return list with 4 items + return result; +}; + + +/** + * Return a copy of the given array + * + * @param arr {Array} the array to copy + * @return {Array} copy of the array + */ +qx.lang.Array.copy = function(arr) { + return arr.concat(); +}; + + +/** + * Return a copy of the given array + * The same as {@link qx.lang.Array.copy} + * + * @param arr {Array} the array to copy + * @return {Array} copy of the array + */ +qx.lang.Array.clone = function(arr) { + return arr.concat(); +}; + + +/** + * Return the last element of an array + * + * @param arr {Array} the array + * @return {var} the last element of the array + */ +qx.lang.Array.getLast = function(arr) { + return arr[arr.length-1]; +}; + + +/** + * Return the first element of an array + * + * @param arr {Array} the array + * @return {var} the first element of the array + */ +qx.lang.Array.getFirst = function(arr) { + return arr[0]; +}; + + +/** + * Insert an element at a given position into the array + * + * @param arr {Array} the array + * @param obj {var} the element to insert + * @param i {Integer} position where to insert the element into the array + * @return {Array} the array + */ +qx.lang.Array.insertAt = function(arr, obj, i) +{ + arr.splice(i, 0, obj); + + return arr; +}; + + +/** + * Insert an element into the array before a given second element + * + * @param arr {Array} the array + * @param obj {var} object to be inserted + * @param obj2 {var} insert obj1 before this object + * @return {Array} the array + */ +qx.lang.Array.insertBefore = function(arr, obj, obj2) +{ + var i = arr.indexOf(obj2); + + if (i == -1) + { + arr.push(obj); + } + else + { + arr.splice(i, 0, obj); + } + + return arr; +}; + + +/** + * Insert an element into the array after a given second element + * + * @param arr {Array} the array + * @param obj {var} object to be inserted + * @param obj2 {var} insert obj1 after this object + * @return {Array} the array + */ +qx.lang.Array.insertAfter = function(arr, obj, obj2) +{ + var i = arr.indexOf(obj2); + + if (i == -1 || i == (arr.length-1)) + { + arr.push(obj); + } + else + { + arr.splice(i+1, 0, obj); + } + + return arr; +}; + + +/** + * Remove an element from the array at the given index + * + * @param arr {Array} the array + * @param i {Integer} index of the element to be removed + * @return {Array} the array with the element removed + */ +qx.lang.Array.removeAt = function(arr, i) { + return arr.splice(i, 1); +}; + + +/** + * Remmove all elements from the array + * + * @param arr {Array} the array + * @return {Array} empty array + */ +qx.lang.Array.removeAll = function(arr) { + return arr.splice(0, arr.length); +}; + + +/** + * Append the elements of an array to the array + * + * @param arr {Array} the array + * @param a {Array} the elements of this array will be appended to the array + */ +qx.lang.Array.append = function(arr, a) { + Array.prototype.push.apply(arr, a); +}; + + +/** + * Remove an element from the array + * + * @param arr {Array} the array + * @param obj {var} element to be removed from the array + * @return {Array} array with the element removed + */ +qx.lang.Array.remove = function(arr, obj) +{ + var i = arr.indexOf(obj); + + if (i != -1) { + return arr.splice(i, 1); + } +}; + + +/** + * Whether the array contains the given element + * + * @param arr {Array} the array + * @param obj {var} object to look for + * @return {Boolean} whether the array contains the element + */ +qx.lang.Array.contains = function(arr, obj) { + return arr.indexOf(obj) != -1; +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Core.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Core.js new file mode 100644 index 0000000000..e2e5fb0e88 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Core.js @@ -0,0 +1,430 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * The intention of this class is to add features to native JavaScript + * objects so that all browsers operate on a common JavaScript language level + * (particularly JavaScript 1.6). + * + * For reference: + * + * * http://www.ecma-international.org/publications/standards/Ecma-262.htm + * * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference + * * http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6 + * + * The following methods are added if they are not supported natively: + * + * * Error.toString() + * * Array.indexOf() + * * Array.lastIndexOf() + * * Array.forEach() + * * Array.filter() + * * Array.map() + * * Array.some() + * * Array.every() + * * String.quote() + */ +qx.OO.defineClass("qx.lang.Core"); + + +/* +--------------------------------------------------------------------------- + FEATURE EXTENSION OF NATIVE ERROR OBJECT +--------------------------------------------------------------------------- +*/ + +if (!Error.prototype.toString) +{ + /** + * Some browsers (e.g. Internet Explorer) do not support to stringify + * error objects like other browsers usually do. This feature is added to + * those browsers. + */ + Error.prototype.toString = function() { + return this.message; + }; +} + + + + + + + +/* +--------------------------------------------------------------------------- + FEATURE EXTENSION OF NATIVE ARRAY OBJECT +--------------------------------------------------------------------------- +*/ + +if (!Array.prototype.indexOf) +{ + /** + * Returns the first index at which a given element can be found in the array, + * or <code>-1</code> if it is not present. It compares <code>searchElement</code> to elements of the Array + * using strict equality (the same method used by the <code>===</code>, or + * triple-equals, operator). + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:indexOf + * + * @param searchElement {var} Element to locate in the array. + * @param fromIndex {Integer} The index at which to begin the search. Defaults to 0, i.e. the whole + * array will be searched. If the index is greater than or equal to the length of the array, + * <code>-1</code> is returned, i.e. the array will not be searched. If negative, it is taken as the + * offset from the end of the array. Note that even when the index is negative, the array is still + * searched from front to back. If the calculated index is less than 0, the whole array will be searched. + */ + Array.prototype.indexOf = function(searchElement, fromIndex) + { + if (fromIndex == null) + { + fromIndex = 0; + } + else if (fromIndex < 0) + { + fromIndex = Math.max(0, this.length + fromIndex); + } + + for (var i=fromIndex; i<this.length; i++) + { + if (this[i] === searchElement) { + return i; + } + } + + return -1; + }; +} + +if (!Array.prototype.lastIndexOf) +{ + /** + * Returns the last index at which a given element can be found in the array, or <code>-1</code> + * if it is not present. The array is searched backwards, starting at <code>fromIndex</code>. + * It compares <code>searchElement</code> to elements of the Array using strict equality + * (the same method used by the <code>===</code>, or triple-equals, operator). + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:lastIndexOf + * + * @param searchElement {var} Element to locate in the array. + * @param fromIndex {Integer} The index at which to start searching backwards. + * Defaults to the array's length, i.e. the whole array will be searched. If + * the index is greater than or equal to the length of the array, the whole array + * will be searched. If negative, it is taken as the offset from the end of the + * array. Note that even when the index is negative, the array is still searched + * from back to front. If the calculated index is less than 0, -1 is returned, + * i.e. the array will not be searched. + */ + Array.prototype.lastIndexOf = function(searchElement, fromIndex) + { + if (fromIndex == null) + { + fromIndex = this.length-1; + } + else if (fromIndex < 0) + { + fromIndex = Math.max(0, this.length + fromIndex); + } + + for (var i=fromIndex; i>=0; i--) + { + if (this[i] === searchElement) { + return i; + } + } + + return -1; + }; +} + +if (!Array.prototype.forEach) +{ + /** + * Executes a provided function once per array element. + * + * <code>forEach</code> executes the provided function (<code>callback</code>) once for each + * element present in the array. <code>callback</code> is invoked only for indexes of the array + * which have assigned values; it is not invoked for indexes which have been deleted or which + * have never been assigned values. + * + * <code>callback</code> is invoked with three arguments: the value of the element, the index + * of the element, and the Array object being traversed. + * + * If a <code>obj</code> parameter is provided to <code>forEach</code>, it will be used + * as the <code>this</code> for each invocation of the <code>callback</code>. If it is not + * provided, or is <code>null</code>, the global object associated with <code>callback</code> + * is used instead. + * + * <code>forEach</code> does not mutate the array on which it is called. + * + * The range of elements processed by <code>forEach</code> is set before the first invocation of + * <code>callback</code>. Elements which are appended to the array after the call to + * <code>forEach</code> begins will not be visited by <code>callback</code>. If existing elements + * of the array are changed, or deleted, their value as passed to <code>callback</code> will be + * the value at the time <code>forEach</code> visits them; elements that are deleted are not visited. + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:forEach + * + * @param callback {Function} Function to execute for each element. + * @param obj {Object} Object to use as this when executing callback. + */ + Array.prototype.forEach = function(callback, obj) + { + // The array length should be fixed, like in the native implementation. + var l = this.length; + + for (var i=0; i<l; i++) { + callback.call(obj, this[i], i, this); + } + }; +} + +if (!Array.prototype.filter) +{ + /** + * Creates a new array with all elements that pass the test implemented by the provided + * function. + * + * <code>filter</code> calls a provided <code>callback</code> function once for each + * element in an array, and constructs a new array of all the values for which + * <code>callback</code> returns a true value. <code>callback</code> is invoked only + * for indexes of the array which have assigned values; it is not invoked for indexes + * which have been deleted or which have never been assigned values. Array elements which + * do not pass the <code>callback</code> test are simply skipped, and are not included + * in the new array. + * + * <code>callback</code> is invoked with three arguments: the value of the element, the + * index of the element, and the Array object being traversed. + * + * If a <code>obj</code> parameter is provided to <code>filter</code>, it will + * be used as the <code>this</code> for each invocation of the <code>callback</code>. + * If it is not provided, or is <code>null</code>, the global object associated with + * <code>callback</code> is used instead. + * + * <code>filter</code> does not mutate the array on which it is called. The range of + * elements processed by <code>filter</code> is set before the first invocation of + * <code>callback</code>. Elements which are appended to the array after the call to + * <code>filter</code> begins will not be visited by <code>callback</code>. If existing + * elements of the array are changed, or deleted, their value as passed to <code>callback</code> + * will be the value at the time <code>filter</code> visits them; elements that are deleted + * are not visited. + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:filter + * + * @param callback {Function} Function to test each element of the array. + * @param obj {Object} Object to use as <code>this</code> when executing <code>callback</code>. + */ + Array.prototype.filter = function(callback, obj) + { + // The array length should be fixed, like in the native implementation. + var l = this.length; + var res = []; + + for (var i=0; i<l; i++) + { + if (callback.call(obj, this[i], i, this)) { + res.push(this[i]); + } + } + + return res; + }; +} + +if (!Array.prototype.map) +{ + /** + * Creates a new array with the results of calling a provided function on every element in this array. + * + * <code>map</code> calls a provided <code>callback</code> function once for each element in an array, + * in order, and constructs a new array from the results. <code>callback</code> is invoked only for + * indexes of the array which have assigned values; it is not invoked for indexes which have been + * deleted or which have never been assigned values. + * + * <code>callback</code> is invoked with three arguments: the value of the element, the index of the + * element, and the Array object being traversed. + * + * If a <code>obj</code> parameter is provided to <code>map</code>, it will be used as the + * <code>this</code> for each invocation of the <code>callback</code>. If it is not provided, or is + * <code>null</code>, the global object associated with <code>callback</code> is used instead. + * + * <code>map</code> does not mutate the array on which it is called. + * + * The range of elements processed by <code>map</code> is set before the first invocation of + * <code>callback</code>. Elements which are appended to the array after the call to <code>map</code> + * begins will not be visited by <code>callback</code>. If existing elements of the array are changed, + * or deleted, their value as passed to <code>callback</code> will be the value at the time + * <code>map</code> visits them; elements that are deleted are not visited. + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:map + * + * @param callback {Function} Function produce an element of the new Array from an element of the current one. + * @param obj {Object} Object to use as <code>this</code> when executing <code>callback</code>. + */ + Array.prototype.map = function(callback, obj) + { + // The array length should be fixed, like in the native implementation. + var l = this.length; + var res = []; + + for (var i=0; i<l; i++) { + res.push(callback.call(obj, this[i], i, this)); + } + + return res; + }; +} + +if (!Array.prototype.some) +{ + /** + * Tests whether some element in the array passes the test implemented by the provided function. + * + * <code>some</code> executes the <code>callback</code> function once for each element present in + * the array until it finds one where <code>callback</code> returns a true value. If such an element + * is found, <code>some</code> immediately returns <code>true</code>. Otherwise, <code>some</code> + * returns <code>false</code>. <code>callback</code> is invoked only for indexes of the array which + * have assigned values; it is not invoked for indexes which have been deleted or which have never + * been assigned values. + * + * <code>callback</code> is invoked with three arguments: the value of the element, the index of the + * element, and the Array object being traversed. + * + * If a <code>obj</code> parameter is provided to <code>some</code>, it will be used as the + * <code>this</code> for each invocation of the <code>callback</code>. If it is not provided, or is + * <code>null</code>, the global object associated with <code>callback</code> is used instead. + * + * <code>some</code> does not mutate the array on which it is called. + * + * The range of elements processed by <code>some</code> is set before the first invocation of + * <code>callback</code>. Elements that are appended to the array after the call to <code>some</code> + * begins will not be visited by <code>callback</code>. If an existing, unvisited element of the array + * is changed by <code>callback</code>, its value passed to the visiting <code>callback</code> will + * be the value at the time that <code>some</code> visits that element's index; elements that are + * deleted are not visited. + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:some + * + * @param callback {Function} Function to test for each element. + * @param obj {Object} Object to use as <code>this</code> when executing <code>callback</code>. + */ + Array.prototype.some = function(callback, obj) + { + // The array length should be fixed, like in the native implementation. + var l = this.length; + + for (var i=0; i<l; i++) + { + if (callback.call(obj, this[i], i, this)) { + return true; + } + } + + return false; + }; +} + +if (!Array.prototype.every) +{ + /** + * Tests whether all elements in the array pass the test implemented by the provided function. + * + * <code>every</code> executes the provided <code>callback</code> function once for each element + * present in the array until it finds one where <code>callback</code> returns a false value. If + * such an element is found, the <code>every</code> method immediately returns <code>false</code>. + * Otherwise, if <code>callback</code> returned a true value for all elements, <code>every</code> + * will return <code>true</code>. <code>callback</code> is invoked only for indexes of the array + * which have assigned values; it is not invoked for indexes which have been deleted or which have + * never been assigned values. + * + * <code>callback</code> is invoked with three arguments: the value of the element, the index of + * the element, and the Array object being traversed. + * + * If a <code>obj</code> parameter is provided to <code>every</code>, it will be used as + * the <code>this</code> for each invocation of the <code>callback</code>. If it is not provided, + * or is <code>null</code>, the global object associated with <code>callback</code> is used instead. + * + * <code>every</code> does not mutate the array on which it is called. The range of elements processed + * by <code>every</code> is set before the first invocation of <code>callback</code>. Elements which + * are appended to the array after the call to <code>every</code> begins will not be visited by + * <code>callback</code>. If existing elements of the array are changed, their value as passed + * to <code>callback</code> will be the value at the time <code>every</code> visits them; elements + * that are deleted are not visited. + * + * Natively supported in Gecko since version 1.8. + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:every + * + * @param callback {Function} Function to test for each element. + * @param obj {Object} Object to use as <code>this</code> when executing <code>callback</code>. + */ + Array.prototype.every = function (callback, obj) + { + // The array length should be fixed, like in the native implementation. + var l = this.length; + + for (var i=0; i<l; i++) + { + if (!callback.call(obj, this[i], i, this)) { + return false; + } + } + + return true; + }; +} + + + + + + + +/* +--------------------------------------------------------------------------- + FEATURE EXTENSION OF NATIVE STRING OBJECT +--------------------------------------------------------------------------- +*/ + +if (!String.prototype.quote) +{ + /** + * Surrounds the string with double quotes and escapes all double quotes + * and backslashes within the string. + * + * Note: Not part of ECMAScript Language Specification ECMA-262 + * 3rd edition (December 1999), but implemented by Gecko: + * http://lxr.mozilla.org/seamonkey/source/js/src/jsstr.c + */ + String.prototype.quote = function () { + return '"' + this.replace(/\\/g, "\\\\").replace(/\"/g, "\\\"") + '"'; + }; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Function.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Function.js new file mode 100644 index 0000000000..efeccbd592 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Function.js @@ -0,0 +1,126 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + + +/** + * Collection of helper methods operatinf on functions. + */ +qx.OO.defineClass("qx.lang.Function"); + + + + + +/* +--------------------------------------------------------------------------- + SIMPLE RETURN METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Simply return true. + * + * @return {Boolean} Always returns true. + */ +qx.lang.Function.returnTrue = function() { + return true; +}; + + +/** + * Simply return false. + * + * @return {Boolean} Always returns false. + */ + +qx.lang.Function.returnFalse = function() { + return false; +}; + + +/** + * Simply return null. + * + * @return {var} Always returns null. + */ + +qx.lang.Function.returnNull = function() { + return null; +}; + + +/** + * Return "this". + * + * @return {Object} Always returns "this". + */ +qx.lang.Function.returnThis = function() { + return this; +}; + + +/** + * Used to return a refernce to an singleton. Classes which should act as singletons can use this + * function to implement the "getInstance" methods. + * + * @returns {Object} Singleton instance of the class this method is bound to. + */ +qx.lang.Function.returnInstance = function() +{ + if (!this._instance) + { + this._instance = new this; + + /* + if (this._instance.debug) { + this._instance.debug("Created..."); + }*/ + } + + return this._instance; +}; + + +/** + * Simply return 0. + * + * @return {Number} Always returns 0. + */ + +qx.lang.Function.returnZero = function() { + return 0; +}; + + +/** + * Simply return a negative index (-1). + * + * @return {Number} Always returns -1. + */ + +qx.lang.Function.returnNegativeIndex = function() { + return -1; +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Generics.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Generics.js new file mode 100644 index 0000000000..df590dea9f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Generics.js @@ -0,0 +1,138 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#require(qx.lang.Core) + +************************************************************************ */ + +/** + * Support string/array generics as introduced with JavaScript 1.6 for + * all browsers. + * + * http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6#Array_and_String_generics + * + * *Array* + * + * * join + * * reverse + * * sort + * * push + * * pop + * * shift + * * unshift + * * splice + * * concat + * * slice + * * indexOf + * * lastIndexOf + * * forEach + * * map + * * filter + * * some + * * every + * + * *String* + * + * * quote + * * substring + * * toLowerCase + * * toUpperCase + * * charAt + * * charCodeAt + * * indexOf + * * lastIndexOf + * * toLocaleLowerCase + * * toLocaleUpperCase + * * localeCompare + * * match + * * search + * * replace + * * split + * * substr + * * concat + * * slice + */ +qx.OO.defineClass("qx.lang.Generics", +{ + map : + { + "Array" : [ + "join", "reverse", "sort", "push", "pop", "shift", "unshift", + "splice", "concat", "slice", "indexOf", "lastIndexOf", "forEach", + "map", "filter", "some", "every" + ], + + "String" : [ + "quote", "substring", "toLowerCase", "toUpperCase", "charAt", + "charCodeAt", "indexOf", "lastIndexOf", "toLocaleLowerCase", + "toLocaleUpperCase", "localeCompare", "match", "search", + "replace", "split", "substr", "concat", "slice" + ] + }, + + /** + * Make a method of an object generic and return the generic functions. + * The generic function takes as first parameter the object the method operates on. + * + * TODO: maybe mode this function to qx.lang.Function + * + * @param obj {Object} the object in which prototype the function is defined. + * @param func {String} name of the method to wrap. + * + * @return {Function} wrapped method. This function takes as first argument an + * instance of obj and as following arguments the arguments of the original method. + */ + _wrap : function(obj, func) + { + return function(s) { + return obj.prototype[func].apply(s, Array.prototype.slice.call(arguments, 1)); + } + }, + + /** + * Initialize all gernic function defined in JavaScript 1.6. + */ + init : function() + { + var map = qx.lang.Generics.map; + + + + for (var key in map) + { + var obj = window[key]; + var arr = map[key]; + + for (var i=0, l=arr.length; i<l; i++) + { + var func = arr[i]; + + if (!obj[func]) { + obj[func] = qx.lang.Generics._wrap(obj, func); + } + } + } + } +}); + +qx.lang.Generics.init(); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Number.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Number.js new file mode 100644 index 0000000000..b90fce337f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Number.js @@ -0,0 +1,89 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Helper functions for numbers. + * + * The native JavaScript Number is not modified by this class. + * + * The additions implemented here may be added directly to the native Number + * by a setting in {@link qx.lang.Prototypes}. This feature is not enabled by + * default. + */ +qx.OO.defineClass("qx.lang.Number"); + +/** + * Check whether the number is in a given range + * + * @param nr {Number} the number to check + * @param vmin {Integer} lower bound of the range + * @param vmax {Integer} upper bound of the range + * @return {Boolean} whether the number is >= vmin and <= vmax + */ +qx.lang.Number.isInRange = function(nr, vmin, vmax) { + return nr >= vmin && nr <= vmax; +}; + + +/** + * Check whether the number is between a given range + * + * @param nr {Number} the number to check + * @param vmin {Integer} lower bound of the range + * @param vmax {Integer} upper bound of the range + * @return {Boolean} whether the number is > vmin and < vmax + */ +qx.lang.Number.isBetweenRange = function(nr, vmin, vmax) { + return nr > vmin && nr < vmax; +}; + + +/** + * Limit the nuber to a given range + * + * * If the number is greater than the upper bound, the upper bound is returned + * * If the number is smaller than the lower bound, the lower bound is returned + * * If the number is in the range, the number is retuned + * + * @param nr {Number} the number to limit + * @param vmin {Integer} lower bound of the range + * @param vmax {Integer} upper bound of the range + * @return {Integer} the limited number + */ +qx.lang.Number.limit = function(nr, vmin, vmax) +{ + if (typeof vmax === "number" && nr > vmax) + { + return vmax; + } + else if (typeof vmin === "number" && nr < vmin) + { + return vmin; + } + else + { + return nr; + } +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Object.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Object.js new file mode 100644 index 0000000000..7b725b15ce --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Object.js @@ -0,0 +1,219 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Helper functions to handle Object as a Hash map. + */ +qx.OO.defineClass("qx.lang.Object"); + +/** + * Check if the hash has any keys + * + * @param map {Object} the map to check + * @return {Boolean} whether the map has any keys + */ +qx.Class.isEmpty = function(map) +{ + for (var s in map) { + return false; + } + + return true; +}; + + +/** + * Check whether the number of objects in the maps is at least "lenght" + * + * @param map {Object} the map to check + * @param length {Integer} minimum number of objects in the map + * @return {Boolean} whether the map contains at least "lenght" objects. + */ +qx.Class.hasMinLength = function(map, length) +{ + var i=0; + + for (var s in map) + { + if ((++i)>=length) { + return true; + } + } + + return false; +}; + + +/** + * Get the number of objects in the map + * + * @param map {Object} the map + * @return {Integer} number of objects in the map + */ +qx.Class.getLength = function(map) +{ + var i=0; + + for (var s in map) { + i++; + } + + return i; +}; + + +/** + * Get the keys of a map as array + * + * @param map {Object} the map + * @return {Array} array of the keys of the map + */ +qx.Class.getKeys = function(map) +{ + var r = []; + for (var s in map) { + r.push(s); + } + + return r; +}; + + +/** + * Get the keys of a map as string + * + * @param map {Object} the map + * @return {String} String of the keys of the map + * The keys are separated by ", " + */ +qx.Class.getKeysAsString = function(map) { + return qx.lang.Object.getKeys(map).join(", "); +}; + + +/** + * Get the values of a map as array + * + * @param map {Object} the map + * @return {Array} array of the values of the map + */ +qx.Class.getValues = function(map) +{ + var r = []; + for (var s in map) { + r.push(map[s]); + } + + return r; +}; + + +/** + * Merge two objects. + * + * If the Objects both have the same key, the value of the second object is taken. + * + * @param vObjectA {Object} target object + * @param vObjectB {Object} object to be merged + * @return {Object} ObjectA with merged values from ObjectB + */ +qx.Class.mergeWith = function(vObjectA, vObjectB) +{ + for (var vKey in vObjectB) { + vObjectA[vKey] = vObjectB[vKey]; + } + + return vObjectA; +}; + + +/** + * Merge two objects. Existing values will not be overwritten. + * + * If the Objects both have the same key, the value of the first object is taken. + * + * @param vObjectA {Object} target object + * @param vObjectB {Object} object to be merged + * @return {Object} vObjectA with merged values from vObjectB + */ +qx.Class.carefullyMergeWith = function(vObjectA, vObjectB) { + for (var vKey in vObjectB) + { + if (typeof vObjectA[vKey] === "undefined") { + vObjectA[vKey] = vObjectB[vKey]; + } + } + + return vObjectA; +}; + + +/** + * Merge a number of objects. + * + * @param vObjectA {Object} target object + * @param varargs {Object} variable number of objects to merged with vObjectA + * @return {Object} vObjectA with merged values from the other objects + */ +qx.Class.merge = function(vObjectA, varargs) +{ + var vLength = arguments.length; + + for (var i=1; i<vLength; i++) { + qx.lang.Object.mergeWith(vObjectA, arguments[i]); + } + + return vObjectA; +}; + + +/** + * Return a copy of an Object + * + * @param vObject {Object} Object to copy + * @return {Object} copy of vObject + */ +qx.Class.copy = function(vObject) { + return qx.lang.Object.mergeWith({}, vObject); +}; + + +/** + * Inverts a Map by exchanging the keys with the values. + * If the map has the same values for different keys, information will get lost. + * The values will be converted to Strings using the toString methos. + * + * @param vObject {Object} Map to invert + * @return {Object} inverted Map + */ +qx.Class.invert = function(vObject) { + var result = {}; + for (var key in vObject) { + var value = vObject[key].toString(); + result[value] = key; + } + return result; +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Prototypes.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Prototypes.js new file mode 100644 index 0000000000..c16c3aab52 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/Prototypes.js @@ -0,0 +1,91 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Extend the native JavaScript types Number, String and Array with the + * feature additions of {@link qx.lang.Number}, {@link qx.lang.String} and + * {@link qx.lang.Array}, respectively. + * + * Important: It is not recommended to modify the native types, as this + * may lead to incompatibilities with non-qooxdoo code or libraries. + * Therefore this feature is disabled by default (see default setting + * "enable"). All classes and features contributed to qooxdoo + * should work without this feature enabled! + */ +qx.OO.defineClass("qx.lang.Prototypes"); + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("enable", false); + + + + + +/* +--------------------------------------------------------------------------- + PROTOTYPES MAPPER +--------------------------------------------------------------------------- +*/ + +/** + * Augment the prototype of the native JavaScript objects "String", + * "Number" and "Array" with the methods defined in the corresponding + * static classes. + * + * @see qx.lang.String + * @see qx.lang.Number + * @see qx.lang.Array + */ +qx.lang.Prototypes.init = function() +{ + var key, obj; + var objs = [ "String", "Number", "Array" ]; + + for (var i=0, len=objs.length; i<len; i++) + { + obj = objs[i]; + + for (key in qx.lang[obj]) + { + window[obj].prototype[key] = (function(key, obj) + { + return function() { + return qx.lang[obj][key].apply(null, Array.prototype.concat.call([this], Array.prototype.slice.call(arguments, 0))); + } + })(key, obj); + } + } +} + +if (qx.Settings.getValueOfClass("qx.lang.Prototypes", "enable")) { + qx.lang.Prototypes.init(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/String.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/String.js new file mode 100644 index 0000000000..c2e9e8872d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/lang/String.js @@ -0,0 +1,279 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * String helper functions + * + * The native JavaScript String is not modified by this class. However, + * there are modifications to the native String in {@link qx.lang.Core} for + * browsers that do not support certain features. + * + * The additions implemented here may be added directly to native String by + * a setting in {@link qx.lang.Prototypes}. This feature is not enabled by + * default. + * + * The string/array generics introduced in JavaScript 1.6 are supported by + * {@link qx.lang.Generics}. + */ +qx.OO.defineClass("qx.lang.String"); + + +/** + * converts a string seperated by '-' to camel case. + * Example: + * <pre>qx.lang.String.toCamelCase("to-camel-case") == "toCamelCase"</pre> + * + * @param str {String} string seperated by '-' + * @return {String} camel case string + */ +qx.Class.toCamelCase = function(str) +{ + var vArr = str.split("-"), vLength = vArr.length; + + if(vLength == 1) { + return vArr[0]; + } + + var vNew = str.indexOf("-") == 0 ? vArr[0].charAt(0).toUpperCase() + vArr[0].substring(1) : vArr[0]; + + for (var vPart, i=1; i<vLength; i++) + { + vPart = vArr[i]; + vNew += vPart.charAt(0).toUpperCase() + vPart.substring(1); + } + + return vNew; +}; + + +/** + * removes white space from the left side of a string + * + * @param str {String} the string to trim + * @return {String} + */ +qx.Class.trimLeft = function(str) { + return str.replace(/^\s+/, ""); +}; + + +/** + * removes white space from the right side of a string + * + * @param str {String} the string to trim + * @return {String} + */ +qx.Class.trimRight = function(str) { + return str.replace(/\s+$/, ""); +}; + + +/** + * removes white space from the left and the right side of a string + * + * @param str {String} the string to trim + * @return {String} + */ +qx.Class.trim = function(str) { + return str.replace(/^\s+|\s+$/g, ""); +}; + + +/** + * Check whether the string starts with the given substring + * + * @param fullstr {String} the string to search in + * @param substr {String} the substring to look for + * @return {Boolean} whether the string starts with the given substring + */ +qx.Class.startsWith = function(fullstr, substr) { + return !fullstr.indexOf(substr); +}; + + +/** + * Check whether the string ends with the given substring + * + * @param fullstr {String} the string to search in + * @param substr {String} the substring to look for + * @return {Boolean} whether the string ends with the given substring + */ +qx.Class.endsWith = function(fullstr, substr) { + return fullstr.lastIndexOf(substr) === fullstr.length-substr.length; +}; + + +/** + * Pad a string up to a given length. Padding characters are added to the left of the string. + * + * @param str {String} the string to pad + * @param length {Integer} the final length of the string + * @param ch {String?"0"} character used to fill up the string + * @return {String} paddded string + */ +qx.Class.pad = function(str, length, ch) +{ + if (typeof ch === "undefined") { + ch = "0"; + } + + var temp = ""; + + for (var i=str.length; i<length; i++) { + temp += ch; + } + + return temp + str; +}; + + +/** + * Convert the first character of the string to upper case. + * + * @param str {String} the string + * @return {String} the string with a upper case first character + */ +qx.Class.toFirstUp = function(str) { + return str.charAt(0).toUpperCase() + str.substr(1); +}; + + +/** + * Add a list item to a serialized list string + * Example: + * <pre>qx.lang.String.addListItem("red, yellow, green", "blue", ", ") == "red, yellow, green, blue"</pre> + * + * @param str {String} serialized list. The items are seperated by "sep" + * @param item {String} list item to be added + * @param sep {String?","} separator + * @return {String} the string with the added item + */ +qx.Class.addListItem = function(str, item, sep) +{ + if (str == item || str == "") + { + return item; + } + + if (sep == null) { + sep = ","; + } + + var a = str.split(sep); + + if (a.indexOf(item) == -1) + { + a.push(item); + return a.join(sep); + } + else + { + return str; + } + +}; + + +/** + * Remove a list item from a serialized list string + * Example: + * <pre>qx.lang.String.removeListItem("red, yellow, green", "yellow", ", ") == "red, green, blue"</pre> + * + * @param str {String} serialized list. The items are seperated by "sep" + * @param item {String} list item to be removed + * @param sep {String?","} separator + * @return {String} the string with the removed item + */ +qx.Class.removeListItem = function(str, item, sep) +{ + if (str == item || str == "") + { + return ""; + } + else + { + if (sep == null) { + sep = ","; + } + + var a = str.split(sep); + var p = a.indexOf(item); + + if (p === -1) { + return str; + } + + do { a.splice(p, 1); } + while((p = a.indexOf(item)) != -1); + + return a.join(sep); + } +}; + + +/** + * Check whether the string contains a given substring + * + * @param str {String} the string + * @param substring {String} substring to search for + * @return {Boolean} whether the string contains the substring + */ +qx.Class.contains = function(str, substring) { + return str.indexOf(substring) != -1; +}; + + +/** + * Print a list of arguments using a format string + * In the format string occurences of %n are replaced by the n'th element of the args list. + * Example: + * <pre>qx.lang.String.format("Hello %1, my name is %2", ["Egon", "Franz"]) == "Hello Egon, my name is Franz"</pre> + * + * @param pattern {String} format string + * @param args {Array} array of arguments to insert into the format string + * @return {String} + */ +qx.Class.format = function(pattern, args) +{ + var str = pattern; + + for (var i=0; i<args.length; i++) { + str = str.replace(new RegExp("%" + (i+1), "g"), args[i]); + } + + return str; +}; + + +/** + * Escapes all chars that have a special meaning in regular expressions + * + * @param str {String} the string where to escape the chars. + * @return {String} the string with the escaped chars. + */ +qx.Class.escapeRegexpChars = function(str) { + return str.replace(/([\\\.\(\)\[\]\{\}\^\$\?\+\*])/g, "\\$1"); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Date.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Date.js new file mode 100644 index 0000000000..7383bd5a17 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Date.js @@ -0,0 +1,429 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/** + * Create a new instance of qx.nls.Date + */ +qx.OO.defineClass("qx.locale.Date"); + + +/** + * Get AM marker for time definitions + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} translated AM marker. + */ +qx.Class.getAmMarker = function(locale) { + return new qx.locale.LocalizedString("cldr_am", [], locale); +}; + + +/** + * Get PM marker for time definitions + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} translated PM marker. + */ +qx.Class.getPmMarker = function(locale) { + return new qx.locale.LocalizedString("cldr_pm", [], locale); +}; + + +/** + * Return localized names of day names + * + * @param length {String} format of the day names. + * Possible values: "abbreviated", "narrow", "wide" + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString[]} array of localized day names starting with sunday. + */ +qx.Class.getDayNames = function(length, locale) { + if ( + length != "abbreviated" && + length != "narrow" && + length != "wide" + ) { + throw new Error('format must be one of "abbreviated", "narrow", "wide"'); + } + var days = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]; + var names = []; + for (var i=0; i<days.length; i++) { + var key = "cldr_day_" + length + "_" + days[i]; + names.push(new qx.locale.LocalizedString(key, [], locale)); + } + return names; +}; + + +/** + * Return localized name of a week day name + * + * @param length {String} format of the day name. + * Possible values: "abbreviated", "narrow", "wide" + * @param day {Integer} day number. 0=sunday, 1=monday, ... + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} localized day name + */ +qx.Class.getDayName = function(length, day, locale) { + if ( + length != "abbreviated" && + length != "narrow" && + length != "wide" + ) { + throw new Error('format must be one of "abbreviated", "narrow", "wide"'); + } + var days = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]; + var key = "cldr_day_" + length + "_" + days[day]; + return new qx.locale.LocalizedString(key, [], locale); +}; + + +/** + * Return localized names of month names + * + * @param length {String} format of the month names. + * Possible values: "abbreviated", "narrow", "wide" + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString[]} array of localized month names starting with january. + */ +qx.Class.getMonthNames = function(length, locale) { + if ( + length != "abbreviated" && + length != "narrow" && + length != "wide" + ) { + throw new Error('format must be one of "abbreviated", "narrow", "wide"'); + } + var names = []; + for (var i=0; i<12; i++) { + var key = "cldr_month_" + length + "_" + (i+1); + names.push(new qx.locale.LocalizedString(key, [], locale)); + } + return names; +}; + + +/** + * Return localized name of a month + * + * @param length {String} format of the month names. + * Possible values: "abbreviated", "narrow", "wide" + * @param month {Integer} index of the month. 0=january, 1=februrary, ... + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} localized month name + */ +qx.Class.getMonthName = function(length, month, locale) { + if ( + length != "abbreviated" && + length != "narrow" && + length != "wide" + ) { + throw new Error('format must be one of "abbreviated", "narrow", "wide"'); + } + var key = "cldr_month_" + length + "_" + (month+1); + return new qx.locale.LocalizedString(key, [], locale); +}; + + +/** + * Return localized date format string to be used with @{link qx.util.format.DateFormat}. + * + * @param size {String} format of the date format. + * Possible values: "short", "medium", "long", "full" + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} localized date format string + */ +qx.Class.getDateFormat = function(size, locale) { + if ( + size != "short" && + size != "medium" && + size != "long" && + size != "full" + ) { + throw new Error('format must be one of "short", "medium", "long", "full"'); + } + var key = "cldr_date_format_" + size; + return new qx.locale.LocalizedString(key, [], locale) +}; + + +/** + * Try to localize a date/time format string. + * + * If now localization is availible take the fallback format string + * + * @param canonical {String} format string containing only field information, and in a canonical order. + * Examples are "yyyyMMMM" for year + full month, or "MMMd" for abbreviated month + day. + * @param fallback {String} fallback format string if no localized version is found + * @param locale {String} optional locale to be used + * @return {String} best matching format string + */ +qx.Class.getDateTimeFormat = function(canonical, fallback, locale) { + var key = "cldr_date_time_format_" + canonical; + var localizedFormat = qx.locale.Manager.getInstance().translate(key, [], locale); + if (localizedFormat == key) { + localizedFormat = fallback; + } + return localizedFormat; +}; + + +/** + * Return localized time format string to be used with {@link qx.util.format.DateFormat}. + * + * @param size {String} format of the time pattern. + * Possible values: "short", "medium", "long", "full" + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} localized time format string + */ +qx.Class.getTimeFormat = function(size, locale) { + if ( + size != "short" && + size != "medium" && + size != "long" && + size != "full" + ) { + throw new Error('format must be one of "short", "medium", "long", "full"'); + } + switch (size) { + case "short": + case "medium": + return qx.locale.Date.getDateTimeFormat("HHmm", "HH:mm"); + + case "long": + return qx.locale.Date.getDateTimeFormat("HHmmss", "HH:mm:ss"); + + case "full": + return qx.locale.Date.getDateTimeFormat("HHmmsszz", "HH:mm:ss zz"); + + default: + throw new Error("This case should never happen."); + } +}; + + +/** + * Return the day the week starts with + * + * Reference: Common Locale Data Repository (cldr) supplementalData.xml + * + * @param locale {String} optional locale to be used + * @return {Integer} index of the first day of the week. 0=sunday, 1=monday, ... + */ +qx.Class.getWeekStart = function(locale) { + var weekStart = { + // default is monday + + "MV": 5, // friday + + "AE": 6, // saturday + "AF": 6, + "BH": 6, + "DJ": 6, + "DZ": 6, + "EG": 6, + "ER": 6, + "ET": 6, + "IQ": 6, + "IR": 6, + "JO": 6, + "KE": 6, + "KW": 6, + "LB": 6, + "LY": 6, + "MA": 6, + "OM": 6, + "QA": 6, + "SA": 6, + "SD": 6, + "SO": 6, + "TN": 6, + "YE": 6, + + "AS": 0, // sunday + "AU": 0, + "AZ": 0, + "BW": 0, + "CA": 0, + "CN": 0, + "FO": 0, + "GE": 0, + "GL": 0, + "GU": 0, + "HK": 0, + "IE": 0, + "IL": 0, + "IS": 0, + "JM": 0, + "JP": 0, + "KG": 0, + "KR": 0, + "LA": 0, + "MH": 0, + "MN": 0, + "MO": 0, + "MP": 0, + "MT": 0, + "NZ": 0, + "PH": 0, + "PK": 0, + "SG": 0, + "TH": 0, + "TT": 0, + "TW": 0, + "UM": 0, + "US": 0, + "UZ": 0, + "VI": 0, + "ZA": 0, + "ZW": 0, + + "ET": 0, + "MW": 0, + "NG": 0, + "TJ": 0 + }; + var territory = qx.locale.Date._getTerritory(locale); + // default is monday + return weekStart[territory] != null ? weekStart[territory] : 1; +}; + + +/** + * Return the day the weekend starts with + * + * Reference: Common Locale Data Repository (cldr) supplementalData.xml + * + * @param locale {String} optional locale to be used + * @return {Integer} index of the first day of the weekend. 0=sunday, 1=monday, ... + */ +qx.Class.getWeekendStart = function(locale) { + var weekendStart = { + // default is saturday + + "EG": 5, // friday + "IL": 5, + "SY": 5, + + "IN": 0, // sunday + + "AE": 4, // thursday + "BH": 4, + "DZ": 4, + "IQ": 4, + "JO": 4, + "KW": 4, + "LB": 4, + "LY": 4, + "MA": 4, + "OM": 4, + "QA": 4, + "SA": 4, + "SD": 4, + "TN": 4, + "YE": 4 + }; + var territory = qx.locale.Date._getTerritory(locale); + // default is saturday + return weekendStart[territory] != null ? weekendStart[territory] : 6; +}; + + +/** + * Return the day the weekend ends with + * + * Reference: Common Locale Data Repository (cldr) supplementalData.xml + * + * @param locale {String} optional locale to be used + * @return {Integer} index of the last day of the weekend. 0=sunday, 1=monday, ... + */ +qx.Class.getWeekendEnd = function(locale) { + var weekendEnd = { + // default is sunday + + "AE": 5, // friday + "BH": 5, + "DZ": 5, + "IQ": 5, + "JO": 5, + "KW": 5, + "LB": 5, + "LY": 5, + "MA": 5, + "OM": 5, + "QA": 5, + "SA": 5, + "SD": 5, + "TN": 5, + "YE": 5, + "AF": 5, + "IR": 5, + + "EG": 6, // saturday + "IL": 6, + "SY": 6 + } + var territory = qx.locale.Date._getTerritory(locale); + // default is sunday + return weekendEnd[territory] != null ? weekendEnd[territory] : 0; +}; + + +/** + * Returns whether a certain day of week belongs to the week end. + * + * @param day {Integer} index of the day. 0=sunday, 1=monday, ... + * @param locale {String} optional locale to be used + * @return {Boolean} whether the given day is a weekend day + */ +qx.Class.isWeekend = function(day, locale) { + var weekendStart = qx.locale.Date.getWeekendStart(locale); + var weekendEnd = qx.locale.Date.getWeekendEnd(locale); + if (weekendEnd > weekendStart) { + return ( + (day >= weekendStart) && + (day <= weekendEnd) + ); + } else { + return ( + (day >= weekendStart) || + (day <= weekendEnd) + ); + } +}; + + +/** + * Extract the territory part from a locale + * + * @param locale {String} the locale + * @return {String} territory + */ +qx.Class._getTerritory = function(locale) { + if (locale) { + var territory = locale.split("_")[1] || locale; + } else { + territory = + qx.locale.Manager.getInstance().getTerritory() || + qx.locale.Manager.getInstance().getLanguage(); + }; + return territory.toUpperCase(); +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js new file mode 100644 index 0000000000..beabac08f3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js @@ -0,0 +1,116 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/** + * Create a new instance of qx.nls.Date + */ +qx.OO.defineClass("qx.locale.Key"); + + +/** + * Return localized name of a key identifier + * @{link qx.event.handler.KeyEventHandler} + * + * @param size {String} format of the key identifier. + * Possible values: "short", "full" + * @param keyIdentifier {String} key identifier to translate {@link qx.event.handler.KeyEventHandler} + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} localized key name + */ +qx.Class.getKeyName = function(size, keyIdentifier, locale) { + if ( + size != "short" && + size != "full" + ) { + throw new Error('format must be one of: "short", "full"'); + } + + var key = "key_" + size + "_" + keyIdentifier; + var localizedKey = new qx.locale.LocalizedString(key, [], locale); + if (localizedKey == key) { + return qx.locale.Key._keyNames[key] || keyIdentifier; + } else { + return localizedKey; + } +}; + + +( function() { + var keyNames = {}; + var Manager = qx.locale.Manager; + + // TRANSLATION: short representation of key names + keyNames[Manager.marktr("key_short_Backspace")] = "Backspace"; + keyNames[Manager.marktr("key_short_Tab")] = "Tab"; + keyNames[Manager.marktr("key_short_Space")] = "Space"; + keyNames[Manager.marktr("key_short_Enter")] = "Enter"; + keyNames[Manager.marktr("key_short_Shift")] = "Shift"; + keyNames[Manager.marktr("key_short_Control")] = "Ctrl"; + keyNames[Manager.marktr("key_short_Alt")] = "Alt"; + keyNames[Manager.marktr("key_short_CapsLock")] = "Caps"; + keyNames[Manager.marktr("key_short_Meta")] = "Meta"; + keyNames[Manager.marktr("key_short_Escape")] = "Esc"; + keyNames[Manager.marktr("key_short_Left")] = "Left"; + keyNames[Manager.marktr("key_short_Up")] = "Up"; + keyNames[Manager.marktr("key_short_Right")] = "Right"; + keyNames[Manager.marktr("key_short_Down")] = "Down"; + keyNames[Manager.marktr("key_short_PageUp")] = "PgUp"; + keyNames[Manager.marktr("key_short_PageDown")] = "PgDn"; + keyNames[Manager.marktr("key_short_End")] = "End"; + keyNames[Manager.marktr("key_short_Home")] = "Home"; + keyNames[Manager.marktr("key_short_Insert")] = "Ins"; + keyNames[Manager.marktr("key_short_Delete")] = "Del"; + keyNames[Manager.marktr("key_short_NumLock")] = "Num"; + keyNames[Manager.marktr("key_short_PrintScreen")] = "Print"; + keyNames[Manager.marktr("key_short_Scroll")] = "Scroll"; + keyNames[Manager.marktr("key_short_Pause")] = "Pause"; + keyNames[Manager.marktr("key_short_Win")] = "Win"; + keyNames[Manager.marktr("key_short_Apps")] = "Apps"; + + // TRANSLATION: full/long representation of key names + keyNames[Manager.marktr("key_full_Backspace")] = "Backspace"; + keyNames[Manager.marktr("key_full_Tab")] = "Tabulator"; + keyNames[Manager.marktr("key_full_Space")] = "Space"; + keyNames[Manager.marktr("key_full_Enter")] = "Enter"; + keyNames[Manager.marktr("key_full_Shift")] = "Shift"; + keyNames[Manager.marktr("key_full_Control")] = "Control"; + keyNames[Manager.marktr("key_full_Alt")] = "Alt"; + keyNames[Manager.marktr("key_full_CapsLock")] = "CapsLock"; + keyNames[Manager.marktr("key_full_Meta")] = "Meta"; + keyNames[Manager.marktr("key_full_Escape")] = "Escape"; + keyNames[Manager.marktr("key_full_Left")] = "Left"; + keyNames[Manager.marktr("key_full_Up")] = "Up"; + keyNames[Manager.marktr("key_full_Right")] = "Right"; + keyNames[Manager.marktr("key_full_Down")] = "Down"; + keyNames[Manager.marktr("key_full_PageUp")] = "PageUp"; + keyNames[Manager.marktr("key_full_PageDown")] = "PageDown"; + keyNames[Manager.marktr("key_full_End")] = "End"; + keyNames[Manager.marktr("key_full_Home")] = "Home"; + keyNames[Manager.marktr("key_full_Insert")] = "Insert"; + keyNames[Manager.marktr("key_full_Delete")] = "Delete"; + keyNames[Manager.marktr("key_full_NumLock")] = "NumLock"; + keyNames[Manager.marktr("key_full_PrintScreen")] = "PrintScreen"; + keyNames[Manager.marktr("key_full_Scroll")] = "Scroll"; + keyNames[Manager.marktr("key_full_Pause")] = "Pause"; + keyNames[Manager.marktr("key_full_Win")] = "Win"; + keyNames[Manager.marktr("key_full_Apps")] = "Apps"; + qx.Class._keyNames = keyNames; +}) ();
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/LocalizedString.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/LocalizedString.js new file mode 100644 index 0000000000..a1c350e624 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/LocalizedString.js @@ -0,0 +1,70 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/** + * Create a new instance of qx.locale.LocalizedString + * + * @see qx.lang.String.format + * + * @param messageId {String} message id (may contain format strings) + * @param args {Object[]} array of objects, which are inserted into the format string. + * @param locale {String} optional locale to be used for translation + */ +qx.OO.defineClass("qx.locale.LocalizedString", qx.core.Object, +function(messageId, args, locale) { + qx.core.Object.call(this); + + this.setId(messageId); + this._locale = locale; + + var storedArguments = []; + for (var i=0; i<args.length; i++) + { + var arg = args[i]; + if (arg instanceof qx.locale.LocalizedString) { + // defer conversion to string + storedArguments.push(arg); + } else { + // force conversion to string + storedArguments.push(arg + ""); + } + } + + this.setArgs(storedArguments); +}); + + +/** message id */ +qx.OO.addProperty({ name: "id"}); + +/** list of arguments to be applied to the format string */ +qx.OO.addProperty({ name: "args"}); + + +/** + * Return translation of the string using the current locale + * + * @return {String} translation using the current locale + */ +qx.Proto.toString = function () { + return qx.locale.Manager.getInstance().translate(this.getId(), this.getArgs(), this._locale); +}; + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Manager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Manager.js new file mode 100644 index 0000000000..0b30e9456f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Manager.js @@ -0,0 +1,261 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + + +/** + * Create a new instance of qx.locale.Manager + */ +qx.OO.defineClass("qx.locale.Manager", qx.manager.object.ObjectManager, +function() { + qx.manager.object.ObjectManager.call(this); + + this._translationCatalog = {}; + this.setLocale(qx.core.Client.getInstance().getLocale() || this._defaultLocale); +}); + + +/** current locale. locale is an language code like de, de_AT, en, en_GB, fr, ... */ +qx.OO.addProperty({ name: "locale"}); + +qx.Proto._defaultLocale = "C"; + + +/** + * Get the language code of the currnt locale + * + * This is the first part of a locale definition. The language for "de_DE" would be "de" + * + * @return {String} language code + */ +qx.Proto.getLanguage = function() { + return this._language; +}; + + +/** + * Get the territory code of the currnt locale + * + * This is the second part of a locale definition. The territory for "de_DE" would be "DE" + * + * @return {String} territory code + */ +qx.Proto.getTerritory = function() { + return this.getLocale().split("_")[1] || ""; +} + + +/** + * Return the available application locales + * + * This corresponds to the Makefile APPLICATION_LOCALES setting + * + * @return {String[]} array of available locales + */ +qx.Proto.getAvailableLocales = function() { + var locales = []; + for (var locale in this._translationCatalog) { + if (locale != this._defaultLocale) { + locales.push(locale); + } + } + return locales; +}; + + +/** + * Extract the language part from a locale. + * + * @param locale {String} locale to be used + * @return {String} language + */ +qx.Proto._extractLanguage = function(locale) { + var language; + var pos = locale.indexOf("_"); + if (pos == -1) { + language = locale; + } else { + language = locale.substring(0, pos); + } + return language; +}; + + +qx.Proto._modifyLocale = function(propValue, propOldValue, propData) { + this._locale = propValue; + + var pos = propValue.indexOf("_"); + this._language = this._extractLanguage(propValue); + + return true; +}; + + +/** + * Add a translation to the translation manager + * + * @param languageCode {String} language code of the translation like de, de_AT, en, en_GB, fr, ... + * @param translationMap {Map} mapping of message identifiers (english text) to the target language + */ +qx.Proto.addTranslation = function(languageCode, translationMap) { + + if (this._translationCatalog[languageCode]) + { + for (var key in translationMap) { + this._translationCatalog[languageCode][key] = translationMap[key]; + } + } + else + { + this._translationCatalog[languageCode] = translationMap; + } +}; + + +/** + * Translate a message + * @see qx.lang.String.format + * + * @param messageId {String} message id (may contain format strings) + * @param varargs {Object} variable number of argumes applied to the format string + * @return {qx.locale.LocalizedString} + */ +qx.Class.tr = function(messageId, varargs) +{ + var args = qx.lang.Array.fromArguments(arguments); + args.splice(0, 1); + + return new qx.locale.LocalizedString(messageId, args); +}; + + +/** + * Translate a plural message + * + * Depending on the third argument the plursl or the singular form is chosen. + * + * @see qx.lang.String.format + * + * @param singularMessageId {String} message id of the singular form (may contain format strings) + * @param pluralMessageId {String} message id of the plural form (may contain format strings) + * @param count {Integer} if greater than 1 the plural form otherwhise the singular form is returned. + * @param varargs {Object} variable number of argumes applied to the format string + * @return {qx.locale.LocalizedString} + */ +qx.Class.trn = function(singularMessageId, pluralMessageId, count, varargs) +{ + var args = qx.lang.Array.fromArguments(arguments); + args.splice(0, 3); + + if (count > 1) + { + return new qx.locale.LocalizedString(pluralMessageId, args); + } + else + { + return new qx.locale.LocalizedString(singularMessageId, args); + } +}; + + +/** + * Translate a message with translation hint + * + * Depending on the third argument the plursl or the singular form is chosen. + * + * @see qx.lang.String.format + * + * @param hint {String} hint for the translator of the message. Will be included in the .pot file. + * @param messageId {String} message id (may contain format strings) + * @param varargs {Object} variable number of argumes applied to the format string + * @return {qx.locale.LocalizedString} + */ +qx.Class.trc = function(hint, messageId, varargs) +{ + var args = qx.lang.Array.fromArguments(arguments); + args.splice(0, 2); + + return new qx.locale.LocalizedString(messageId, args); +} + + +/** + * Mark the message for translation but return the original message. + * + * @param messageId {String} the message ID + * @return {String} messageId + */ +qx.Class.marktr = function(messageId) { + return messageId; +}; + + +/** + * Translate a message using the current locale and apply format string to the arguments. + * + * @param messageId {String} message id (may contain format strings) + * @param args {Object[]} array of objects, which are inserted into the format string. + * @param locale {String} optional locale to be used for translation + * @return {String} translated message. + */ +qx.Proto.translate = function(messageId, args, locale) +{ + var txt; + + if (locale) { + var language = this._extractLanguage(locale); + } else { + locale = this._locale; + language = this._language; + } + + if (!txt && this._translationCatalog[locale]) { + txt = this._translationCatalog[locale][messageId]; + } + + if (!txt && this._translationCatalog[language]) { + txt = this._translationCatalog[language][messageId]; + } + + if (!txt && this._translationCatalog[this._defaultLocale]) { + txt = this._translationCatalog[this._defaultLocale][messageId]; + } + + if (!txt) { + txt = messageId; + } + + if (args.length > 0) { + txt = qx.lang.String.format(txt, args) + } + return txt; +}; + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance;
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Number.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Number.js new file mode 100644 index 0000000000..09b3ed12fe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Number.js @@ -0,0 +1,58 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/** + * Create a new instance of qx.locale.Number + */ +qx.OO.defineClass("qx.locale.Number"); + + +/** + * Get deciaml separator for number formatting + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} deciaml separator. + */ +qx.Class.getDecimalSeparator = function(locale) { + return new qx.locale.LocalizedString("cldr_number_decimal_separator", [], locale); +}; + + +/** + * Get thousand grouping separator for number formatting + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} group separator. + */ +qx.Class.getGroupSeparator = function(locale) { + return new qx.locale.LocalizedString("cldr_number_group_separator", [], locale); +}; + + +/** + * Get percent format string + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} percent format string. + */ +qx.Class.getPercentFormat = function(locale) { + return new qx.locale.LocalizedString("cldr_number_percent_format", [], locale); +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/String.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/String.js new file mode 100644 index 0000000000..0c3725bd04 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/String.js @@ -0,0 +1,69 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/** + * Create a new instance of qx.locale.String + */ +qx.OO.defineClass("qx.locale.String"); + + +/** + * Get quotation start sign + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} quotation start sign + */ +qx.Class.getQuotationStart = function(locale) { + return new qx.locale.LocalizedString("cldr_quotationStart", [], locale); +}; + + +/** + * Get quotation end sign + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} quotation end sign + */ +qx.Class.getQuotationEnd = function(locale) { + return new qx.locale.LocalizedString("cldr_quotationEnd", [], locale); +}; + + +/** + * Get quotation alternative start sign + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} alternative quotation start sign + */ +qx.Class.getQuotationStart = function(locale) { + return new qx.locale.LocalizedString("cldr_alternateQuotationStart", [], locale); +}; + + +/** + * Get quotation alternative end sign + * + * @param locale {String} optional locale to be used + * @return {qx.locale.LocalizedString} alternative quotation end sign + */ +qx.Class.getQuotationEnd = function(locale) { + return new qx.locale.LocalizedString("cldr_alternateQuotationEnd", [], locale); +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/AlertAppender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/AlertAppender.js new file mode 100644 index 0000000000..4be7b9e9b5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/AlertAppender.js @@ -0,0 +1,67 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Andreas Ecker (ecker) + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that writes each message to a native alert(). + * <p> + * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + * <p> + * It allows to go through the log messages step-by-step, since the alert + * window temporarily halts the regular program execution. That way even + * the dispose process can easily be debugged. + */ +qx.OO.defineClass("qx.log.AlertAppender", qx.log.Appender, +function() { + qx.log.Appender.call(this); +}); + + +// overridden +qx.OO.changeProperty({ name:"useLongFormat", type:"boolean", defaultValue:false, allowNull:false }); + +// overridden +qx.Proto.appendLogEvent = function(evt) { + + // Append the message + var text = evt.logger.getName(); + if (evt.instanceId != null) { + text += " (" + evt.instanceId + ")"; + } + + alert("\n" + text + "\n" + this.formatLogEvent(evt)); +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.log.Appender.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Appender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Appender.js new file mode 100644 index 0000000000..5df3dd3f5e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Appender.js @@ -0,0 +1,183 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * An appender. Does the actual logging. + */ +qx.OO.defineClass("qx.log.Appender", qx.log.LogEventProcessor, +function() { + qx.log.LogEventProcessor.call(this); +}); + + +/** Whether the logger name and log level should be included in the formatted log message. */ +qx.OO.addProperty({ name:"useLongFormat", type:"boolean", defaultValue:true, allowNull:false }); + + +// overridden +qx.Proto.handleLogEvent = function(evt) { + if (this.decideLogEvent(evt) != qx.log.Filter.DENY) { + this.appendLogEvent(evt); + } +} + + +/** + * Appends a log event to the log. + * + * @param evt {Map} The event to append. + */ +qx.Proto.appendLogEvent = function(evt) { + throw new Error("appendLogEvent is abstract"); +} + + +/** + * Formats a log event. + * + * @param evt {Map} The log event to format. + * @return {String} The formatted event. + */ +qx.Proto.formatLogEvent = function(evt) { + var Logger = qx.log.Logger; + + var text = ""; + + // Append the time stamp + var time = new String(new Date().getTime() - qx._LOADSTART); + while (time.length < 6) { + time = "0" + time; + } + text += time; + + // Append the level + if (this.getUseLongFormat()) { + switch (evt.level) { + case Logger.LEVEL_DEBUG: text += " DEBUG: "; break; + case Logger.LEVEL_INFO: text += " INFO: "; break; + case Logger.LEVEL_WARN: text += " WARN: "; break; + case Logger.LEVEL_ERROR: text += " ERROR: "; break; + case Logger.LEVEL_FATAL: text += " FATAL: "; break; + } + } else { + text += ": "; + } + + // Append the indent + var indent = ""; + for (var i = 0; i < evt.indent; i++) { + indent += " "; + } + text += indent; + + // Append the logger name and instance + if (this.getUseLongFormat()) { + text += evt.logger.getName(); + if (evt.instanceId != null) { + text += "[" + evt.instanceId + "]"; + } + text += ": "; + } + + // Append the message + if (typeof evt.message == "string") { + text += evt.message; + } else { + // The message is an object -> Log a dump of the object + var obj = evt.message; + if (obj == null) { + text += "Object is null"; + } else { + text += "--- Object: " + obj + " ---\n"; + var attrArr = new Array(); + try { + for (var attr in obj) { + attrArr.push(attr); + } + } catch (exc) { + text += indent + " [not readable: " + exc + "]\n"; + } + attrArr.sort(); + for (var i = 0; i < attrArr.length; i++) { + try { + text += indent + " " + attrArr[i] + "=" + obj[attrArr[i]] + "\n"; + } + catch (exc) { + text += indent + " " + attrArr[i] + "=[not readable: " + exc + "]\n"; + } + } + text += indent + "--- End of object ---"; + } + } + + // Append the throwable + if (evt.throwable != null) { + var thr = evt.throwable; + + if (thr.name == null) { + text += ": " + thr; + } else { + text += ": " + thr.name; + } + if (thr.message != null) { + text += " - " + thr.message; + } + if (thr.number != null) { + text += " (#" + thr.number + ")"; + } + + if (thr.stack != null) { + text += "\n" + this._beautyStackTrace(thr.stack); + } + } + + return text; +} + + +/** + * Beautifies a stack trace. + * + * @param stack {String} the stack trace to beautify. + * @return {String} the beautified stack trace. + */ +qx.Proto._beautyStackTrace = function(stack) { + // e.g. "()@http://localhost:8080/webcomponent-test-SNAPSHOT/webcomponent/js/com/ptvag/webcomponent/common/log/Logger:253" + var lineRe = /@(.+):(\d+)$/gm; + var hit; + var out = ""; + var scriptDir = "/script/"; + while ((hit = lineRe.exec(stack)) != null) { + var url = hit[1]; + + var jsPos = url.indexOf(scriptDir); + var className = (jsPos == -1) ? url : url.substring(jsPos + scriptDir.length).replace(/\//g, "."); + + var lineNumber = hit[2]; + out += " at " + className + ":" + lineNumber + "\n"; + } + return out; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/DefaultFilter.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/DefaultFilter.js new file mode 100644 index 0000000000..47c18df4db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/DefaultFilter.js @@ -0,0 +1,59 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * The default filter. Has a minimum level and can be enabled or disabled. + */ +qx.OO.defineClass("qx.log.DefaultFilter", qx.log.Filter, +function() { + qx.log.Filter.call(this); +}); + + +/** + * Whether the filter should be enabled. If set to false all log events + * will be denied. + */ +qx.OO.addProperty({ name:"enabled", type:"boolean", defaultValue:true, allowNull:false, getAlias:"isEnabled" }); + +/** + * The minimum log level. If set only log messages with a level greater or equal + * to the set level will be accepted. + */ +qx.OO.addProperty({ name:"minLevel", type:"number", defaultValue:null }); + + +// overridden +qx.Proto.decide = function(evt) { + var Filter = qx.log.Filter; + if (! this.isEnabled()) { + return Filter.DENY; + } else if (this.getMinLevel() == null) { + return Filter.NEUTRAL; + } else { + return (evt.level >= this.getMinLevel()) ? Filter.ACCEPT : Filter.DENY; + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/DivAppender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/DivAppender.js new file mode 100644 index 0000000000..506cae32a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/DivAppender.js @@ -0,0 +1,166 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to a div element. + * + * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + * + * @param divId {String ? "qx_log"} the ID of the div element to write the + * messages to. + */ +qx.OO.defineClass("qx.log.DivAppender", qx.log.Appender, +function(divId) { + qx.log.Appender.call(this); + + this._divId = divId ? divId : "qx_log"; +}); + + +/** + * The maximum number of messages to show. If null the number of messages is not + * limited. + */ +qx.OO.addProperty({ name:"maxMessages", type:"number", defaultValue:500 }); + +// overridden +qx.OO.changeProperty({ name:"useLongFormat", type:"boolean", defaultValue:false, allowNull:false }); + +/** The CSS class name for the head div {containing the clear button}. */ +qx.OO.addProperty({ name:"headClassName", type:"string", defaultValue:"log-head" }); + +/** The CSS class name for the body div {containing the log messages}. */ +qx.OO.addProperty({ name:"bodyClassName", type:"string", defaultValue:"log-body" }); + +/** The CSS class name for a div showing the name of the current group. */ +qx.OO.addProperty({ name:"groupClassName", type:"string", defaultValue:"log-group" }); + +/** The CSS class name for a div showing a debug message. */ +qx.OO.addProperty({ name:"debugClassName", type:"string", defaultValue:"log-debug" }); + +/** The CSS class name for a div showing a info message. */ +qx.OO.addProperty({ name:"infoClassName", type:"string", defaultValue:"log-info" }); + +/** The CSS class name for a div showing a warn message. */ +qx.OO.addProperty({ name:"warnClassName", type:"string", defaultValue:"log-warn" }); + +/** The CSS class name for a div showing a error message. */ +qx.OO.addProperty({ name:"errorClassName", type:"string", defaultValue:"log-error" }); + + +/** + * Creates an onclick handler that clears a div element. This method is used to + * create a minimum closure. + * + * @param logElem {Element} the element to clear when the handler is called. + * @return {Function} the handler. + */ +qx.Proto._createClearButtonHandler = function(logElem) { + return function(evt) { + logElem.innerHTML = ""; + } +} + + +// overridden +qx.Proto.appendLogEvent = function(evt) { + var Logger = qx.log.Logger; + + // Initialize the log element if nessesary + if (this._logElem == null) { + var divElem = document.getElementById(this._divId); + if (divElem == null) { + throw new Error("Logging div with ID " + this._divId + " not found"); + } + divElem.innerHTML = '<div class="' + this.getHeadClassName() + '"><button>Clear</button></div>' + + '<div class="' + this.getBodyClassName() + '"></div>'; + + this._clearBt = divElem.firstChild.firstChild; + this._logElem = divElem.lastChild; + + this._clearBt.onclick = this._createClearButtonHandler(this._logElem); + } + + // Append the group when needed + var group = evt.logger.getName(); + if (evt.instanceId != null) { + group += "[" + evt.instanceId + "]"; + } + + if (group != this._lastGroup) { + var elem = document.createElement("div"); + elem.className = this.getGroupClassName(); + elem.innerHTML = group; + + this._logElem.appendChild(elem); + this._lastGroup = group; + } + + // Append the message + var elem = document.createElement("div"); + switch (evt.level) { + case Logger.LEVEL_DEBUG: elem.className = this.getDebugClassName(); break; + case Logger.LEVEL_INFO: elem.className = this.getInfoClassName(); break; + case Logger.LEVEL_WARN: elem.className = this.getWarnClassName(); break; + case Logger.LEVEL_ERROR: elem.className = this.getErrorClassName(); break; + } + elem.innerHTML = this.formatLogEvent(evt).replace(/&/g, "&") + .replace(/</g, "<").replace(/ /g, "  ").replace(/[\n]/g, "<br>"); + this._logElem.appendChild(elem); + + // Remove superflous messages + while (this._logElem.childNodes.length > this.getMaxMessages()) { + this._logElem.removeChild(this._logElem.firstChild); + + if (this._removedMessageCount == null) { + this._removedMessageCount = 1; + } else { + this._removedMessageCount++; + } + } + + if (this._removedMessageCount != null) { + this._logElem.firstChild.className = ""; + this._logElem.firstChild.innerHTML = "(" + this._removedMessageCount + + " messages removed)"; + } +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + if (this._clearBt) { + this._clearBt.onclick = null; + this._clearBt = null; + } + this._logElem = null; + + return qx.log.Appender.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Filter.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Filter.js new file mode 100644 index 0000000000..8cfc739307 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Filter.js @@ -0,0 +1,53 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * A filter for log events. + */ +qx.OO.defineClass("qx.log.Filter", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + +/** + * Decidies whether a log event is accepted. + * + * @param evt {Map} The event to check. + * @return {Integer} {@link #ACCEPT}, {@link #DENY} or {@link #NEUTRAL}. + */ +qx.Proto.decide = function(evt) { + throw new Error("decide is abstract"); +} + + +/** {int} Specifies that the log event is accepted. */ +qx.Class.ACCEPT = 1; + +/** {int} Specifies that the log event is denied. */ +qx.Class.DENY = 2; + +/** {int} Specifies that the filter is neutral to the log event. */ +qx.Class.NEUTRAL = 3; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/FireBugAppender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/FireBugAppender.js new file mode 100644 index 0000000000..6b27588303 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/FireBugAppender.js @@ -0,0 +1,74 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 David Perez + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * David Perez (david-perez) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to FireBug, a nice extension for debugging and developing under Firefox. + * <p> + * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + * </p> + */ +qx.OO.defineClass('qx.log.FireBugAppender', qx.log.Appender, function() { + qx.log.Appender.call(this); +}); + +qx.Proto.appendLogEvent = function(evt) +{ + if (typeof console != 'undefined') + { + var log = qx.log.Logger; + var msg = this.formatLogEvent(evt); + + switch (evt.level) + { + case log.LEVEL_DEBUG: + if (console.debug) { + console.debug(msg); + } + break; + case log.LEVEL_INFO: + if (console.info) { + console.info(msg); + } + break; + case log.LEVEL_WARN: + if (console.warn) { + console.warn(msg); + } + break; + default: + if (console.error) { + console.error(msg); + } + break; + } + // Force a stack dump, for helping locating the error + if (evt.level > log.LEVEL_WARN && (!evt.throwable || !evt.throwable.stack) && console.trace) + { + console.trace(); + } + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/ForwardAppender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/ForwardAppender.js new file mode 100644 index 0000000000..05cc183a38 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/ForwardAppender.js @@ -0,0 +1,43 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that forwards all log events to a log event processor. + * + * @param targetProcessor {LogEventProcessor} The log event processor Where to + * pass the log events. + */ +qx.OO.defineClass("qx.log.ForwardAppender", qx.log.Appender, +function(targetProcessor) { + qx.log.Appender.call(this); + + this._targetProcessor = targetProcessor; +}); + + +// overridden +qx.Proto.appendLogEvent = function(evt) { + this._targetProcessor.handleLogEvent(evt); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/LogEventProcessor.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/LogEventProcessor.js new file mode 100644 index 0000000000..a7ee918035 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/LogEventProcessor.js @@ -0,0 +1,143 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Processes log events. May be configured with filters in order to specify + * which log events should be processed. + */ +qx.OO.defineClass("qx.log.LogEventProcessor", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * Appends a filter to the filter chain. + * + * @param filter {Filter} The filter to append. + */ +qx.Proto.addFilter = function(filter) { + if (this._filterArr == null) { + this._filterArr = [] + } + this._filterArr.push(filter); +} + + +/** + * Clears the filter chain. + */ +qx.Proto.clearFilters = function() { + this._filterArr = null; +} + + +/** + * Returns the head filter from the chain. Returns null if there are no filters. + * + * @return {Filter} the head filter from the chain. + */ +qx.Proto.getHeadFilter = function() { + return (this._filterArr == null || this._filterArr.length == 0) ? null : this._filterArr[0]; +} + + +/** + * Returns the default filter from the chain. If the head filter is no default + * filter, the chain will be cleared and a default filter will be created. + * + * @return {Filter} the default filter. + */ +qx.Proto._getDefaultFilter = function() { + var headFilter = this.getHeadFilter(); + if (! (headFilter instanceof qx.log.DefaultFilter)) { + // The head filter of the appender is no DefaultFilter + // (or the appender has no filters at all) + // -> Create a default handler and append it + this.clearFilters(); + headFilter = new qx.log.DefaultFilter(); + this.addFilter(headFilter); + } + + return headFilter; +} + + +/** + * Sets whether event processing should be enabled. + * <p> + * Note: This will clear all custom filters. + * + * @param enabled {Boolean} whether event processing should be enabled. + */ +qx.Proto.setEnabled = function(enabled) { + this._getDefaultFilter().setEnabled(enabled); +} + + +/** + * Sets the min level an event must have in order to be processed. + * <p> + * Note: This will clear all custom filters. + * + * @param minLevel {Integer} the new min level. + */ +qx.Proto.setMinLevel = function(minLevel) { + this._getDefaultFilter().setMinLevel(minLevel); +} + + +/** + * Decides whether a log event is processed. + * + * @param evt {Map} the event to check. + * @return {Integer} {@link Filter#ACCEPT}, {@link Filter#DENY} or + * {@link Filter#NEUTRAL}. + */ +qx.Proto.decideLogEvent = function(evt) { + var NEUTRAL = qx.log.Filter.NEUTRAL; + + if (this._filterArr != null) { + for (var i = 0; i < this._filterArr.length; i++) { + var decision = this._filterArr[i].decide(evt); + if (decision != NEUTRAL) { + return decision; + } + } + } + + // All filters are neutral, so are we + return NEUTRAL; +} + + +/** + * Processes a log event. + * + * @param evt {Map} The log event to process. + */ +qx.Proto.handleLogEvent = function(evt) { + throw new Error("handleLogEvent is abstract"); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Logger.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Logger.js new file mode 100644 index 0000000000..8f16559191 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/Logger.js @@ -0,0 +1,382 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) +#require(qx.log.WindowAppender) +#require(qx.log.FireBugAppender) +* +************************************************************************ */ + +/** + * A logger. Logs messages of one log category. + * + * @param name {String} The category name of this logger. (Normally a class or + * package name) + * @param parentLogger {Logger} The parent logger. + */ +qx.OO.defineClass("qx.log.Logger", qx.log.LogEventProcessor, +function(name, parentLogger) { + qx.log.LogEventProcessor.call(this); + + this._name = name; + this._parentLogger = parentLogger; +}); + + +/** + * Returns the name of this logger. (Normally a class or package name) + * + * @return {String} the name. + */ +qx.Proto.getName = function() { + return this._name; +} + + +/** + * Returns the parent logger. + * + * @return {Logger} the parent logger. + */ +qx.Proto.getParentLogger = function() { + return this._parentLogger; +} + + +/** + * Indents all following log messages by one. + * <p> + * This affects all log messages. Even those of other loggers. + */ +qx.Proto.indent = function() { + qx.log.Logger._indent++; +} + + +/** + * Unindents all following log messages by one. + * <p> + * This affects all log messages. Even those of other loggers. + */ +qx.Proto.unindent = function() { + qx.log.Logger._indent--; +} + + +/** + * Adds an appender. + * <p> + * If a logger has an appender, log events will not be passed to the + * appenders of parent loggers. If you want this behaviour, also append a + * {@link ForwardAppender}. + * + * @param appender {Appender} the appender to add. + */ +qx.Proto.addAppender = function(appender) { + if (this._appenderArr == null) { + this._appenderArr = []; + } + + this._appenderArr.push(appender); +} + + +/** + * Removes an appender. + * + * @param appender {Appender} the appender to remove. + */ +qx.Proto.removeAppender = function(appender) { + if (this._appenderArr != null) { + this._appenderArr.remove(appender); + } +} + + +/** + * Removes all appenders. + */ +qx.Proto.removeAllAppenders = function() { + this._appenderArr = null; +} + + +// overridden +qx.Proto.handleLogEvent = function(evt) { + var Filter = qx.log.Filter; + + var decision = Filter.NEUTRAL; + var logger = this; + while (decision == Filter.NEUTRAL && logger != null) { + decision = logger.decideLogEvent(evt); + logger = logger.getParentLogger(); + } + + if (decision != Filter.DENY) { + this.appendLogEvent(evt); + } +} + + +/** + * Passes a log event to the appenders. If the logger has no appenders the + * event will be passed to the appenders of the parent logger, and so on. + * + * @param evt {Map} The event to append. + */ +qx.Proto.appendLogEvent = function(evt) { + if (this._appenderArr != null && this._appenderArr.length != 0) { + for (var i = 0; i < this._appenderArr.length; i++) { + this._appenderArr[i].handleLogEvent(evt); + } + } else if (this._parentLogger != null) { + this._parentLogger.appendLogEvent(evt); + } +} + + +/** + * Logs a message. + * + * @param level {Integer} the log level. + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.log = function(level, msg, instanceId, exc) { + var evt = { logger:this, level:level, message:msg, throwable:exc, + indent:qx.log.Logger._indent, instanceId:instanceId } + this.handleLogEvent(evt); +} + + +/** + * Logs a debug message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.debug = function(msg, instanceId, exc) { + this.log(qx.log.Logger.LEVEL_DEBUG, msg, instanceId, exc); +} + + +/** + * Logs an info message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.info = function(msg, instanceId, exc) { + this.log(qx.log.Logger.LEVEL_INFO, msg, instanceId, exc); +} + + +/** + * Logs a warning message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.warn = function(msg, instanceId, exc) { + this.log(qx.log.Logger.LEVEL_WARN, msg, instanceId, exc); +} + + +/** + * Logs an error message. + * + * @param msg {var} the message to log. If this is not a string, the + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.error = function(msg, instanceId, exc) { + this.log(qx.log.Logger.LEVEL_ERROR, msg, instanceId, exc); +} + + +/** + * Logs a fatal message. + * + * @param msg {var} the message to log. If this is not a string, its + * object dump will be logged. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.fatal = function(msg, instanceId, exc) { + this.log(qx.log.Logger.LEVEL_FATAL, msg, instanceId, exc); +} + + +/** + * Resets the measure timer. + * + * @see #measure() + */ +qx.Proto.measureReset = function() { + if (this._totalMeasureTime != null) { + this.debug("Measure reset. Total measure time: " + this._totalMeasureTime + " ms"); + } + + this._lastMeasureTime = null; + this._totalMeasureTime = null; +} + + +/** + * Logs a debug message and measures the time since the last call of measure. + * + * @param msg {String} the message to log. + * @param instanceId {var ? null} the ID of the instance the log message comes from. + * @param exc {var ? null} the exception to log. + */ +qx.Proto.measure = function(msg, instanceId, exc) { + if (this._lastMeasureTime == null) { + msg = "(measure start) " + msg; + } else { + var delta = new Date().getTime() - this._lastMeasureTime; + + if (this._totalMeasureTime == null) { + this._totalMeasureTime = 0; + } + + this._totalMeasureTime += delta; + msg = "(passed time: " + delta + " ms) " + msg; + } + + this.debug(msg, instanceId, exc); + + this._lastMeasureTime = new Date().getTime(); +} + + +/** + * Logs the current stack trace as a debug message. + */ +qx.Proto.printStackTrace = function() { + try { + forced_exception.go; + } catch (exc) { + this.debug("Current stack trace", "", exc); + } +} + + +/** + * Returns the logger of a class. + * + * @param clazz {Function} The class of which to return the logger. + */ +qx.Class.getClassLogger = function(clazz) { + var logger = clazz._logger; + if (logger == null) { + // Get the parent logger + var classname = clazz.classname; + var splits = classname.split("."); + var currPackage = window; + var currPackageName = ""; + var parentLogger = qx.log.Logger.ROOT_LOGGER; + for (var i = 0; i < splits.length - 1; i++) { + currPackage = currPackage[splits[i]]; + currPackageName += ((i != 0) ? "." : "") + splits[i]; + + if (currPackage._logger == null) { + // This package has no logger -> Create one + currPackage._logger = new qx.log.Logger(currPackageName, parentLogger); + } + parentLogger = currPackage._logger; + } + + // Create the class logger + logger = new qx.log.Logger(classname, parentLogger); + clazz._logger = logger; + } + return logger; +} + + +/** {Integer} The current indent. */ +qx.Class._indent = 0; + +/** + * {Integer} The ALL level has the lowest possible rank and is intended to turn on + * all logging. + */ +qx.Class.LEVEL_ALL = 0; + +/** + * {Integer} The DEBUG Level designates fine-grained informational events that are + * most useful to debug an application. + */ +qx.Class.LEVEL_DEBUG = 200; + +/** + * {Integer} The INFO level designates informational messages that highlight the + * progress of the application at coarse-grained level. + */ +qx.Class.LEVEL_INFO = 500; + +/** {Integer} The WARN level designates potentially harmful situations. */ +qx.Class.LEVEL_WARN = 600; + +/** + * {Integer} The ERROR level designates error events that might still allow the + * application to continue running. + */ +qx.Class.LEVEL_ERROR = 700; + +/** + * {Integer} The FATAL level designates very severe error events that will + * presumably lead the application to abort. + */ +qx.Class.LEVEL_FATAL = 800; + +/** + * {Integer} The OFF has the highest possible rank and is intended to turn off + * logging. + */ +qx.Class.LEVEL_OFF = 1000; + + +/** + * {Logger} The root logger. This is the root of the logger tree. All loggers + * should be a child or grand child of this root logger. + * <p> + * This logger logs by default everything greater than level INFO to a log + * window. + */ +qx.Class.ROOT_LOGGER = new qx.log.Logger("root", null); +qx.Class.ROOT_LOGGER.setMinLevel(qx.log.Logger.LEVEL_DEBUG); + +if (typeof console != 'undefined' && console.debug) { + qx.Class.ROOT_LOGGER.addAppender(new qx.log.FireBugAppender()); +} else { + qx.Class.ROOT_LOGGER.addAppender(new qx.log.WindowAppender()); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/RingBufferAppender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/RingBufferAppender.js new file mode 100644 index 0000000000..d7c36f8217 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/RingBufferAppender.js @@ -0,0 +1,124 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Carsten Lergenmueller (carstenl) + +************************************************************************ */ + +/* ************************************************************************ + +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to a memory container. The messages + * can be retrieved later, f. i. when an error dialog pops up and the question + * arises what actions have caused the error. + * + */ +qx.OO.defineClass("qx.log.RingBufferAppender", qx.log.Appender, +function() { + qx.log.Appender.call(this); + + this._history = []; + this._nextIndexToStoreTo = 0; + this._appenderToFormatStrings = null; +}); + + +/** + * The maximum number of messages to hold. If null the number of messages is not + * limited. Warning: Changing this property will clear the events logged so far. + */ +qx.OO.addProperty({ name:"maxMessages", type:"number", defaultValue:50 }); + +qx.Proto._modifyMaxMessages = function(propValue, propOldValue, propData){ + this._history = []; + this._nextIndexToStoreTo = 0; +}; + +// overridden +qx.Proto.appendLogEvent = function(evt) { + var maxMessages = this.getMaxMessages(); + if (this._history.length < maxMessages){ + this._history.push(evt); + } else { + this._history[this._nextIndexToStoreTo++] = evt; + if (this._nextIndexToStoreTo >= maxMessages){ + this._nextIndexToStoreTo = 0; + } + } +}; + +/** + * Returns log events which have been logged previously. + * + * @param count {Integer} The number of events to retreive. If there are more events than the + * given count, the oldest ones will not be returned. + * @return {array} array of stored log events + */ +qx.Proto.retrieveLogEvents = function(count) { + if (count > this._history.length){ + count = this._history.length; + } + + var indexOfYoungestElementInHistory + = this._history.length == this.getMaxMessages() ? this._nextIndexToStoreTo - 1 + : this._history.length - 1; + var startIndex = indexOfYoungestElementInHistory - count + 1; + if (startIndex < 0){ + startIndex += this._history.length; + } + + var result; + if (startIndex <= indexOfYoungestElementInHistory){ + result = this._history.slice(startIndex, indexOfYoungestElementInHistory + 1); + } else { + result = this._history.slice(startIndex, this._history.length).concat( + this._history.slice(0, indexOfYoungestElementInHistory + 1) + ); + } + return result; +}; + +/** + * Returns a string holding the information of log events which have been logged previously. + * + * @param count {Integer} The number of events to retreive. If there are more events than the + * given count, the oldest ones will not be returned. + * @return {String} string + */ +qx.Proto.formatLogEvents = function(count) { + if (this._appenderToFormatStrings == null){ + this._appenderToFormatStrings = new qx.log.Appender(); + } + + var events = this.retrieveLogEvents(count); + var string = ""; + for(var idx=0; idx < events.length; idx++) { + string += this._appenderToFormatStrings.formatLogEvent(events[idx]) + "\n"; + } + return string; +}; + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.log.Appender.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/WindowAppender.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/WindowAppender.js new file mode 100644 index 0000000000..4bfc5e5bf4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/log/WindowAppender.js @@ -0,0 +1,286 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) +#module(log) + +************************************************************************ */ + +/** + * An appender that writes all messages to a log window. + * <p> + * This class does not depend on qooxdoo widgets, so it also works when there + * are problems with widgets or when the widgets are not yet initialized. + * + * @param name {String ? "qx_log"} the name of the log window. + */ +qx.OO.defineClass("qx.log.WindowAppender", qx.log.Appender, +function(name) { + qx.log.Appender.call(this); + + this._id = qx.log.WindowAppender.register(this); + this._name = (name == null) ? "qx_log" : name; + + this._errorsPreventingAutoCloseCount = 0; + + this._logWindowOpened = false; +}); + + +/** + * The maximum number of messages to show. If null the number of messages is not + * limited. + */ +qx.OO.addProperty({ name:"maxMessages", type:"number", defaultValue:500 }); + +/** Whether the window should appear under the main window. */ +qx.OO.addProperty({ name:"popUnder", type:"boolean", defaultValue:false, allowNull:false }); + +/** Whether the window should automatically be closed when its creating page is unloaded and + * errors have been logged. Note that errors that have been logged before this property has been + * turned off will be ignored. Warning: Turning this off may create a memory hole because the disposer + * of this class will auto-close the window, i. e. it may stay open after dispose(), still holding + * memory. However, for diagnostics it is often more important to get information about errors + * than to save memory. + */ +qx.OO.addProperty({ name:"autoCloseWithErrors", type:"boolean", defaultValue:true, allowNull:false }); + + +/** + * Creates and opens the log window if it doesn't alread exist. + */ +qx.Proto.openWindow = function() { + if (this._logWindowOpened) { + // The window is already open -> Nothing to do + return; + } + + // Open the logger window + var winWidth = 600; + var winHeight = 350; + var winLeft = window.screen.width - winWidth; + var winTop = window.screen.height - winHeight; + var params = "toolbar=no,scrollbars=yes,resizable=yes," + + "width=" + winWidth + ",height=" + winHeight + + ",left=" + winLeft + ",top=" + winTop; + + // NOTE: In window.open the browser will process the event queue. + // Which means that other log events may arrive during this time. + // The log window is then in an inconsistent state, because the + // this._logElem is not created yet. These events will be added to the + // this._logEventQueue and logged after this._logElem is created. + this._logWindow = window.open("", this._name, params); + + if (!this._logWindow || this._logWindow.closed) + { + if (!this._popupBlockerWarning) { + alert("Couldn't open debug window. Please disable your popup blocker!"); + } + + this._popupBlockerWarning = true; + return; + } + + // Seems to be OK now. + this._popupBlockerWarning = false; + + // Store that window is open + this._logWindowOpened = true; + + if (this.getPopUnder()) { + this._logWindow.blur(); + window.focus(); + } + + var logDocument = this._logWindow.document; + // NOTE: We have to use a static onunload handler, because an onunload + // that is set later using DOM is ignored completely. + // (at least in Firefox, but maybe in IE, too) + logDocument.open(); + logDocument.write("<html><head><title>" + this._name + "</title></head>" + + '<body onload="qx = opener.qx;" onunload="try{qx.log.WindowAppender._registeredAppenders[' + this._id + ']._autoCloseWindow()}catch(e){}">' + + '<pre id="log" wrap="wrap" style="font-size:11"></pre></body></html>'); + logDocument.close(); + + this._logElem = logDocument.getElementById("log"); + + // Log the events from the queue + if (this._logEventQueue != null) { + for (var i = 0; i < this._logEventQueue.length; i++) { + this.appendLogEvent(this._logEventQueue[i]); + } + this._logEventQueue = null; + } +}; + + +/** + * Closes the log window. + */ +qx.Proto.closeWindow = function() { + if (this._logWindow != null) { + this._logWindow.close(); + this._logWindow = null; + this._logElem = null; + this._logWindowOpened = false; + } +}; + +/** + * Called when the window should be automatically closed (because the page that opened + * is is unloaded). Will only close the window if the autoClose***-Properties allow it + */ +qx.Proto._autoCloseWindow = function() { + if (this.getAutoCloseWithErrors() || this._errorsPreventingAutoCloseCount == 0){ + this.closeWindow(); + } else { + //Show message why auto-close has failed + this._showMessageInLog("Log window message: <b>Note: " + this._errorsPreventingAutoCloseCount + + " errors have been recorded, keeping log window open.</b>"); + } +}; + +/** + * Appends a line to the log showing the given text + * @param msg {String} message to show, may be HTML + */ +qx.Proto._showMessageInLog = function(msg) { + //Create dummy log event and use appendLogEvent() + //Reason is that it is rather complicated to get something into the log + //window when it is not already open -> reuse the existing code + //which does event queuing in such a case + var dummyEvent = {message: msg, isDummyEventForMessage : true}; + this.appendLogEvent(dummyEvent); +}; + + +// overridden +qx.Proto.appendLogEvent = function(evt) { + if (!this._logWindowOpened) { + this._logEventQueue = []; + this._logEventQueue.push(evt); + + this.openWindow(); + + // Popup-Blocker was active! + if (!this._logWindowOpened) { + return; + } + } else if (this._logElem == null) { + // The window is currenlty opening, but not yet finished + // -> Put the event in the queue + this._logEventQueue.push(evt); + } else { + var divElem = this._logWindow.document.createElement("div"); + if (evt.level >= qx.log.Logger.LEVEL_ERROR) { + divElem.style.backgroundColor = "#FFEEEE"; + if (!this.getAutoCloseWithErrors()){ + this._errorsPreventingAutoCloseCount += 1; + } + } else if (evt.level == qx.log.Logger.LEVEL_DEBUG) { + divElem.style.color = "gray"; + } + if (evt.isDummyEventForMessage){ + divElem.innerHTML = evt.message; + } else { + divElem.innerHTML = qx.html.String.fromText(this.formatLogEvent(evt)); + } + this._logElem.appendChild(divElem); + + while (this._logElem.childNodes.length > this.getMaxMessages()) { + this._logElem.removeChild(this._logElem.firstChild); + + if (this._removedMessageCount == null) { + this._removedMessageCount = 1; + } else { + this._removedMessageCount++; + } + } + + if (this._removedMessageCount != null) { + this._logElem.firstChild.innerHTML = "(" + this._removedMessageCount + + " messages removed)"; + } + + // Scroll to bottom + this._logWindow.scrollTo(0, this._logElem.offsetHeight); + } +} + +qx.Proto._modifyAutoCloseWithErrors = function(propValue, propOldValue, propData){ + if (!propValue && propOldValue){ + this._errorsPreventingAutoCloseCount = 0; + + //Show message in log so user can see which errors have been counted + this._showMessageInLog("Log window message: Starting error recording, any errors below this line will prevent the log window from closing"); + + } else if (propValue && !propOldValue){ + //Show message in log so user can see which errors have been counted + this._showMessageInLog("Log window message: Stopping error recording, discarding " + this._errorsPreventingAutoCloseCount + " errors."); + } + return true; +} + + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + this._autoCloseWindow(); + + return qx.log.Appender.prototype.dispose.call(this); +} + + +qx.Class._nextId = 1; +qx.Class._registeredAppenders = {}; + + +/** + * Registers a WindowAppender. This is used by the WindowAppender internally. + * You don't have to call this. + * + * @param appender {WindowAppender} the WindowAppender to register. + * @return {Integer} the ID. + */ +qx.Class.register = function(appender) { + var WindowAppender = qx.log.WindowAppender; + + var id = WindowAppender._nextId++; + WindowAppender._registeredAppenders[id] = appender; + + return id; +} + + +/** + * Returns a prviously registered WindowAppender. + * + * @param id {Integer} the ID of the wanted WindowAppender. + * @return {WindowAppender} the WindowAppender or null if no + * WindowAppender with this ID is registered. + */ +qx.Class.getAppender = function(id) { + return qx.log.WindowAppender._registeredAppenders[id]; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/AliasManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/AliasManager.js new file mode 100644 index 0000000000..e1247d8a81 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/AliasManager.js @@ -0,0 +1,239 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * This singleton manage global resource aliases + * + * @event change {qx.event.type.Event} + */ +qx.OO.defineClass("qx.manager.object.AliasManager", qx.core.Target, +function() +{ + qx.core.Target.call(this); + + // Contains defined aliases (like icons/, widgets/, application/, ...) + this._aliases = {}; + + // Containes computed paths + this._uris = {}; + + // Define static alias from setting + this.add("static", this.getSetting("staticUri")); +}); + + + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("resourceUri", "../../resource"); +qx.Settings.setDefault("staticUri", qx.Settings.getValue("resourceUri") + "/static"); + + + + + +/* +--------------------------------------------------------------------------- + ALIAS MANAGMENT +--------------------------------------------------------------------------- +*/ + +/** + * Define an alias to a resource path + * + * @param vAlias {String} alias name for the resource path/url + * @param vUriStart {String} first part of URI for all images which use this alias + */ +qx.Proto.add = function(vAlias, vUriStart) +{ + this._aliases[vAlias] = vUriStart; + + // Cleanup old uris which use this alias + for (var vPath in this._uris) + { + if (vPath.substring(0, vPath.indexOf("/")) == vAlias) { + this._uris[vPath] = null; + } + } + + // Fire change event (for ImageManager, etc.) + this.createDispatchEvent("change"); +} + +/** + * Remove a previously defined alias + * + * @param vAlias {String} alias name for the resource path/url + */ +qx.Proto.remove = function(vAlias) +{ + delete this._aliases[vAlias]; + + // Cleanup old uris which use this alias + for (var vPath in this._uris) + { + if (vPath.substring(0, vPath.indexOf("/")) == vAlias) { + this._uris[vPath] = null; + } + } + + // Fire change event (for ImageManager, etc.) + this.createDispatchEvent("change"); +} + +/** + * Resolve an alias to the actual resource path/url + * + * @param vAlias {String} alias name for the resource path/url + * @return {String} resource path/url + */ +qx.Proto.resolve = function(vAlias) { + return this._aliases[vAlias]; +} + + + + + + +/* +--------------------------------------------------------------------------- + URI HANDLING +--------------------------------------------------------------------------- +*/ + +/** + * Resolve a path name to a resource URI taking the defined aliases into account + * and cache the result. + * + * If the first part of the path is a defined alias, the alias is resolved. + * Otherwhise the path is returned unmodified. + * + * @param vPath {String} path name + * @param vForceUpdate {Boolean} (default=false) wether the cached value should be ignored + * @return {String} reolved path/url + */ +qx.Proto.resolvePath = function(vPath, vForceUpdate) +{ + var vUri = this._uris[vPath]; + + if (vUri == null) { + vUri = this._uris[vPath] = this._computePath(vPath); + } + + // this.debug("URI: " + vPath + " => " + vUri); + + return vUri; +} + + +/** + * Resolve a path name to a resource URI taking the defined aliases into account. + * + * If the first part of the path is a defined alias, the alias is resolved. + * Otherwhise the path is returned unmodified. + * + * @param vPath {String} path name + * @return {String} reolved path/url + */ +qx.Proto._computePath = function(vPath) +{ + switch(vPath.charAt(0)) + { + case "/": + case ".": + return vPath; + + default: + if ( + qx.lang.String.startsWith(vPath, qx.net.Protocol.URI_HTTP) || + qx.lang.String.startsWith(vPath, qx.net.Protocol.URI_HTTPS) || + qx.lang.String.startsWith(vPath, qx.net.Protocol.URI_FILE) + ) { + return vPath; + } + + var vAlias = vPath.substring(0, vPath.indexOf("/")); + var vResolved = this._aliases[vAlias]; + + if (vResolved != null) { + return vResolved + vPath.substring(vAlias.length); + } + + return vPath; + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Disposer + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._aliases = null; + this._uris = null; + + return qx.core.Target.prototype.dispose.call(this); +} + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/AppearanceManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/AppearanceManager.js new file mode 100644 index 0000000000..cf7ea1edb4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/AppearanceManager.js @@ -0,0 +1,154 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/** + * This singleton manages the current theme + */ +qx.OO.defineClass("qx.manager.object.AppearanceManager", qx.manager.object.ObjectManager, +function() { + qx.manager.object.ObjectManager.call(this); + + // Themes + this._appearanceThemes = {}; +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("appearanceTheme", "qx.theme.appearance.Classic"); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** currently used apperance theme */ +qx.OO.addProperty({ name : "appearanceTheme", type : "object", allowNull : false, instance : "qx.renderer.theme.AppearanceTheme" }); + + + + + + +/* +--------------------------------------------------------------------------- + REGISTRATION +--------------------------------------------------------------------------- +*/ + +/** + * Register an theme class. + * The theme is applied if it is the default apperance + * + * @param vThemeClass {qx.renderer.theme.AppearanceTheme} + */ +qx.Proto.registerAppearanceTheme = function(vThemeClass) +{ + this._appearanceThemes[vThemeClass.classname] = vThemeClass; + + if (vThemeClass.classname == this.getSetting("appearanceTheme")) { + this.setAppearanceTheme(vThemeClass.getInstance()); + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyAppearanceTheme = function(propValue, propOldValue, propData) +{ + var vComp = qx.core.Init.getInstance().getComponent(); + + if (vComp && vComp.isUiReady()) { + qx.ui.core.ClientDocument.getInstance()._recursiveAppearanceThemeUpdate(propValue, propOldValue); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Disposer + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Themes + this._appearanceThemes = null; + + return qx.manager.object.ObjectManager.prototype.dispose.call(this); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ColorManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ColorManager.js new file mode 100644 index 0000000000..4298aeda0b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ColorManager.js @@ -0,0 +1,230 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#optional(qx.ui.form.Button) +#embed(qx.icontheme/16/actions/format-color.png) + +************************************************************************ */ + +qx.OO.defineClass("qx.manager.object.ColorManager", qx.manager.object.ObjectManager, +function() +{ + qx.manager.object.ObjectManager.call(this); + + // Themes + this._colorThemes = {}; + + // Contains the qx.renderer.color.ColorObjects which + // represent a themed color. + this._dependentObjects = {}; +}); + + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("colorTheme", "qx.theme.color.WindowsRoyale"); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "colorTheme", type : "object", allowNull : false, instance : "qx.renderer.theme.ColorTheme" }); + + + + + + +/* +--------------------------------------------------------------------------- + REGISTRATION +--------------------------------------------------------------------------- +*/ + +qx.Proto.registerColorTheme = function(vThemeClass) +{ + this._colorThemes[vThemeClass.classname] = vThemeClass; + + if (vThemeClass.classname == this.getSetting("colorTheme")) { + this.setColorTheme(vThemeClass.getInstance()); + } +} + +qx.Proto.setColorThemeById = function(vId) { + this.setColorTheme(this._colorThemes[vId].getInstance()); +} + + + + + + +/* +--------------------------------------------------------------------------- + PUBLIC METHODS FOR qx.renderer.color.ColorOBJECTS +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = function(oObject) +{ + var vValue = oObject.getValue(); + + this._objects[vValue] = oObject; + + if (oObject.isThemedColor()) { + this._dependentObjects[vValue] = oObject; + } +} + +qx.Proto.remove = function(oObject) +{ + var vValue = oObject.getValue(); + + delete this._objects[vValue]; + delete this._dependentObjects[vValue]; +} + +qx.Proto.has = function(vValue) { + return this._objects[vValue] != null; +} + +qx.Proto.get = function(vValue) { + return this._objects[vValue]; +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyColorTheme = function(propValue, propOldValue, propData) +{ + propValue.compile(); + + for (var i in this._dependentObjects) { + this._dependentObjects[i]._updateTheme(propValue); + } + + return true; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto.createThemeList = function(vParent, xCor, yCor) +{ + var vButton; + var vThemes = this._colorThemes; + var vIcon = "icon/16/actions/format-color.png"; + var vPrefix = "Color Theme: "; + var vEvent = "execute"; + + for (var vId in vThemes) + { + var vObj = vThemes[vId].getInstance(); + var vButton = new qx.ui.form.Button(vPrefix + vObj.getTitle(), vIcon); + + vButton.setLocation(xCor, yCor); + vButton.addEventListener(vEvent, new Function("qx.manager.object.ColorManager.getInstance().setColorThemeById('" + vId + "')")); + + vParent.add(vButton); + + yCor += 30; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Themes + this._colorThemes = null; + + // Cleanup dependent objects + for (var i in this._dependentObjects) { + delete this._dependentObjects[i]; + } + + delete this._dependentObjects; + + return qx.manager.object.ObjectManager.prototype.dispose.call(this); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/IframeManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/IframeManager.js new file mode 100644 index 0000000000..f7337f4e6d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/IframeManager.js @@ -0,0 +1,77 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/** + * This singleton manages multiple instances of qx.ui.embed.Iframe. + * <p> + * The problem: When dragging over an iframe then all mouse events will be + * passed to the document of the iframe, not the main document. + * <p> + * The solution: In order to be able to track mouse events over iframes, this + * manager will block all iframes during a drag with a glasspane. + */ +qx.OO.defineClass("qx.manager.object.IframeManager", qx.manager.object.ObjectManager, +function(){ + qx.manager.object.ObjectManager.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.handleMouseDown = function(evt) { + var iframeMap = this.getAll(); + + for (var key in iframeMap) { + var iframe = iframeMap[key]; + iframe.block(); + } +} + +qx.Proto.handleMouseUp = function(evt) { + var iframeMap = this.getAll(); + + for (var key in iframeMap) { + var iframe = iframeMap[key]; + iframe.release(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ImageManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ImageManager.js new file mode 100644 index 0000000000..a71b43488c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ImageManager.js @@ -0,0 +1,315 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#optional(qx.ui.form.Button) +#embed(qx.icontheme/16/apps/preferences-desktop-theme.png) +#require(qx.manager.object.ImagePreloaderManager) + +************************************************************************ */ + +/*! + This singleton manage the global image path (prefix) and allowes themed icons. +*/ +qx.OO.defineClass("qx.manager.object.ImageManager", qx.manager.object.ObjectManager, +function() +{ + qx.manager.object.ObjectManager.call(this); + + // Themes + this._iconThemes = {}; + this._widgetThemes = {}; + + // Contains known image sources (all of them, if loaded or not) + // The value is a number which represents the number of image + // instances which use this source + this._sources = {}; + + // Change event connection to AliasManager + qx.manager.object.AliasManager.getInstance().addEventListener("change", this._onaliaschange, this); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +/* + Make sure to select an icon theme that is compatible to the license you + chose to receive the qooxdoo code under. For more information, please + see the LICENSE file in the project's top-level directory. + */ +qx.Settings.setDefault("iconTheme", "qx.theme.icon.Nuvola"); + +qx.Settings.setDefault("widgetTheme", "qx.theme.widget.Windows"); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "iconTheme", type : "object", instance : "qx.renderer.theme.IconTheme" }); +qx.OO.addProperty({ name : "widgetTheme", type : "object", instance : "qx.renderer.theme.WidgetTheme" }); + + + + + + +/* +--------------------------------------------------------------------------- + REGISTRATION +--------------------------------------------------------------------------- +*/ + +qx.Proto.registerIconTheme = function(vThemeClass) +{ + this._iconThemes[vThemeClass.classname] = vThemeClass; + + if (vThemeClass.classname == this.getSetting("iconTheme")) { + this.setIconTheme(vThemeClass.getInstance()); + } +} + +qx.Proto.registerWidgetTheme = function(vThemeClass) +{ + this._widgetThemes[vThemeClass.classname] = vThemeClass; + + if (vThemeClass.classname == this.getSetting("widgetTheme")) { + this.setWidgetTheme(vThemeClass.getInstance()); + } +} + +qx.Proto.setIconThemeById = function(vId) { + this.setIconTheme(this._iconThemes[vId].getInstance()); +} + +qx.Proto.setWidgetThemeById = function(vId) { + this.setWidgetTheme(this._widgetThemes[vId].getInstance()); +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onaliaschange = function() { + this._updateImages(); +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyIconTheme = function(propValue, propOldValue, propData) +{ + propValue ? qx.manager.object.AliasManager.getInstance().add("icon", propValue.getSetting("imageUri")) : qx.manager.object.AliasManager.getInstance().remove("icon"); + return true; +} + +qx.Proto._modifyWidgetTheme = function(propValue, propOldValue, propData) +{ + propValue ? qx.manager.object.AliasManager.getInstance().add("widget", propValue.getSetting("imageUri")) : qx.manager.object.AliasManager.getInstance().remove("widget"); + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + PRELOAD API +--------------------------------------------------------------------------- +*/ + +qx.Proto.getPreloadImageList = function() +{ + var vPreload = {}; + + for (var vSource in this._sources) + { + if (this._sources[vSource]) { + vPreload[vSource] = true; + } + } + + return vPreload; +} + +qx.Proto.getPostPreloadImageList = function() +{ + var vPreload = {}; + + for (var vSource in this._sources) + { + if (!this._sources[vSource]) { + vPreload[vSource] = true; + } + } + + return vPreload; +} + + + + + + + +/* +--------------------------------------------------------------------------- + INTERNAL HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto._updateImages = function() +{ + var vAll = this.getAll(); + var vPreMgr = qx.manager.object.ImagePreloaderManager.getInstance(); + var vAliasMgr = qx.manager.object.AliasManager.getInstance(); + var vObject; + + // Recreate preloader of affected images + for (var vHashCode in vAll) + { + vObject = vAll[vHashCode]; + vObject.setPreloader(vPreMgr.create(vAliasMgr.resolvePath(vObject.getSource()))); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +// TODO: rename to createIconThemeList +qx.Proto.createThemeList = function(vParent, xCor, yCor) +{ + var vButton; + var vThemes = this._iconThemes; + var vIcon = "icon/16/apps/preferences-desktop-theme.png"; + var vPrefix = "Icon Theme: "; + var vEvent = "execute"; + + for (var vId in vThemes) + { + var vObj = vThemes[vId].getInstance(); + var vButton = new qx.ui.form.Button(vPrefix + vObj.getTitle(), vIcon); + + vButton.setLocation(xCor, yCor); + vButton.addEventListener(vEvent, new Function("qx.manager.object.ImageManager.getInstance().setIconThemeById('" + vId + "')")); + + vParent.add(vButton); + + yCor += 30; + } +} + +qx.Proto.preload = function(vPath) { + qx.manager.object.ImagePreloaderManager.getInstance().create(qx.manager.object.AliasManager.getInstance().resolvePath(vPath)); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Change event connection to AliasManager + qx.manager.object.AliasManager.getInstance().removeEventListener("change", this._onaliaschange, this); + + // Delete counter field + this._sources = null; + + // Themes + this._iconThemes = null; + this._widgetThemes = null; + + return qx.manager.object.ObjectManager.prototype.dispose.call(this); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ImagePreloaderManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ImagePreloaderManager.js new file mode 100644 index 0000000000..400e481398 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ImagePreloaderManager.js @@ -0,0 +1,84 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/*! + This singleton manage all qx.io.image.Preloader instances. +*/ +qx.OO.defineClass("qx.manager.object.ImagePreloaderManager", qx.manager.object.ObjectManager, +function() { + qx.manager.object.ObjectManager.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = function(vObject) { + this._objects[vObject.getUri()] = vObject; +} + +qx.Proto.remove = function(vObject) { + delete this._objects[vObject.getUri()]; +} + +qx.Proto.has = function(vSource) { + return this._objects[vSource] != null; +} + +qx.Proto.get = function(vSource) { + return this._objects[vSource]; +} + +qx.Proto.create = function(vSource) +{ + if (this._objects[vSource]) { + return this._objects[vSource]; + } + + return new qx.io.image.Preloader(vSource); +} + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/MenuManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/MenuManager.js new file mode 100644 index 0000000000..ee34ddfe25 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/MenuManager.js @@ -0,0 +1,111 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +/*! + This singleton manages multiple instances of qx.ui.menu.Menu and their state. +*/ +qx.OO.defineClass("qx.manager.object.MenuManager", qx.manager.object.ObjectManager, +function(){ + qx.manager.object.ObjectManager.call(this); +}); + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.update = function(vTarget, vEventName) +{ + var vMenu, vHashCode; + var vAll = this.getAll(); + + for (vHashCode in vAll) + { + vMenu = vAll[vHashCode]; + + if(!vMenu.getAutoHide()) { + continue; + } + + if (vTarget && vTarget.getMenu && vTarget.getMenu()) { + continue; + } + + // Hide on global events (mouseup, window focus, window blur, ...) + if (!vTarget) + { + vMenu.hide(); + continue; + } + + // Hide only if the target is not a button inside this + // or any sub menu and is not the opener + var isMouseDown = vEventName == "mousedown"; + var isMouseUp = vEventName == "mouseup"; + + //Close menu if the target is not the opener button... + if (vMenu.getOpener() !== vTarget + + // and + && ( vTarget && + // the event is a mouse down on a non-child of the menu + (!vMenu.isSubElement(vTarget) && isMouseDown) + + // or the event is a mouse up on a child button of the menu + || (vMenu.isSubElement(vTarget, true) && isMouseUp) + + // or the event is a key (esc) event + || (!isMouseDown && !isMouseUp ))) + + + { + vMenu.hide(); + continue; + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ObjectManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ObjectManager.js new file mode 100644 index 0000000000..b53e62b453 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ObjectManager.js @@ -0,0 +1,119 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/*! + This class allows basic managment of assigned objects. +*/ +qx.OO.defineClass("qx.manager.object.ObjectManager", qx.core.Target, +function() +{ + qx.core.Target.call(this); + + this._objects = {}; +}); + + + + + +/* +--------------------------------------------------------------------------- + USER API +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = function(vObject) +{ + if (this.getDisposed()) { + return; + } + + this._objects[vObject.toHashCode()] = vObject; + return true; +} + +qx.Proto.remove = function(vObject) +{ + if (this.getDisposed()) { + return; + } + + delete this._objects[vObject.toHashCode()]; + return true; +} + +qx.Proto.has = function(vObject) { + return this._objects[vObject.toHashCode()] != null; +} + +qx.Proto.get = function(vObject) { + return this._objects[vObject.toHashCode()]; +} + +qx.Proto.getAll = function() { + return this._objects; +} + +qx.Proto.enableAll = function() +{ + for (var vHashCode in this._objects) { + this._objects[vHashCode].setEnabled(true); + }; +}; + +qx.Proto.disableAll = function() +{ + for (var vHashCode in this._objects) { + this._objects[vHashCode].setEnabled(false); + }; +}; + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + if (this._objects) + { + for (var i in this._objects) { + delete this._objects[i]; + } + + delete this._objects; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/PopupManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/PopupManager.js new file mode 100644 index 0000000000..f81509300b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/PopupManager.js @@ -0,0 +1,84 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_popup) +#optional(qx.ui.popup.ToolTip) + +************************************************************************ */ + +/*! + This singleton is used to manager multiple instances of popups and their state. +*/ +qx.OO.defineClass("qx.manager.object.PopupManager", qx.manager.object.ObjectManager, +function() { + qx.manager.object.ObjectManager.call(this); +}); + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.update = function(vTarget) +{ + // be sure that target is correctly set (needed for contains() later) + if (!(vTarget instanceof qx.ui.core.Widget)) { + vTarget = null; + } + + var vPopup, vHashCode; + var vAll = this.getAll(); + + for (vHashCode in vAll) + { + vPopup = vAll[vHashCode]; + + if(!vPopup.getAutoHide() || vTarget == vPopup || vPopup.contains(vTarget)) { + continue; + } + + if (qx.OO.isAvailable("qx.ui.popup.ToolTip") && vTarget instanceof qx.ui.popup.ToolTip && !(vPopup instanceof qx.ui.popup.ToolTip)) { + continue; + } + + vPopup.hide(); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ToolTipManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ToolTipManager.js new file mode 100644 index 0000000000..7cd07e7365 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/ToolTipManager.js @@ -0,0 +1,193 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_popup) + +************************************************************************ */ + +/*! + This manages ToolTip instances +*/ +qx.OO.defineClass("qx.manager.object.ToolTipManager", qx.manager.object.ObjectManager, +function() { + qx.manager.object.ObjectManager.call(this); +}); + +qx.OO.addProperty({ name : "currentToolTip", type : "object", instance : "qx.ui.popup.ToolTip" }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyCurrentToolTip = function(propValue, propOldValue, propData) +{ + // Return if the new tooltip is a child of the old one + if(propOldValue && propOldValue.contains(propValue)) { + return; + } + + // If old tooltip existing, hide it and clear widget binding + if(propOldValue) + { + propOldValue.hide(); + + propOldValue._stopShowTimer(); + propOldValue._stopHideTimer(); + } + + // If new tooltip is not null, set it up and start the timer + if(propValue) { + propValue._startShowTimer(); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + EVENT INTERFACE: MOUSE +--------------------------------------------------------------------------- +*/ + +qx.Proto.handleMouseOver = function(e) +{ + var vTarget = e.getTarget(); + var vToolTip; + + // Allows us to use DOM Nodes as tooltip target :) + if (!(vTarget instanceof qx.ui.core.Widget) && vTarget.nodeType == 1) { + vTarget = qx.event.handler.EventHandler.getTargetObject(vTarget); + } + + //Search first parent which has a tooltip + while(vTarget != null && !(vToolTip = vTarget.getToolTip())) { + vTarget = vTarget.getParent(); + } + + // Bind tooltip to widget + if (vToolTip != null) { + vToolTip.setBoundToWidget(vTarget); + } + + // Set Property + this.setCurrentToolTip(vToolTip); +} + +qx.Proto.handleMouseOut = function(e) +{ + var vTarget = e.getTarget(); + var vRelatedTarget = e.getRelatedTarget(); + + var vToolTip = this.getCurrentToolTip(); + + // If there was a tooltip and + // - the destination target is the current tooltip + // or + // - the current tooltip contains the destination target + if(vToolTip && (vRelatedTarget == vToolTip || vToolTip.contains(vRelatedTarget))) { + return; + } + + // If the destination target exists and the target contains it + if(vRelatedTarget && vTarget && vTarget.contains(vRelatedTarget)) { + return; + } + + // If there was a tooltip and there is no new one + if(vToolTip && !vRelatedTarget) { + this.setCurrentToolTip(null); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT INTERFACE: FOCUS +--------------------------------------------------------------------------- +*/ + +qx.Proto.handleFocus = function(e) +{ + var vTarget = e.getTarget(); + var vToolTip = vTarget.getToolTip(); + + // Only set new tooltip if focus widget + // has one + if(vToolTip != null) + { + // Bind tooltip to widget + vToolTip.setBoundToWidget(vTarget); + + // Set Property + this.setCurrentToolTip(vToolTip); + } +} + +qx.Proto.handleBlur = function(e) +{ + var vTarget = e.getTarget(); + + if(!vTarget) { + return; + } + + var vToolTip = this.getCurrentToolTip(); + + // Only set to null if blured widget is the + // one which has created the current tooltip + if(vToolTip && vToolTip == vTarget.getToolTip()) { + this.setCurrentToolTip(null); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/WindowManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/WindowManager.js new file mode 100644 index 0000000000..c0af466db6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/object/WindowManager.js @@ -0,0 +1,160 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_window) + +************************************************************************ */ + +/*! + This singleton manages qx.ui.window.Windows +*/ +qx.OO.defineClass("qx.manager.object.WindowManager", qx.manager.object.ObjectManager, +function() { + qx.manager.object.ObjectManager.call(this); +}); + +qx.OO.addProperty({ name : "activeWindow", type : "object" }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyActiveWindow = function(propValue, propOldValue, propData) +{ + qx.manager.object.PopupManager.getInstance().update(); + + if (propOldValue) { + propOldValue.setActive(false); + } + + if (propValue) { + propValue.setActive(true); + } + + if (propOldValue && propOldValue.getModal()) { + propOldValue.getTopLevelWidget().release(propOldValue); + } + + if (propValue && propValue.getModal()) { + propValue.getTopLevelWidget().block(propValue); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.update = function(oTarget) +{ + var vWindow, vHashCode; + var vAll = this.getAll(); + + for (var vHashCode in vAll) + { + vWindow = vAll[vHashCode]; + + if(!vWindow.getAutoHide()) { + continue; + } + + vWindow.hide(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + MANAGER INTERFACE +--------------------------------------------------------------------------- +*/ + +qx.Proto.compareWindows = function(w1, w2) +{ + switch(w1.getWindowManager().getActiveWindow()) + { + case w1: + return 1; + + case w2: + return -1; + } + + return w1.getZIndex() - w2.getZIndex(); +} + +qx.Proto.add = function(vWindow) +{ + qx.manager.object.ObjectManager.prototype.add.call(this, vWindow); + + // this.debug("Add: " + vWindow); + this.setActiveWindow(vWindow); +} + +qx.Proto.remove = function(vWindow) +{ + qx.manager.object.ObjectManager.prototype.remove.call(this, vWindow); + + // this.debug("Remove: " + vWindow); + + if (this.getActiveWindow() == vWindow) + { + var a = []; + for (var i in this._objects) { + a.push(this._objects[i]); + } + + var l = a.length; + + if (l==0) + { + this.setActiveWindow(null); + } + else if (l==1) + { + this.setActiveWindow(a[0]); + } + else if (l>1) + { + a.sort(this.compareWindows); + this.setActiveWindow(a[l-1]); + } + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/DomSelectionManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/DomSelectionManager.js new file mode 100644 index 0000000000..63ac9ed78e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/DomSelectionManager.js @@ -0,0 +1,244 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.manager.selection.DomSelectionManager", qx.manager.selection.SelectionManager, +function(vBoundedWidget) +{ + qx.manager.selection.SelectionManager.call(this, vBoundedWidget); + + // the children does not fire onmouseover events so we could + // not enable this and make it functional + this.setDragSelection(false); + + this._selectedItems.getItemHashCode = this.getItemHashCode; +}); + + + +/* +--------------------------------------------------------------------------- + MAPPING TO BOUNDED WIDGET (DOM NODES) +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemEnabled = function(oItem) { + return true; +} + +qx.Proto.getItemClassName = function(vItem) { + return vItem.className || ""; +} + +qx.Proto.setItemClassName = function(vItem, vClassName) { + return vItem.className = vClassName; +} + +qx.Proto.getItemBaseClassName = function(vItem) +{ + var p = vItem.className.split(" ")[0]; + return p ? p : "Status"; +} + +qx.Proto.getNextSibling = function(vItem) { + return vItem.nextSibling; +} + +qx.Proto.getPreviousSibling = function(vItem) { + return vItem.previousSibling; +} + +qx.Proto.getFirst = function() { + return this.getItems()[0]; +} + +qx.Proto.getLast = function() +{ + var vItems = this.getItems(); + return vItems[vItems.length-1]; +} + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemLeft = function(vItem) { + return vItem.offsetLeft; +} + +qx.Proto.getItemTop = function(vItem) { + return vItem.offsetTop; +} + +qx.Proto.getItemWidth = function(vItem) { + return vItem.offsetWidth; +} + +qx.Proto.getItemHeight = function(vItem) { + return vItem.offsetHeight; +} + + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemHashCode = function(oItem) +{ + if (oItem._hash) { + return oItem._hash; + } + + return oItem._hash = qx.core.Object.toHashCode(oItem); +} + +qx.Proto.isBefore = function(vItem1, vItem2) +{ + var pa = vItem1.parentNode; + + for (var i=0, l=pa.childNodes.length; i<l; i++) + { + switch(pa.childNodes[i]) + { + case vItem2: + return false; + + case vItem1: + return true; + } + } +} + +qx.Proto.scrollItemIntoView = function(vItem) { + this.getBoundedWidget().scrollItemIntoView(vItem); +} + +qx.Proto.getItems = function() { + return this.getBoundedWidget().getItems(); +} + +qx.Proto.getAbove = function(vItem) +{ + var vParent = vItem.parentNode; + var vFound = false; + var vLeft = vItem.offsetLeft; + var vChild; + + for (var i=vParent.childNodes.length-1; i>0; i--) + { + vChild = vParent.childNodes[i]; + + if (vFound == false) + { + if (vChild == vItem) { + vFound = true; + } + } + else + { + if (vChild.offsetLeft == vLeft) + { + return vChild; + } + } + } +} + +qx.Proto.getUnder = function(vItem) +{ + var vParent = vItem.parentNode; + var vFound = false; + var vLeft = vItem.offsetLeft; + var vChild; + + for (var i=0, l=vParent.childNodes.length; i<l; i++) + { + vChild = vParent.childNodes[i]; + + if (vFound == false) + { + if (vChild == vItem) { + vFound = true; + } + } + else + { + if (vChild.offsetLeft == vLeft) + { + return vChild; + } + } + } +} + + + + + + + + + + + + + + +/* +--------------------------------------------------------------------------- + ITEM CSS STATE MANAGMENT +--------------------------------------------------------------------------- +*/ + +qx.Proto._updateState = function(vItem, vState, vIsState) +{ + var c = this.getItemClassName(vItem); + var n = this.getItemBaseClassName(vItem) + "-" + vState; + + this.setItemClassName(vItem, vIsState ? qx.lang.String.addListItem(c, n, " ") : qx.lang.String.removeListItem(c, n, " ")); +} + +qx.Proto.renderItemSelectionState = function(vItem, vIsSelected) { + this._updateState(vItem, "Selected", vIsSelected); +} + +qx.Proto.renderItemAnchorState = function(vItem, vIsAnchor) { + this._updateState(vItem, "Anchor", vIsAnchor); +} + +qx.Proto.renderItemLeadState = function(vItem, vIsLead) { + this._updateState(vItem, "Lead", vIsLead); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/RadioManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/RadioManager.js new file mode 100644 index 0000000000..a8eda53890 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/RadioManager.js @@ -0,0 +1,303 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +/*! + Each instance manage vItems set of radio options: qx.ui.form.RadioButton, qx.ui.toolbar.RadioButton, ... +*/ +qx.OO.defineClass("qx.manager.selection.RadioManager", qx.core.Target, +function(vName, vMembers) +{ + // we don't need the manager data structures + qx.core.Target.call(this); + + // create item array + this._items = []; + + // apply name property + this.setName(vName != null ? vName : qx.manager.selection.RadioManager.AUTO_NAME_PREFIX + this._hashCode); + + if (vMembers != null) + { + // add() iterates over arguments, but vMembers is an array + this.add.apply(this, vMembers); + } +}); + +qx.manager.selection.RadioManager.AUTO_NAME_PREFIX = "qx-radio-"; + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "selected" }); +qx.OO.addProperty({ name : "name", type : "string" }); + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItems = function() { + return this._items; +} + +qx.Proto.getEnabledItems = function() +{ + var b = []; + + for (var i=0, a=this._items, l=a.length; i<l; i++) + { + if (a[i].getEnabled()) { + b.push(a[i]); + } + } + + return b; +} + +qx.Proto.handleItemChecked = function(vItem, vChecked) +{ + if (vChecked) + { + this.setSelected(vItem); + } + else if (this.getSelected() == vItem) + { + this.setSelected(null); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + REGISTRY +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = function(varargs) +{ + var vItems = arguments; + var vLength = vItems.length; + var vItem; + + for (var i=0; i<vLength; i++) + { + vItem = vItems[i]; + + if(qx.lang.Array.contains(this._items, vItem)) { + return; + } + + // Push RadioButton to array + this._items.push(vItem); + + // Inform radio button about new manager + vItem.setManager(this); + + // Need to update internal value? + if(vItem.getChecked()) { + this.setSelected(vItem); + } + + // Make enabled the same status as the the manager has + vItem.setEnabled(this.getEnabled()); + + // Apply Make name the same + vItem.setName(this.getName()); + } +} + +qx.Proto.remove = function(vItem) +{ + // Remove RadioButton from array + qx.lang.Array.remove(this._items, vItem); + + // Inform radio button about new manager + vItem.setManager(null); + + // if the radio was checked, set internal selection to null + if(vItem.getChecked()) { + this.setSelected(null); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifySelected = function(propValue, propOldValue, propData) +{ + if (propOldValue && propOldValue.getChecked()) { + propOldValue.setChecked(false); + } + + if (propValue && !propValue.getChecked()) { + propValue.setChecked(true); + } + + return true; +} + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + for (var i=0, vItems=this._items, vLength=vItems.length; i<vLength; i++) { + vItems[i].setEnabled(propValue); + } + + return true; +} + +qx.Proto._modifyName = function(propValue, propOldValue, propData) +{ + for (var i=0, vItems=this._items, vLength=vItems.length; i<vLength; i++) { + vItems[i].setName(propValue); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + SELECTION +--------------------------------------------------------------------------- +*/ + +qx.Proto.selectNext = function(vItem) +{ + var vIndex = this._items.indexOf(vItem); + + if(vIndex == -1) { + return; + } + + var i = 0; + var vLength = this._items.length; + + // Find next enabled item + vIndex = (vIndex + 1) % vLength; + while(i < vLength && !this._items[vIndex].getEnabled()) + { + vIndex = (vIndex + 1) % vLength; + i++; + } + + this._selectByIndex(vIndex); +} + +qx.Proto.selectPrevious = function(vItem) +{ + var vIndex = this._items.indexOf(vItem); + + if(vIndex == -1) { + return; + } + + var i = 0; + var vLength = this._items.length; + + // Find previous enabled item + vIndex = (vIndex - 1 + vLength) % vLength; + while(i < vLength && !this._items[vIndex].getEnabled()) + { + vIndex = (vIndex - 1 + vLength) % vLength; + i++; + } + + this._selectByIndex(vIndex); +} + +qx.Proto._selectByIndex = function(vIndex) +{ + if(this._items[vIndex].getEnabled()) + { + this.setSelected(this._items[vIndex]); + this._items[vIndex].setFocused(true); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.forceSelected(null); + + if (this._items) + { + for (var i, vItems=this._items, vLength=vItems.length; i<vLength; i++) + { + vItems[i].dispose(); + delete vItems[i]; + } + + vItems=null; + delete this._items; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/SelectionManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/SelectionManager.js new file mode 100644 index 0000000000..132bbdca26 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/SelectionManager.js @@ -0,0 +1,1435 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +/** + * This class represents a selection and manage incoming events for widgets + * which need selection support. + * + * @event changeSelection {qx.event.type.DataEvent} sets the data property of the event object to an arryas of selected items. + */ +qx.OO.defineClass("qx.manager.selection.SelectionManager", qx.core.Target, +function(vBoundedWidget) +{ + qx.core.Target.call(this); + + this._selectedItems = new qx.type.Selection(this); + + if (vBoundedWidget != null) { + this.setBoundedWidget(vBoundedWidget); + } +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! +This contains the currently assigned widget (qx.ui.form.List, ...) +*/ +qx.OO.addProperty({ name : "boundedWidget", type : "object" }); + +/*! +Should multiple selection be allowed? +*/ +qx.OO.addProperty({ name : "multiSelection", type : "boolean", defaultValue : true }); + +/*! +Enable drag selection? +*/ +qx.OO.addProperty({ name : "dragSelection", type : "boolean", defaultValue : true }); + +/*! +Should the user be able to select +*/ +qx.OO.addProperty({ name : "canDeselect", type : "boolean", defaultValue : true }); + +/*! +Should a change event be fired? +*/ +qx.OO.addProperty({ name : "fireChange", type : "boolean", defaultValue : true }); + +/*! +The current anchor in range selections. +*/ +qx.OO.addProperty({ name : "anchorItem", type : "object" }); + +/*! +The last selected item +*/ +qx.OO.addProperty({ name : "leadItem", type : "object" }); + +/*! +Grid selection +*/ +qx.OO.addProperty({ name : "multiColumnSupport", type : "boolean", defaultValue : false }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyAnchorItem = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + this.renderItemAnchorState(propOldValue, false); + } + + if (propValue) { + this.renderItemAnchorState(propValue, true); + } + + return true; +} + +qx.Proto._modifyLeadItem = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + this.renderItemLeadState(propOldValue, false); + } + + if (propValue) { + this.renderItemLeadState(propValue, true); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO BOUNDED WIDGET +--------------------------------------------------------------------------- +*/ + +qx.Proto._getFirst = function() { + return this.getBoundedWidget().getFirstVisibleChild(); +} + +qx.Proto._getLast = function() { + return this.getBoundedWidget().getLastVisibleChild(); +} + +qx.Proto.getFirst = function() +{ + var vItem = this._getFirst(); + if (vItem) { + return vItem.isEnabled() ? vItem : this.getNext(vItem); + } +} + +qx.Proto.getLast = function() +{ + var vItem = this._getLast(); + if (vItem) { + return vItem.isEnabled() ? vItem : this.getPrevious(vItem); + } +} + +qx.Proto.getItems = function() { + return this.getBoundedWidget().getChildren(); +} + +qx.Proto.getNextSibling = function(vItem) { + return vItem.getNextSibling(); +} + +qx.Proto.getPreviousSibling = function(vItem) { + return vItem.getPreviousSibling(); +} + +qx.Proto.getNext = function(vItem) +{ + while(vItem) + { + vItem = this.getNextSibling(vItem); + + if (!vItem) { + break; + } + + if (this.getItemEnabled(vItem)) { + return vItem; + } + } + + return null; +} + +qx.Proto.getPrevious = function(vItem) +{ + while(vItem) + { + vItem = this.getPreviousSibling(vItem); + + if (!vItem) { + break; + } + + if (this.getItemEnabled(vItem)) { + return vItem; + } + } + + return null; +} + +qx.Proto.isBefore = function(vItem1, vItem2) +{ + var cs = this.getItems(); + return cs.indexOf(vItem1) < cs.indexOf(vItem2); +} + +qx.Proto.isEqual = function(vItem1, vItem2) { + return vItem1 == vItem2; +} + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemHashCode = function(vItem) { + return vItem.toHashCode(); +} + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto.scrollItemIntoView = function(vItem, vTopLeft) { + vItem.scrollIntoView(vTopLeft); +} + +qx.Proto.getItemLeft = function(vItem) { + return vItem.getOffsetLeft(); +} + +qx.Proto.getItemTop = function(vItem) { + return vItem.getOffsetTop(); +} + +qx.Proto.getItemWidth = function(vItem) { + return vItem.getOffsetWidth(); +} + +qx.Proto.getItemHeight = function(vItem) { + return vItem.getOffsetHeight(); +} + +qx.Proto.getItemEnabled = function(vItem) { + return vItem.getEnabled(); +} + + + + + + +/* +--------------------------------------------------------------------------- + ITEM STATE MANAGMENT +--------------------------------------------------------------------------- +*/ + +qx.Proto.renderItemSelectionState = function(vItem, vIsSelected) +{ + vIsSelected ? vItem.addState("selected") : vItem.removeState("selected"); + + if (vItem.handleStateChange) { + vItem.handleStateChange(); + } +} + +qx.Proto.renderItemAnchorState = function(vItem, vIsAnchor) +{ + vIsAnchor ? vItem.addState("anchor") : vItem.removeState("anchor"); + + if (vItem.handleStateChange != null) { + vItem.handleStateChange(); + } +} + +qx.Proto.renderItemLeadState = function(vItem, vIsLead) +{ + vIsLead ? vItem.addState("lead") : vItem.removeState("lead"); + + if (vItem.handleStateChange != null) { + vItem.handleStateChange(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + SELECTION HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemSelected = function(vItem) { + return this._selectedItems.contains(vItem); +} + +/*! +Make a single item selected / not selected + +#param vItem[qx.ui.core.Widget]: Item which should be selected / not selected +#param vSelected[Boolean]: Should this item be selected? +*/ +qx.Proto.setItemSelected = function(vItem, vSelected) +{ + var hc = this.getItemHashCode(vItem); + + switch(this.getMultiSelection()) + { + // Multiple item selection is allowed + case true: + if (!this.getItemEnabled(vItem)) { + return; + } + + // If selection state is not to be changed => return + if (this.getItemSelected(vItem) == vSelected) { + return; + } + + // Otherwise render new state + this.renderItemSelectionState(vItem, vSelected); + + // Add item to selection hash / delete it from there + vSelected ? this._selectedItems.add(vItem) : this._selectedItems.remove(vItem); + + // Dispatch change Event + this._dispatchChange(); + + break; + + + + // Multiple item selection is NOT allowed + case false: + var item0 = this.getSelectedItems()[0]; + + + + if (vSelected) + { + // Precheck for any changes + var old = item0; + + if (this.isEqual(vItem, old)) { + return; + } + + // Reset rendering of previous selected item + if (old != null) { + this.renderItemSelectionState(old, false); + } + + // Render new item as selected + this.renderItemSelectionState(vItem, true); + + // Reset current selection hash + this._selectedItems.removeAll(); + + // Add new one + this._selectedItems.add(vItem); + + // Dispatch change Event + this._dispatchChange(); + } + else + { + // Pre-check if item is currently selected + // Do not allow deselection in single selection mode + if (!this.isEqual(item0, vItem)) + { + // Reset rendering as selected item + this.renderItemSelectionState(vItem, false); + + // Reset current selection hash + this._selectedItems.removeAll(); + + // Dispatch change Event + this._dispatchChange(); + } + } + + break; + + } +} + + + + + + + + +/*! + Get the selected items (objects) +*/ +qx.Proto.getSelectedItems = function() { + return this._selectedItems.toArray(); +} + +qx.Proto.getSelectedItem = function() { + return this._selectedItems.getFirst(); +} + +/*! +Select given items + +#param vItems[Array of Widgets]: Items to select +*/ +qx.Proto.setSelectedItems = function(vItems) +{ + var oldVal = this._getChangeValue(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Deselect all currently selected items + this._deselectAll(); + + // Apply new selection + var vItem; + var vItemLength = vItems.length; + + for (var i=0; i<vItemLength; i++) + { + vItem = vItems[i]; + + if (!this.getItemEnabled(vItem)) { + continue; + } + + // Add item to selection + this._selectedItems.add(vItem); + + // Render new state for item + this.renderItemSelectionState(vItem, true); + } + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if (oldFireChange && this._hasChanged(oldVal)) { + this._dispatchChange(); + } +} + + +qx.Proto.setSelectedItem = function(vItem) +{ + if (!vItem) { + return; + } + + if (!this.getItemEnabled(vItem)) { + return; + } + + var oldVal = this._getChangeValue(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Deselect all currently selected items + this._deselectAll(); + + // Add item to selection + this._selectedItems.add(vItem); + + // Render new state for item + this.renderItemSelectionState(vItem, true); + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if (oldFireChange && this._hasChanged(oldVal)) { + this._dispatchChange(); + } +} + + + + + +/*! + Select all items. +*/ +qx.Proto.selectAll = function() +{ + var oldVal = this._getChangeValue(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Call sub method to select all items + this._selectAll(); + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if (oldFireChange && this._hasChanged(oldVal)) { + this._dispatchChange(); + } +} + +/*! + Sub method for selectAll. Handles the real work + to select all items. +*/ +qx.Proto._selectAll = function() +{ + if (!this.getMultiSelection()) { + return; + } + + var vItem; + var vItems = this.getItems(); + var vItemsLength = vItems.length; + + // Reset current selection hash + this._selectedItems.removeAll(); + + for (var i=0; i<vItemsLength; i++) + { + vItem = vItems[i]; + + if (!this.getItemEnabled(vItem)) { + continue; + } + + // Add item to selection + this._selectedItems.add(vItem); + + // Render new state for item + this.renderItemSelectionState(vItem, true); + } + + return true; +} + + + + + +/*! + Deselect all items. +*/ +qx.Proto.deselectAll = function() +{ + var oldVal = this._getChangeValue(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Call sub method to deselect all items + this._deselectAll(); + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if (oldFireChange && this._hasChanged(oldVal)) + this._dispatchChange(); + } + +/*! + Sub method for deselectAll. Handles the real work + to deselect all items. +*/ +qx.Proto._deselectAll = function() +{ + // Render new state for items + var items = this._selectedItems.toArray(); + for (var i = 0; i < items.length; i++) { + this.renderItemSelectionState(items[i], false); + } + + // Delete all entries in selectedItems hash + this._selectedItems.removeAll(); + + return true; +} + + + + +/*! +Select a range of items. + +#param vItem1[qx.ui.core.Widget]: Start item +#param vItem2[qx.ui.core.Widget]: Stop item +*/ +qx.Proto.selectItemRange = function(vItem1, vItem2) +{ + var oldVal = this._getChangeValue(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Call sub method to select the range of items + this._selectItemRange(vItem1, vItem2, true); + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if (oldFireChange && this._hasChanged(oldVal)) { + this._dispatchChange(); + } +} + + + + +/*! +Sub method for selectItemRange. Handles the real work +to select a range of items. + +#param vItem1[qx.ui.core.Widget]: Start item +#param vItem2[qx.ui.core.Widget]: Stop item +#param vDelect[Boolean]: Deselect currently selected items first? +*/ +qx.Proto._selectItemRange = function(vItem1, vItem2, vDeselect) +{ + // this.debug("SELECT_RANGE: " + vItem1.toText() + "<->" + vItem2.toText()); + // this.debug("SELECT_RANGE: " + vItem1.pos + "<->" + vItem2.pos); + + // Pre-Check a revert call if vItem2 is before vItem1 + if (this.isBefore(vItem2, vItem1)) { + return this._selectItemRange(vItem2, vItem1, vDeselect); + } + + // Deselect all + if (vDeselect) { + this._deselectAll(); + } + + var vCurrentItem = vItem1; + + while (vCurrentItem != null) + { + if (this.getItemEnabled(vCurrentItem)) + { + // Add item to selection + this._selectedItems.add(vCurrentItem); + + // Render new state for item + this.renderItemSelectionState(vCurrentItem, true); + } + + // Stop here if we reached target item + if (this.isEqual(vCurrentItem, vItem2)) { + break; + } + + // Get next item + vCurrentItem = this.getNext(vCurrentItem); + } + + return true; +} + +/*! +Internal method for deselection of ranges. + +#param vItem1[qx.ui.core.Widget]: Start item +#param vItem2[qx.ui.core.Widget]: Stop item +*/ +qx.Proto._deselectItemRange = function(vItem1, vItem2) +{ + // Pre-Check a revert call if vItem2 is before vItem1 + if (this.isBefore(vItem2, vItem1)) { + return this._deselectItemRange(vItem2, vItem1); + } + + var vCurrentItem = vItem1; + + while (vCurrentItem != null) + { + // Add item to selection + this._selectedItems.remove(vCurrentItem); + + // Render new state for item + this.renderItemSelectionState(vCurrentItem, false); + + // Stop here if we reached target item + if (this.isEqual(vCurrentItem, vItem2)) { + break; + } + + // Get next item + vCurrentItem = this.getNext(vCurrentItem); + } +} + + +/* +--------------------------------------------------------------------------- + MOUSE EVENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._activeDragSession = false; + +qx.Proto.handleMouseDown = function(vItem, e) +{ + // Only allow left and right button + if (!e.isLeftButtonPressed() && !e.isRightButtonPressed()) { + return; + } + + // Keep selection on right click on already selected item + if (e.isRightButtonPressed() && this.getItemSelected(vItem)) { + return; + } + + // Shift Key + // or + // Click on an unseleted item (without Strg) + if (e.isShiftPressed() || this.getDragSelection() || (!this.getItemSelected(vItem) && !e.isCtrlPressed())) + { + // Handle event + this._onmouseevent(vItem, e); + } + else + { + // Update lead item + this.setLeadItem(vItem); + } + + + // Handle dragging + this._activeDragSession = this.getDragSelection(); + + if (this._activeDragSession) + { + // Add mouseup listener and register as capture widget + this.getBoundedWidget().addEventListener("mouseup", this._ondragup, this); + this.getBoundedWidget().setCapture(true); + } +} + +qx.Proto._ondragup = function(e) +{ + this.getBoundedWidget().removeEventListener("mouseup", this._ondragup, this); + this.getBoundedWidget().setCapture(false); + this._activeDragSession = false; +} + +qx.Proto.handleMouseUp = function(vItem, e) +{ + if (!e.isLeftButtonPressed()) { + return; + } + + if (e.isCtrlPressed() || this.getItemSelected(vItem) && !this._activeDragSession) { + this._onmouseevent(vItem, e); + } + + if (this._activeDragSession) + { + this._activeDragSession = false; + this.getBoundedWidget().setCapture(false); + } +} + +qx.Proto.handleMouseOver = function(oItem, e) +{ + if (! this.getDragSelection() || !this._activeDragSession) { + return; + } + + this._onmouseevent(oItem, e, true); +} + +// currently unused placeholder +qx.Proto.handleClick = function(vItem, e) {} + +// currently unused placeholder +qx.Proto.handleDblClick = function(vItem, e) {} + + +/*! +Internal handler for all mouse events bound to this manager. +*/ +qx.Proto._onmouseevent = function(oItem, e, bOver) +{ + if (!this.getItemEnabled(oItem)) { + return; + } + + // ******************************************************************** + // Init + // ******************************************************************** + + // Cache current (old) values + var oldVal = this._getChangeValue(); + var oldLead = this.getLeadItem(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Cache selection and count + var selectedItems = this.getSelectedItems(); + var selectedCount = selectedItems.length; + + // Update lead item + this.setLeadItem(oItem); + + // Cache current anchor item + var currentAnchorItem = this.getAnchorItem(); + + // Cache keys pressed + var vCtrlKey = e.isCtrlPressed(); + var vShiftKey = e.isShiftPressed(); + + + // ******************************************************************** + // Do we need to update the anchor? + // ******************************************************************** + + if (!currentAnchorItem || selectedCount == 0 || (vCtrlKey && !vShiftKey && this.getMultiSelection() && !this.getDragSelection())) + { + this.setAnchorItem(oItem); + currentAnchorItem = oItem; + } + + + + // ******************************************************************** + // Mode #1: Replace current selection with new one + // ******************************************************************** + if ((!vCtrlKey && !vShiftKey && !this._activeDragSession || !this.getMultiSelection())) + { + if (!this.getItemEnabled(oItem)) { + return; + } + + // Remove current selection + this._deselectAll(); + + // Update anchor item + this.setAnchorItem(oItem); + + if (this._activeDragSession) + { + // a little bit hacky, but seems to be a fast way to detect if we slide to top or to bottom + this.scrollItemIntoView((this.getBoundedWidget().getScrollTop() > (this.getItemTop(oItem)-1) ? this.getPrevious(oItem) : this.getNext(oItem)) || oItem); + } + + if (!this.getItemSelected(oItem)) { + this.renderItemSelectionState(oItem, true); + } + + // Clear up and add new one + //this._selectedItems.removeAll(); + this._selectedItems.add(oItem); + + this._addToCurrentSelection = true; + } + + + // ******************************************************************** + // Mode #2: (De-)Select item range in mouse drag session + // ******************************************************************** + else if (this._activeDragSession && bOver) + { + if (oldLead) { + this._deselectItemRange(currentAnchorItem, oldLead); + } + + // Drag down + if (this.isBefore(currentAnchorItem, oItem)) + { + if (this._addToCurrentSelection) + { + this._selectItemRange(currentAnchorItem, oItem, false); + } + else + { + this._deselectItemRange(currentAnchorItem, oItem); + } + } + + // Drag up + else + { + if (this._addToCurrentSelection) + { + this._selectItemRange(oItem, currentAnchorItem, false); + } + else + { + this._deselectItemRange(oItem, currentAnchorItem); + } + } + + // a little bit hacky, but seems to be a fast way to detect if we slide to top or to bottom + this.scrollItemIntoView((this.getBoundedWidget().getScrollTop() > (this.getItemTop(oItem)-1) ? this.getPrevious(oItem) : this.getNext(oItem)) || oItem); + } + + + // ******************************************************************** + // Mode #3: Add new item to current selection (ctrl pressed) + // ******************************************************************** + else if (this.getMultiSelection() && vCtrlKey && !vShiftKey) + { + if (!this._activeDragSession) { + this._addToCurrentSelection = !(this.getCanDeselect() && this.getItemSelected(oItem)); + } + + this.setItemSelected(oItem, this._addToCurrentSelection); + this.setAnchorItem(oItem); + } + + + // ******************************************************************** + // Mode #4: Add new (or continued) range to selection + // ******************************************************************** + else if (this.getMultiSelection() && vCtrlKey && vShiftKey) + { + if (!this._activeDragSession) { + this._addToCurrentSelection = !(this.getCanDeselect() && this.getItemSelected(oItem)); + } + + if (this._addToCurrentSelection) + { + this._selectItemRange(currentAnchorItem, oItem, false); + } + else + { + this._deselectItemRange(currentAnchorItem, oItem); + } + } + + // ******************************************************************** + // Mode #5: Replace selection with new range selection + // ******************************************************************** + else if (this.getMultiSelection() && !vCtrlKey && vShiftKey) + { + if (this.getCanDeselect()) + { + this._selectItemRange(currentAnchorItem, oItem, true); + } + + else + { + if (oldLead) { + this._deselectItemRange(currentAnchorItem, oldLead); + } + + this._selectItemRange(currentAnchorItem, oItem, false); + } + } + + + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if(oldFireChange && this._hasChanged(oldVal)) { + this._dispatchChange(); + } +} + + + + +/* +--------------------------------------------------------------------------- + KEY EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto.handleKeyDown = function(vDomEvent) { + this.warn( + "qx.manager.selection.SelectionManager.handleKeyDown is deprecated! " + + "Use keypress insted and bind it to the onkeypress event." + ); + this.handleKeyPress(vDomEvent); +} + + +/** + * Handles key event to perform selection and navigation + * + * @param vDomEvent {qx.event.type.KeyEvent} event object + */ +qx.Proto.handleKeyPress = function(vDomEvent) +{ + var oldVal = this._getChangeValue(); + + // Temporary disabling of event fire + var oldFireChange = this.getFireChange(); + this.setFireChange(false); + + // Ctrl+A: Select all + if (vDomEvent.getKeyIdentifier() == "A" && vDomEvent.isCtrlPressed()) + { + if (this.getMultiSelection()) + { + this._selectAll(); + + // Update lead item to this new last + // (or better here: first) selected item + this.setLeadItem(this.getFirst()); + } + } + + // Default operation + else + { + var aIndex = this.getAnchorItem(); + var itemToSelect = this.getItemToSelect(vDomEvent); + + // this.debug("Anchor: " + (aIndex ? aIndex.getLabel() : "null")); + // this.debug("ToSelect: " + (itemToSelect ? itemToSelect.getLabel() : "null")); + + if (itemToSelect && this.getItemEnabled(itemToSelect)) + { + // Update lead item to this new last selected item + this.setLeadItem(itemToSelect); + + // Scroll new item into view + this.scrollItemIntoView(itemToSelect); + + // Stop event handling + vDomEvent.preventDefault(); + + // Select a range + if (vDomEvent.isShiftPressed() && this.getMultiSelection()) + { + // Make it a little bit more failsafe: + // Set anchor if not given already. Allows us to select + // a range without any previous selection. + if (aIndex == null) { + this.setAnchorItem(itemToSelect); + } + + // Select new range (and clear up current selection first) + this._selectItemRange(this.getAnchorItem(), itemToSelect, true); + } + else if (!vDomEvent.isCtrlPressed()) + { + // Clear current selection + this._deselectAll(); + + // Update new item to be selected + this.renderItemSelectionState(itemToSelect, true); + + // Add item to new selection + this._selectedItems.add(itemToSelect); + + // Update anchor to this new item + // (allows following shift range selection) + this.setAnchorItem(itemToSelect); + } + else if (vDomEvent.getKeyIdentifier() == "Space") + { + if (this._selectedItems.contains(itemToSelect)) + { + // Update new item to be selected + this.renderItemSelectionState(itemToSelect, false); + + // Add item to new selection + this._selectedItems.remove(itemToSelect); + + // Fix anchor item + this.setAnchorItem(this._selectedItems.getFirst()); + } + else + { + // Clear current selection + if (!vDomEvent.isCtrlPressed() || !this.getMultiSelection()) { + this._deselectAll(); + } + + // Update new item to be selected + this.renderItemSelectionState(itemToSelect, true); + + // Add item to new selection + this._selectedItems.add(itemToSelect); + + // Update anchor to this new item + // (allows following shift range selection) + this.setAnchorItem(itemToSelect); + } + } + } + } + + // Recover change event status + this.setFireChange(oldFireChange); + + // Dispatch change Event + if (oldFireChange && this._hasChanged(oldVal)) { + this._dispatchChange(); + } +} + +qx.Proto.getItemToSelect = function(vKeyboardEvent) +{ + // Don't handle ALT here + if (vKeyboardEvent.isAltPressed()) { + return null; + } + + // Handle event by keycode + switch (vKeyboardEvent.getKeyIdentifier()) + { + case "Home": + return this.getHome(this.getLeadItem()); + + case "End": + return this.getEnd(this.getLeadItem()); + + + case "Down": + return this.getDown(this.getLeadItem()); + + case "Up": + return this.getUp(this.getLeadItem()); + + + case "Left": + return this.getLeft(this.getLeadItem()); + + case "Right": + return this.getRight(this.getLeadItem()); + + + case "PageUp": + return this.getPageUp(this.getLeadItem()) || this.getHome(this.getLeadItem()); + + case "PageDown": + return this.getPageDown(this.getLeadItem()) || this.getEnd(this.getLeadItem()); + + + case "Space": + if (vKeyboardEvent.isCtrlPressed()) { + return this.getLeadItem(); + } + } + + return null; +} + + + + +/* +--------------------------------------------------------------------------- + CHANGE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._dispatchChange = function() +{ + if (!this.getFireChange()) { + return; + } + + if (this.hasEventListeners("changeSelection")) { + this.dispatchEvent(new qx.event.type.DataEvent("changeSelection", this.getSelectedItems()), true); + } +} + +qx.Proto._hasChanged = function(sOldValue) { + return sOldValue != this._getChangeValue(); +} + +qx.Proto._getChangeValue = function() { + return this._selectedItems.getChangeValue(); +} + + + + + + +/* +--------------------------------------------------------------------------- + POSITION HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getHome = function() { + return this.getFirst(); +} + +qx.Proto.getEnd = function() { + return this.getLast(); +} + +qx.Proto.getDown = function(vItem) +{ + if (!vItem) { + return this.getFirst(); + } + + return this.getMultiColumnSupport() ? (this.getUnder(vItem) || this.getLast()) : this.getNext(vItem); +} + +qx.Proto.getUp = function(vItem) +{ + if (!vItem) { + return this.getLast(); + } + + return this.getMultiColumnSupport() ? (this.getAbove(vItem) || this.getFirst()) : this.getPrevious(vItem); +} + +qx.Proto.getLeft = function(vItem) +{ + if (!this.getMultiColumnSupport()) { + return null; + } + + return !vItem ? this.getLast() : this.getPrevious(vItem); +} + +qx.Proto.getRight = function(vItem) +{ + if (!this.getMultiColumnSupport()) { + return null; + } + + return !vItem ? this.getFirst() : this.getNext(vItem); +} + +qx.Proto.getAbove = function(vItem) +{ + throw new Error("getAbove(): Not implemented yet"); +} + +qx.Proto.getUnder = function(vItem) +{ + throw new Error("getUnder(): Not implemented yet"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + PAGE HANDLING +--------------------------------------------------------------------------- +*/ + +/*! +Jump a "page" up. + +#param vItem[qx.ui.core.Widget]: Relative to this widget +*/ +qx.Proto.getPageUp = function(vItem) +{ + var vBoundedWidget = this.getBoundedWidget(); + var vParentScrollTop = vBoundedWidget.getScrollTop(); + var vParentClientHeight = vBoundedWidget.getClientHeight(); + + // Find next item + var newItem; + var nextItem = this.getLeadItem(); + if (!nextItem) { + nextItem = this.getFirst(); + } + + // Normally we should reach the status "lead" for the + // nextItem after two iterations. + var tryLoops = 0; + while (tryLoops < 2) + { + while (nextItem && (this.getItemTop(nextItem) - this.getItemHeight(nextItem) >= vParentScrollTop)) { + nextItem = this.getUp(nextItem); + } + + // This should never occour after the fix above + if (nextItem == null) { + break; + } + + // If the nextItem is not anymore the leadItem + // Means: There has occured a change. + // We break here. This is normally the second step. + if (nextItem != this.getLeadItem()) + { + // be sure that the top is reached + this.scrollItemIntoView(nextItem, true); + break; + } + + // Update scrolling (this is normally the first step) + // this.debug("Scroll-Up: " + (vParentScrollTop + vParentClientHeight - 2 * this.getItemHeight(nextItem))); + vBoundedWidget.setScrollTop(vParentScrollTop - vParentClientHeight - this.getItemHeight(nextItem)); + + // Use the real applied value instead of the calulated above + vParentScrollTop = vBoundedWidget.getScrollTop(); + + // Increment counter + tryLoops++; + } + + return nextItem; +} + +/*! +Jump a "page" down. + +#param vItem[qx.ui.core.Widget]: Relative to this widget +*/ +qx.Proto.getPageDown = function(vItem) +{ + var vBoundedWidget = this.getBoundedWidget(); + var vParentScrollTop = vBoundedWidget.getScrollTop(); + var vParentClientHeight = vBoundedWidget.getClientHeight(); + + // this.debug("Bound: " + (vBoundedWidget._getTargetNode() != vBoundedWidget.getElement())); + + // this.debug("ClientHeight-1: " + vBoundedWidget._getTargetNode().clientHeight); + // this.debug("ClientHeight-2: " + vBoundedWidget.getElement().clientHeight); + + // Find next item + var newItem; + var nextItem = this.getLeadItem(); + if (!nextItem) { + nextItem = this.getFirst(); + } + + // Normally we should reach the status "lead" for the + // nextItem after two iterations. + var tryLoops = 0; + while (tryLoops < 2) + { + // this.debug("Loop: " + tryLoops); + // this.debug("Info: " + nextItem + " :: " + (this.getItemTop(nextItem) + (2 * this.getItemHeight(nextItem))) + " <> " + (vParentScrollTop + vParentClientHeight)); + // this.debug("Detail: " + vParentScrollTop + ", " + vParentClientHeight); + + // Find next + while (nextItem && ((this.getItemTop(nextItem) + (2 * this.getItemHeight(nextItem))) <= (vParentScrollTop + vParentClientHeight))) { + nextItem = this.getDown(nextItem); + } + + // This should never occour after the fix above + if (nextItem == null) { + break; + } + + // If the nextItem is not anymore the leadItem + // Means: There has occured a change. + // We break here. This is normally the second step. + if (nextItem != this.getLeadItem()) { + break; + } + + // Update scrolling (this is normally the first step) + // this.debug("Scroll-Down: " + (vParentScrollTop + vParentClientHeight - 2 * this.getItemHeight(nextItem))); + vBoundedWidget.setScrollTop(vParentScrollTop + vParentClientHeight - 2 * this.getItemHeight(nextItem)); + + // Use the real applied value instead of the calulated above + vParentScrollTop = vBoundedWidget.getScrollTop(); + + // Increment counter + tryLoops++; + } + + //this.debug("Select: " + nextItem._labelObject.getHtml()); + + return nextItem; +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSE +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._selectedItems) + { + this._selectedItems.dispose(); + this._selectedItems = null; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/TreeFullControlSelectionManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/TreeFullControlSelectionManager.js new file mode 100644 index 0000000000..268160d20a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/TreeFullControlSelectionManager.js @@ -0,0 +1,208 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_treefullcontrol) + +************************************************************************ */ + +qx.OO.defineClass("qx.manager.selection.TreeFullControlSelectionManager", qx.manager.selection.SelectionManager, +function(vBoundedWidget) { + qx.manager.selection.SelectionManager.call(this, vBoundedWidget); +}); + +/*! +Should multiple selection be allowed? +*/ +qx.OO.changeProperty({ name : "multiSelection", type : "boolean", defaultValue : false }); + +/*! +Enable drag selection? +*/ +qx.OO.changeProperty({ name : "dragSelection", type : "boolean", defaultValue : false }); + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO BOUNDED WIDGET +--------------------------------------------------------------------------- +*/ + +qx.Proto._getFirst = function() { + return qx.lang.Array.getFirst(this.getItems()); +} + +qx.Proto._getLast = function() { + return qx.lang.Array.getLast(this.getItems()); +} + +qx.Proto.getItems = function() { + return this.getBoundedWidget().getItems(); +} + +qx.Proto.getNext = function(vItem) +{ + if (vItem) + { + if (qx.ui.treefullcontrol.Tree.isOpenTreeFolder(vItem)) + { + return vItem.getFirstVisibleChildOfFolder(); + } + else if (vItem.isLastVisibleChild()) + { + var vCurrent = vItem; + + while(vCurrent && vCurrent.isLastVisibleChild()) { + vCurrent = vCurrent.getParentFolder(); + } + + if (vCurrent && + vCurrent instanceof qx.ui.treefullcontrol.AbstractTreeElement && + vCurrent.getNextVisibleSibling() && + vCurrent.getNextVisibleSibling() instanceof qx.ui.treefullcontrol.AbstractTreeElement) { + return vCurrent.getNextVisibleSibling(); + } + } + else + { + return vItem.getNextVisibleSibling(); + } + } + else + { + return this.getBoundedWidget().getFirstTreeChild(); + } +} + +qx.Proto.getPrevious = function(vItem) +{ + if (vItem) + { + if (vItem == this.getBoundedWidget()) + { + return; + } + else if (vItem.isFirstVisibleChild()) + { + if (vItem.getParentFolder() instanceof qx.ui.treefullcontrol.TreeFolder) { + return vItem.getParentFolder(); + } + } + else + { + var vPrev = vItem.getPreviousVisibleSibling(); + + if (vPrev instanceof qx.ui.treefullcontrol.AbstractTreeElement) + { + while (vPrev instanceof qx.ui.treefullcontrol.AbstractTreeElement) + { + if (qx.ui.treefullcontrol.Tree.isOpenTreeFolder(vPrev)) + { + vPrev = vPrev.getLastVisibleChildOfFolder(); + } + else + { + break; + } + } + } + + return vPrev; + } + } + else + { + return this.getBoundedWidget().getLastTreeChild(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemTop = function(vItem) +{ + // Alternate method: + // return qx.html.Location.getPageBoxTop(vItem.getElement()) - qx.html.Location.getPageInnerTop(this.getBoundedWidget().getElement()); + + var vBoundedWidget = this.getBoundedWidget(); + var vElement = vItem.getElement(); + var vOffset = 0; + + while (vElement && vElement.qx_Widget != vBoundedWidget) + { + vOffset += vElement.offsetTop; + vElement = vElement.parentNode; + } + + return vOffset; +} + +qx.Proto.getItemHeight = function(vItem) +{ + if (vItem instanceof qx.ui.treefullcontrol.TreeFolder && + vItem._horizontalLayout) + { + return vItem._horizontalLayout.getOffsetHeight(); + } + else + { + return vItem.getOffsetHeight(); + } +} + +qx.Proto.scrollItemIntoView = function(vItem) +{ + if (vItem instanceof qx.ui.treefullcontrol.TreeFolder && + vItem._horizontalLayout) + { + return vItem._horizontalLayout.scrollIntoView(); + } + else + { + return vItem.scrollIntoView(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + ITEM STATE MANAGMENT +--------------------------------------------------------------------------- +*/ + +qx.Proto.renderItemSelectionState = function(vItem, vIsSelected) { + vItem.setSelected(vIsSelected); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/TreeSelectionManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/TreeSelectionManager.js new file mode 100644 index 0000000000..d140a341dc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/TreeSelectionManager.js @@ -0,0 +1,200 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tree) + +************************************************************************ */ + +qx.OO.defineClass("qx.manager.selection.TreeSelectionManager", qx.manager.selection.SelectionManager, +function(vBoundedWidget) { + qx.manager.selection.SelectionManager.call(this, vBoundedWidget); +}); + +/*! +Should multiple selection be allowed? +*/ +qx.OO.changeProperty({ name : "multiSelection", type : "boolean", defaultValue : false }); + +/*! +Enable drag selection? +*/ +qx.OO.changeProperty({ name : "dragSelection", type : "boolean", defaultValue : false }); + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO BOUNDED WIDGET +--------------------------------------------------------------------------- +*/ + +qx.Proto._getFirst = function() { + return qx.lang.Array.getFirst(this.getItems()); +} + +qx.Proto._getLast = function() { + return qx.lang.Array.getLast(this.getItems()); +} + +qx.Proto.getItems = function() { + return this.getBoundedWidget().getItems(); +} + +qx.Proto.getNext = function(vItem) +{ + if (vItem) + { + if (qx.ui.tree.Tree.isOpenTreeFolder(vItem)) + { + return vItem.getFirstVisibleChildOfFolder(); + } + else if (vItem.isLastVisibleChild()) + { + var vCurrent = vItem; + + while(vCurrent && vCurrent.isLastVisibleChild()) { + vCurrent = vCurrent.getParentFolder(); + } + + if (vCurrent && vCurrent instanceof qx.ui.tree.AbstractTreeElement && vCurrent.getNextVisibleSibling() && vCurrent.getNextVisibleSibling() instanceof qx.ui.tree.AbstractTreeElement) { + return vCurrent.getNextVisibleSibling(); + } + } + else + { + return vItem.getNextVisibleSibling(); + } + } + else + { + return this.getBoundedWidget().getFirstTreeChild(); + } +} + +qx.Proto.getPrevious = function(vItem) +{ + if (vItem) + { + if (vItem == this.getBoundedWidget()) + { + return; + } + else if (vItem.isFirstVisibleChild()) + { + if (vItem.getParentFolder() instanceof qx.ui.tree.TreeFolder) { + return vItem.getParentFolder(); + } + } + else + { + var vPrev = vItem.getPreviousVisibleSibling(); + + while (vPrev instanceof qx.ui.tree.AbstractTreeElement) + { + if (qx.ui.tree.Tree.isOpenTreeFolder(vPrev)) + { + vPrev = vPrev.getLastVisibleChildOfFolder(); + } + else + { + break; + } + } + + return vPrev; + } + } + else + { + return this.getBoundedWidget().getLastTreeChild(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemTop = function(vItem) +{ + // Alternate method: + // return qx.html.Location.getPageBoxTop(vItem.getElement()) - qx.html.Location.getPageInnerTop(this.getBoundedWidget().getElement()); + + var vBoundedWidget = this.getBoundedWidget(); + var vElement = vItem.getElement(); + var vOffset = 0; + + while (vElement && vElement.qx_Widget != vBoundedWidget) + { + vOffset += vElement.offsetTop; + vElement = vElement.parentNode; + } + + return vOffset; +} + +qx.Proto.getItemHeight = function(vItem) +{ + if (vItem instanceof qx.ui.tree.TreeFolder && vItem._horizontalLayout) + { + return vItem._horizontalLayout.getOffsetHeight(); + } + else + { + return vItem.getOffsetHeight(); + } +} + +qx.Proto.scrollItemIntoView = function(vItem) +{ + if (vItem instanceof qx.ui.tree.TreeFolder && vItem._horizontalLayout) + { + return vItem._horizontalLayout.scrollIntoView(); + } + else + { + return vItem.scrollIntoView(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + ITEM STATE MANAGMENT +--------------------------------------------------------------------------- +*/ + +qx.Proto.renderItemSelectionState = function(vItem, vIsSelected) { + vItem.setSelected(vIsSelected); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/VirtualSelectionManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/VirtualSelectionManager.js new file mode 100644 index 0000000000..f50f70c86d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/manager/selection/VirtualSelectionManager.js @@ -0,0 +1,145 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +/*! + This class represents a selection and manage incoming events for widgets which need selection support. +*/ +qx.OO.defineClass("qx.manager.selection.VirtualSelectionManager", qx.manager.selection.SelectionManager, +function(vBoundedWidget) { + qx.manager.selection.SelectionManager.call(this, vBoundedWidget); +}); + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO BOUNDED WIDGET +--------------------------------------------------------------------------- +*/ + +qx.Proto.getFirst = function() { + return qx.lang.Array.getFirst(this.getItems()); +} + +qx.Proto.getLast = function() { + return qx.lang.Array.getLast(this.getItems()); +} + +qx.Proto.getItems = function() { + return this.getBoundedWidget().getData(); +} + +qx.Proto.getNextSibling = function(vItem) +{ + var vData = this.getItems(); + return vData[vData.indexOf(vItem)+1]; +} + +qx.Proto.getPreviousSibling = function(vItem) +{ + var vData = this.getItems(); + return vData[vData.indexOf(vItem)-1]; +} + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItemHashCode = function(oItem) +{ + if (oItem._hash) { + return oItem._hash; + } + + return oItem._hash = qx.core.Object.toHashCode(oItem); +} + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO ITEM DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto.scrollItemIntoView = function(vItem, vTopLeft) { + this.getBoundedWidget().scrollItemIntoView(vItem, vTopLeft); +} + +qx.Proto.getItemLeft = function(vItem) { + return this.getBoundedWidget().getItemLeft(vItem); +} + +qx.Proto.getItemTop = function(vItem) { + return this.getBoundedWidget().getItemTop(vItem); +} + +qx.Proto.getItemWidth = function(vItem) { + return this.getBoundedWidget().getItemWidth(vItem); +} + +qx.Proto.getItemHeight = function(vItem) { + return this.getBoundedWidget().getItemHeight(vItem); +} + +/*! + In a qx.ui.listview.ListView there are no disabled entries support currently. +*/ +qx.Proto.getItemEnabled = function(vItem) { + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + ITEM STATE MANAGMENT +--------------------------------------------------------------------------- +*/ + +qx.Proto.renderItemSelectionState = function(vItem, vIsSelected) { + this.getBoundedWidget()._updateSelectionState(vItem, vIsSelected); +} + +qx.Proto.renderItemAnchorState = function(vItem, vIsAnchor) { + this.getBoundedWidget()._updateAnchorState(vItem, vIsAnchor); +} + +qx.Proto.renderItemLeadState = function(vItem, vIsLead) { + this.getBoundedWidget()._updateLeadState(vItem, vIsLead); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/Http.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/Http.js new file mode 100644 index 0000000000..d392aefc39 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/Http.js @@ -0,0 +1,33 @@ +/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL: http://www.eclipse.org/org/documents/epl-v10.php
+ See the LICENSE file in the project's top-level directory for details.
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.net.Http",
+{
+ METHOD_GET : "GET",
+ METHOD_POST : "POST",
+ METHOD_PUT : "PUT",
+ METHOD_HEAD : "HEAD",
+ METHOD_DELETE : "DELETE"
+});
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/HttpRequest.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/HttpRequest.js new file mode 100644 index 0000000000..66849b7cf5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/HttpRequest.js @@ -0,0 +1,88 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.net.HttpRequest"); + +/** + * Return a new XMLHttpRequest object suitable for the client browser. + * + * TODO: extract detection of MSXML version (run once) + * + * @return {HttpRequest} + */ +qx.Class.create = function() { return null }; + +if (window.XMLHttpRequest) +{ + qx.Class.create = function() + { + return new XMLHttpRequest; + }; +} +else if (window.ActiveXObject) +{ + qx.Class.create = function() + { + /* + According to information on the Microsoft XML Team's WebLog + it is recommended to check for availability of MSXML versions 6.0 and 3.0. + Other versions are included for completeness, 5.0 is excluded as it is + "off-by-default" in IE7 (which could trigger a goldbar). + + http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/aabe29a2-bad2-4cea-8387-314174252a74.asp + + MSXML 3 is preferred over MSXML 6 because the IE7 native XMLHttpRequest returns + a MSXML 3 document and so does not properly work with other types of xml documents. + */ + var vServers = + [ + "MSXML2.XMLHTTP.3.0", + "MSXML2.XMLHTTP.6.0", + "MSXML2.XMLHTTP.4.0", + "MSXML2.XMLHTTP", // v3.0 + "Microsoft.XMLHTTP" // v2.x + ]; + + var vObject; + var vServer; + + for (var i=0, l=vServers.length; i<l; i++) + { + vServer = vServers[i]; + + try + { + vObject = new ActiveXObject(vServer); + break; + } + catch(ex) + { + vObject = null; + } + } + return vObject + }; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/Protocol.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/Protocol.js new file mode 100644 index 0000000000..68b584d8ac --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/net/Protocol.js @@ -0,0 +1,37 @@ +/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL: http://www.eclipse.org/org/documents/epl-v10.php
+ See the LICENSE file in the project's top-level directory for details.
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.net.Protocol",
+{
+ HTTP : "http",
+ HTTPS : "https",
+ FTP : "ftp",
+ FILE : "file",
+
+ URI_HTTP : "http://",
+ URI_HTTPS : "https://",
+ URI_FTP : "ftp://",
+ URI_FILE : "file://"
+});
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/Border.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/Border.js new file mode 100644 index 0000000000..f5ac249de3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/Border.js @@ -0,0 +1,1187 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.core.Client) +#require(qx.renderer.color.ColorCache) +#load(qx.renderer.border.BorderObject) + +************************************************************************ */ + +/*! + Border implementation for qx.ui.core.Widget instances. +*/ +qx.OO.defineClass("qx.renderer.border.Border", qx.core.Object, +function(vWidth, vStyle, vColor) +{ + qx.core.Object.call(this); + + this._themedEdges = {}; + this._initCache(); + + if (vWidth != null) + { + this.setWidth(vWidth); + + if (vStyle != null) { + this.setStyle(vStyle); + } + + if (vColor != null) { + this.setColor(vColor); + } + } +}); + + +qx.Class.enhancedCrossBrowserMode = true; + +qx.Proto._needsCompilationTop = true; +qx.Proto._needsCompilationRight = true; +qx.Proto._needsCompilationBottom = true; +qx.Proto._needsCompilationLeft = true; + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "topWidth", type : "number", defaultValue : 0, impl : "borderTopProperty" }); +qx.OO.addProperty({ name : "rightWidth", type : "number", defaultValue : 0, impl : "borderRightProperty" }); +qx.OO.addProperty({ name : "bottomWidth", type : "number", defaultValue : 0, impl : "borderBottomProperty" }); +qx.OO.addProperty({ name : "leftWidth", type : "number", defaultValue : 0, impl : "borderLeftProperty" }); + +qx.OO.addProperty({ name : "topStyle", type : "string", defaultValue : "none", impl : "borderTopProperty" }); +qx.OO.addProperty({ name : "rightStyle", type : "string", defaultValue : "none", impl : "borderRightProperty" }); +qx.OO.addProperty({ name : "bottomStyle", type : "string", defaultValue : "none", impl : "borderBottomProperty" }); +qx.OO.addProperty({ name : "leftStyle", type : "string", defaultValue : "none", impl : "borderLeftProperty" }); + +qx.OO.addProperty({ name : "topColor", impl : "borderTopProperty", type : "object", instance : "qx.renderer.color.Color", convert : qx.renderer.color.ColorCache }); +qx.OO.addProperty({ name : "rightColor", impl : "borderRightProperty", type : "object", instance : "qx.renderer.color.Color", convert : qx.renderer.color.ColorCache }); +qx.OO.addProperty({ name : "bottomColor", impl : "borderBottomProperty", type : "object", instance : "qx.renderer.color.Color", convert : qx.renderer.color.ColorCache }); +qx.OO.addProperty({ name : "leftColor", impl : "borderLeftProperty", type : "object", instance : "qx.renderer.color.Color", convert : qx.renderer.color.ColorCache }); + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.renderer.border.Border.fromString = function(vDefString) +{ + var vBorder = new qx.renderer.border.Border; + var vAllParts = vDefString.split(/\s+/); + var vPart, vTemp; + + for (var i=0; i<vAllParts.length; i++) + { + switch(vPart = vAllParts[i]) + { + case "groove": + case "ridge": + case "inset": + case "outset": + case "solid": + case "dotted": + case "dashed": + case "double": + case "none": + vBorder.setStyle(vPart); + break; + + default: + vTemp = parseFloat(vPart); + + if(vTemp == vPart || qx.lang.String.contains(vPart, "px")) + { + vBorder.setWidth(vTemp); + } + else + { + vPart = vPart.toLowerCase(); + vBorder.setColor(new qx.renderer.color.Color(vPart)); + } + + break; + } + } + + return vBorder; +} + + + + + +/* +--------------------------------------------------------------------------- + COMPATIBILITY TO qx.renderer.border.BorderOBJECT +--------------------------------------------------------------------------- +*/ + +qx.Proto.addListenerWidget = qx.lang.Function.returnTrue; +qx.Proto.removeListenerWidget = qx.lang.Function.returnTrue; + +qx.Proto._sync = qx.lang.Function.returnTrue; + + + + + +/* +--------------------------------------------------------------------------- + COMBINED SETTERS +--------------------------------------------------------------------------- +*/ + +qx.Proto.setWidth = function(vWidth) +{ + this.setTopWidth(vWidth); + this.setRightWidth(vWidth); + this.setBottomWidth(vWidth); + this.setLeftWidth(vWidth); + + return true; +} + +qx.Proto.setStyle = function(vStyle) +{ + this.setTopStyle(vStyle); + this.setRightStyle(vStyle); + this.setBottomStyle(vStyle); + this.setLeftStyle(vStyle); + + return true; +} + +qx.Proto.setColor = function(vColor) +{ + this.setTopColor(vColor); + this.setRightColor(vColor); + this.setBottomColor(vColor); + this.setLeftColor(vColor); + + return true; +} + + + + +qx.Proto.setTop = function(vWidth, vStyle, vColor) +{ + this.setTopWidth(vWidth); + this.setTopStyle(vStyle); + this.setTopColor(vColor); + + return true; +} + +qx.Proto.setRight = function(vWidth, vStyle, vColor) +{ + this.setRightWidth(vWidth); + this.setRightStyle(vStyle); + this.setRightColor(vColor); + + return true; +} + +qx.Proto.setBottom = function(vWidth, vStyle, vColor) +{ + this.setBottomWidth(vWidth); + this.setBottomStyle(vStyle); + this.setBottomColor(vColor); + + return true; +} + +qx.Proto.setLeft = function(vWidth, vStyle, vColor) +{ + this.setLeftWidth(vWidth); + this.setLeftStyle(vStyle); + this.setLeftColor(vColor); + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + INITIALISATION OF CACHE +--------------------------------------------------------------------------- +*/ + + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._initCache = function() + { + this._defsX = + { + borderLeft : "", + borderRight : "", + + MozBorderLeftColors : "", + MozBorderRightColors : "" + } + + this._defsY = + { + borderTop : "", + borderBottom : "", + + MozBorderTopColors : "", + MozBorderBottomColors : "" + } + } +} +else +{ + qx.Proto._initCache = function() + { + this._defsX = + { + borderLeft : "", + borderRight : "" + } + + this._defsY = + { + borderTop : "", + borderBottom : "" + } + + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + this._enhancedDefsX = + { + borderLeft : "", + borderRight : "" + } + + this._enhancedDefsY = + { + borderTop : "", + borderBottom : "" + } + } + } +} + + +/* +--------------------------------------------------------------------------- + BORDER MODIFIER AND SYNCER +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isGecko() || qx.renderer.border.Border.enhancedCrossBrowserMode) +{ + qx.Proto._addToThemed3DColors = function(vProp) + { + var needRegistering = qx.lang.Object.isEmpty(this._themedEdges); + + this._themedEdges[vProp] = true; + + if (needRegistering) + { + (new qx.renderer.color.ColorObject("ThreeDDarkShadow")).add(this); + (new qx.renderer.color.ColorObject("ThreeDShadow")).add(this); + (new qx.renderer.color.ColorObject("ThreeDLightShadow")).add(this); + (new qx.renderer.color.ColorObject("ThreeDHighlight")).add(this); + } + } + + qx.Proto._removeFromThemed3DColors = function(vProp) + { + delete this._themedEdges[vProp]; + + if (qx.lang.Object.isEmpty(this._themedEdges)) + { + (new qx.renderer.color.ColorObject("ThreeDDarkShadow")).remove(this); + (new qx.renderer.color.ColorObject("ThreeDShadow")).remove(this); + (new qx.renderer.color.ColorObject("ThreeDLightShadow")).remove(this); + (new qx.renderer.color.ColorObject("ThreeDHighlight")).remove(this); + } + } +} +else +{ + qx.Proto._addToThemed3DColors = function(vProp) + { + var needRegistering = qx.lang.Object.isEmpty(this._themedEdges); + + this._themedEdges[vProp] = true; + + if (needRegistering) + { + (new qx.renderer.color.ColorObject("ThreeDLightShadow")).add(this); + } + } + + qx.Proto._removeFromThemed3DColors = function(vProp) + { + delete this._themedEdges[vProp]; + + if (qx.lang.Object.isEmpty(this._themedEdges)) + { + (new qx.renderer.color.ColorObject("ThreeDLightShadow")).remove(this); + } + } +} + + + + + +qx.renderer.border.Border.data = +{ + 1 : + { + outset : + { + top : [ "threedhighlight" ], + right : [ "threedshadow" ], + bottom : [ "threedshadow" ], + left : [ "threedhighlight" ] + }, + + inset : + { + top : [ "threedshadow" ], + right : [ "threedhighlight" ], + bottom : [ "threedhighlight" ], + left : [ "threedshadow" ] + } + }, + + 2 : + { + outset : + { + top : [ "threedlightshadow", "threedhighlight" ], + right : [ "threeddarkshadow", "threedshadow" ], + bottom : [ "threeddarkshadow", "threedshadow" ], + left : [ "threedlightshadow", "threedhighlight" ] + }, + + inset : + { + top : [ "threedshadow", "threeddarkshadow" ], + right : [ "threedhighlight", "threedlightshadow" ], + bottom : [ "threedhighlight", "threedlightshadow" ], + left : [ "threedshadow", "threeddarkshadow" ] + }, + + ridge : + { + top : [ "threedhighlight", "threedshadow" ], + right : [ "threedshadow", "threedhighlight" ], + bottom : [ "threedshadow", "threedhighlight" ], + left : [ "threedhighlight", "threedshadow" ] + }, + + groove : + { + top : [ "threedshadow", "threedhighlight" ], + right : [ "threedhighlight", "threedshadow" ], + bottom : [ "threedhighlight", "threedshadow" ], + left : [ "threedshadow", "threedhighlight" ] + } + } +} + + + + + +qx.Proto._generateDefString = function(vWidth, vStyle, vColor) +{ + if (typeof vWidth !== "number" || vWidth < 0) { + return ""; + } + + var vArr = [ vWidth + "px" ]; + + if (vStyle != null) { + vArr.push(vStyle); + } + + if (vColor instanceof qx.renderer.color.Color) { + vColor = vColor.getStyle(); + } + + if (vColor != null) { + vArr.push(vColor); + } + + return vArr.join(" "); +} + + + + +// TODO: Add more smartness ;) +// Only update the border edges which depends on this color object +qx.Proto._updateColors = function(vColorObject, vNewValue) +{ + this._needsCompilationTop = true; + this._needsCompilationRight = true; + this._needsCompilationBottom = true; + this._needsCompilationLeft = true; + + this._sync("top"); + this._sync("right"); + this._sync("bottom"); + this._sync("left"); +} + + + + + + + +qx.Proto._handleColorRegistration = function(propValue, propOldValue, propData) +{ + if (qx.lang.String.contains(propData.name, "Style")) + { + switch(propValue) + { + case "outset": + case "inset": + case "groove": + case "ridge": + this._addToThemed3DColors(propData.name); + break; + + default: + this._removeFromThemed3DColors(propData.name); + } + } + + if (qx.lang.String.contains(propData.name, "Color")) + { + if (propOldValue instanceof qx.renderer.color.ColorObject) + { + // detect if there are no other deps anymore + switch(propOldValue) + { + case this.getTopColor(): + case this.getRightColor(): + case this.getBottomColor(): + case this.getLeftColor(): + break; + + default: + propOldValue.remove(this); + } + } + + if (propValue instanceof qx.renderer.color.ColorObject) + { + // simply add, internal storage is a hash key so + // this is not a problem also if this is already + // registered there. + propValue.add(this); + } + } +} + + + + + + + + +qx.Proto._modifyBorderTopProperty = function(propValue, propOldValue, propData) +{ + this._handleColorRegistration(propValue, propOldValue, propData); + + this._needsCompilationTop = true; + this._useEnhancedCrossBrowserMode = null; + + this._sync("top"); + + return true; +} + +qx.Proto._modifyBorderRightProperty = function(propValue, propOldValue, propData) +{ + this._handleColorRegistration(propValue, propOldValue, propData); + + this._needsCompilationRight = true; + this._useEnhancedCrossBrowserMode = null; + + this._sync("right"); + + return true; +} + +qx.Proto._modifyBorderBottomProperty = function(propValue, propOldValue, propData) +{ + this._handleColorRegistration(propValue, propOldValue, propData); + + this._needsCompilationBottom = true; + this._useEnhancedCrossBrowserMode = null; + + this._sync("bottom"); + + return true; +} + +qx.Proto._modifyBorderLeftProperty = function(propValue, propOldValue, propData) +{ + this._handleColorRegistration(propValue, propOldValue, propData); + + this._needsCompilationLeft = true; + this._useEnhancedCrossBrowserMode = null; + + this._sync("left"); + + return true; +} + + + + + + + + + +qx.Proto.getUseEnhancedCrossBrowserMode = function() +{ + if (this._useEnhancedCrossBrowserMode == null) { + this._useEnhancedCrossBrowserMode = this._evalUseEnhancedCrossBrowserMode(); + } + + return this._useEnhancedCrossBrowserMode; +} + +qx.Proto._evalUseEnhancedCrossBrowserMode = function() +{ + if (this.getTopWidth() == 2) { + switch(this.getTopStyle()) { + case "outset": case "inset": case "groove": case "ridge": return true; + } + } + + if (this.getRightWidth() == 2) { + switch(this.getRightStyle()) { + case "outset": case "inset": case "groove": case "ridge": return true; + } + } + + if (this.getBottomWidth() == 2) { + switch(this.getBottomStyle()) { + case "outset": case "inset": case "groove": case "ridge": return true; + } + } + + if (this.getLeftWidth() == 2) { + switch(this.getLeftStyle()) { + case "outset": case "inset": case "groove": case "ridge": return true; + } + } + + return false; +} + + + + + + +/* +--------------------------------------------------------------------------- + BORDER APPLY IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyWidget = function(o) +{ + this._applyWidgetX(o); + this._applyWidgetY(o); +} + +qx.Proto._resetWidget = function(o) +{ + this._resetWidgetX(o); + this._resetWidgetY(o); +} + +qx.Proto._resetWidgetX = function(o) { + return qx.renderer.border.Border._resetBorderX(o); +} + +qx.Proto._resetWidgetY = function(o) { + return qx.renderer.border.Border._resetBorderY(o); +} + +qx.Proto._applyWidgetXCommon = function(vObject) +{ + if (this._needsCompilationLeft) { + this._compileLeft(); + } + + if (this._needsCompilationRight) { + this._compileRight(); + } + + for (var i in this._defsX) { + vObject._style[i] = this._defsX[i]; + } + + if (!qx.core.Client.getInstance().isGecko() && qx.renderer.border.Border.enhancedCrossBrowserMode) + { + if (this.getUseEnhancedCrossBrowserMode()) { + vObject._createElementForEnhancedBorder(); + } + + if (vObject._borderStyle) + { + for (var i in this._enhancedDefsX) { + vObject._borderStyle[i] = this._enhancedDefsX[i]; + } + } + } +} + +qx.Proto._applyWidgetYCommon = function(vObject) +{ + if (this._needsCompilationTop) { + this._compileTop(); + } + + if (this._needsCompilationBottom) { + this._compileBottom(); + } + + for (var i in this._defsY) { + vObject._style[i] = this._defsY[i]; + } + + if (!qx.core.Client.getInstance().isGecko() && qx.renderer.border.Border.enhancedCrossBrowserMode) + { + if (this.getUseEnhancedCrossBrowserMode()) { + vObject._createElementForEnhancedBorder(); + } + + if (vObject._borderStyle) + { + for (var i in this._enhancedDefsY) { + vObject._borderStyle[i] = this._enhancedDefsY[i]; + } + } + } +} + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._applyWidgetX = qx.Proto._applyWidgetXCommon; + qx.Proto._applyWidgetY = qx.Proto._applyWidgetYCommon; + + qx.Proto._generateMozColorDefString = function(vWidth, vStyle, vEdge) + { + try + { + try { + var a = qx.renderer.border.Border.data[vWidth][vStyle][vEdge]; + } catch(ex) {} + + if (typeof a === "object") + { + for (var i=0, s=[], l=a.length; i<l; i++) { + s.push((new qx.renderer.color.ColorObject(a[i]).getStyle())); + } + + return s.join(" "); + } + } + catch(ex) { + this.error("Failed to generate Mozilla Color Definition Strings", ex); + } + + return ""; + } + + qx.Proto._compileTop = function() + { + var w=this.getTopWidth(), s=this.getTopStyle(), d=this._defsY; + + d.borderTop = this._generateDefString(w, s, this.getTopColor()); + d.MozBorderTopColors = this._generateMozColorDefString(w, s, "top"); + + this._needsCompilationTop = false; + } + + qx.Proto._compileRight = function() + { + var w=this.getRightWidth(), s=this.getRightStyle(), d=this._defsX; + + d.borderRight = this._generateDefString(w, s, this.getRightColor()); + d.MozBorderRightColors = this._generateMozColorDefString(w, s, "right"); + + this._needsCompilationRight = false; + } + + qx.Proto._compileBottom = function() + { + var w=this.getBottomWidth(), s=this.getBottomStyle(), d=this._defsY; + + d.borderBottom = this._generateDefString(w, s, this.getBottomColor()); + d.MozBorderBottomColors = this._generateMozColorDefString(w, s, "bottom"); + + this._needsCompilationBottom = false; + } + + qx.Proto._compileLeft = function() + { + var w=this.getLeftWidth(), s=this.getLeftStyle(), d=this._defsX; + + d.borderLeft = this._generateDefString(w, s, this.getLeftColor()); + d.MozBorderLeftColors = this._generateMozColorDefString(w, s, "left"); + + this._needsCompilationLeft = false; + } + + qx.renderer.border.Border._resetBorderX = function(o) + { + var s = o._style; + s.borderLeft = s.borderRight = s.MozBorderLeftColors = s.MozBorderRightColors = ""; + } + + qx.renderer.border.Border._resetBorderY = function(o) + { + var s = o._style; + s.borderTop = s.borderBottom = s.MozBorderTopColors = s.MozBorderBottomColors = ""; + } +} +else +{ + qx.Proto._applyWidgetX = function(vObject) + { + this._applyWidgetXCommon(vObject); + + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + if (this.getUseEnhancedCrossBrowserMode()) { + vObject._createElementForEnhancedBorder(); + } + + if (vObject._borderStyle) + { + for (var i in this._enhancedDefsX) { + vObject._borderStyle[i] = this._enhancedDefsX[i]; + } + } + } + } + + qx.Proto._applyWidgetY = function(vObject) + { + this._applyWidgetYCommon(vObject); + + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + if (this.getUseEnhancedCrossBrowserMode()) { + vObject._createElementForEnhancedBorder(); + } + + if (vObject._borderStyle) + { + for (var i in this._enhancedDefsY) { + vObject._borderStyle[i] = this._enhancedDefsY[i]; + } + } + } + } + + qx.Proto._compileTop = function() + { + var vTopWidth = this.getTopWidth(); + var vTopStyle = this.getTopStyle(); + var vTopColor = this.getTopColor(); + + switch(vTopWidth) + { + case 1: + switch(vTopStyle) + { + case "outset": + case "inset": + vTopColor = (new qx.renderer.color.ColorObject(qx.renderer.border.Border.data[vTopWidth][vTopStyle]["top"][0])); + vTopStyle = "solid"; + } + + break; + + case 2: + switch(vTopStyle) + { + case "outset": + case "inset": + case "groove": + case "ridge": + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + try + { + var c = qx.renderer.border.Border.data[vTopWidth][vTopStyle]["top"]; + + if (typeof c === "object") + { + vTopStyle = "solid"; + vTopWidth = 1; + vTopColor = (new qx.renderer.color.ColorObject(c[1])); + + this._enhancedDefsY.borderTop = this._generateDefString(vTopWidth, vTopStyle, vTopColor); + + vTopColor = (new qx.renderer.color.ColorObject(c[0])); + } + } + catch(ex) + { + this.error("Failed to compile top border", ex); + this.warn("Details: Width=" + vTopWidth + ", Style=" + vTopStyle); + } + } + else + { + vTopColor = (new qx.renderer.color.ColorObject("threedlightshadow")); + } + } + + break; + } + + this._defsY.borderTop = this._generateDefString(vTopWidth, vTopStyle, vTopColor); + this._needsCompilationTop = false; + } + + qx.Proto._compileRight = function() + { + var vRightWidth = this.getRightWidth(); + var vRightStyle = this.getRightStyle(); + var vRightColor = this.getRightColor(); + + switch(vRightWidth) + { + case 1: + switch(vRightStyle) + { + case "outset": + case "inset": + vRightColor = (new qx.renderer.color.ColorObject(qx.renderer.border.Border.data[vRightWidth][vRightStyle]["right"][0])); + vRightStyle = "solid"; + } + + break; + + case 2: + switch(vRightStyle) + { + case "outset": + case "inset": + case "groove": + case "ridge": + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + try + { + var c = qx.renderer.border.Border.data[vRightWidth][vRightStyle]["right"]; + + if (typeof c === "object") + { + vRightStyle = "solid"; + vRightWidth = 1; + vRightColor = (new qx.renderer.color.ColorObject(c[1])); + + this._enhancedDefsX.borderRight = this._generateDefString(vRightWidth, vRightStyle, vRightColor); + + vRightColor = (new qx.renderer.color.ColorObject(c[0])); + } + } + catch(ex) + { + this.error("Failed to compile right border", ex); + this.warn("Details: Width=" + vRightWidth + ", Style=" + vRightStyle); + } + } + else + { + vRightColor = (new qx.renderer.color.ColorObject("threedlightshadow")); + } + } + + break; + } + + this._defsX.borderRight = this._generateDefString(vRightWidth, vRightStyle, vRightColor); + this._needsCompilationRight = false; + } + + qx.Proto._compileBottom = function() + { + var vBottomWidth = this.getBottomWidth(); + var vBottomStyle = this.getBottomStyle(); + var vBottomColor = this.getBottomColor(); + + switch(vBottomWidth) + { + case 1: + switch(vBottomStyle) + { + case "outset": + case "inset": + vBottomColor = (new qx.renderer.color.ColorObject(qx.renderer.border.Border.data[vBottomWidth][vBottomStyle]["bottom"][0])); + vBottomStyle = "solid"; + } + + break; + + case 2: + switch(vBottomStyle) + { + case "outset": + case "inset": + case "groove": + case "ridge": + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + try + { + var c = qx.renderer.border.Border.data[vBottomWidth][vBottomStyle]["bottom"]; + + if (typeof c === "object") + { + vBottomStyle = "solid"; + vBottomWidth = 1; + vBottomColor = (new qx.renderer.color.ColorObject(c[1])); + + this._enhancedDefsY.borderBottom = this._generateDefString(vBottomWidth, vBottomStyle, vBottomColor); + + vBottomColor = (new qx.renderer.color.ColorObject(c[0])); + } + } + catch(ex) { + this.error("Failed to compile bottom border", ex); + this.warn("Details: Width=" + vBottomWidth + ", Style=" + vBottomStyle); + } + } + else + { + vBottomColor = (new qx.renderer.color.ColorObject("threedlightshadow")); + } + } + + break; + } + + this._defsY.borderBottom = this._generateDefString(vBottomWidth, vBottomStyle, vBottomColor); + this._needsCompilationBottom = false; + } + + qx.Proto._compileLeft = function() + { + var vLeftWidth = this.getLeftWidth(); + var vLeftStyle = this.getLeftStyle(); + var vLeftColor = this.getLeftColor(); + + switch(vLeftWidth) + { + case 1: + switch(vLeftStyle) + { + case "outset": + case "inset": + vLeftColor = (new qx.renderer.color.ColorObject(qx.renderer.border.Border.data[vLeftWidth][vLeftStyle]["left"][0])); + vLeftStyle = "solid"; + } + + break; + + case 2: + switch(vLeftStyle) + { + case "outset": + case "inset": + case "groove": + case "ridge": + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + try + { + var c = qx.renderer.border.Border.data[vLeftWidth][vLeftStyle]["left"]; + + if (typeof c === "object") + { + vLeftStyle = "solid"; + vLeftWidth = 1; + vLeftColor = (new qx.renderer.color.ColorObject(c[1])); + + this._enhancedDefsX.borderLeft = this._generateDefString(vLeftWidth, vLeftStyle, vLeftColor); + + vLeftColor = (new qx.renderer.color.ColorObject(c[0])); + } + } + catch(ex) { + this.error("Failed to compile left border", ex); + this.warn("Details: Width=" + vLeftWidth + ", Style=" + vLeftStyle); + } + } + else + { + vLeftColor = (new qx.renderer.color.ColorObject("threedlightshadow")); + } + } + + break; + } + + this._defsX.borderLeft = this._generateDefString(vLeftWidth, vLeftStyle, vLeftColor); + this._needsCompilationLeft = false; + } + + qx.renderer.border.Border._resetBorderX = function(o) + { + var s = o._style; + s.borderLeft = s.borderRight = "0px none"; + + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + s = o._borderStyle; + if (s) { + s.borderLeft = s.borderRight = "0px none"; + } + } + } + + qx.renderer.border.Border._resetBorderY = function(o) + { + var s = o._style; + s.borderTop = s.borderBottom = "0px none"; + + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + s = o._borderStyle; + if (s) { + s.borderTop = s.borderBottom = "0px none"; + } + } + } +} + + + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (typeof this._defsX === "object") { + for (var i in this._defsX) { + delete this._defsX[i]; + } + } + + delete this._defsX; + + if (typeof this._defsY === "object") { + for (var i in this._defsY) { + delete this._defsY[i]; + } + } + + delete this._defsY; + + if (qx.renderer.border.Border.enhancedCrossBrowserMode) + { + if (typeof this._enhancedDefsX === "object") { + for (var i in this._enhancedDefsX) { + delete this._enhancedDefsX[i]; + } + } + + delete this._enhancedDefsX; + + if (typeof this._enhancedDefsY === "object") { + for (var i in this._enhancedDefsY) { + delete this._enhancedDefsY[i]; + } + } + + delete this._enhancedDefsY; + } + + delete this._themedEdges; + + return qx.core.Object.prototype.dispose.call(this); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + PRESETS +--------------------------------------------------------------------------- +*/ + +/* +qx.Class.presets = +{ + black : new qx.Class(1, "solid", "black"), + white : new qx.Class(1, "solid", "white"), + none : new qx.Class(0, "none") +} +*/ diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderCache.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderCache.js new file mode 100644 index 0000000000..d8a9ac9d3d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderCache.js @@ -0,0 +1,64 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.border.BorderCache"); + +qx.renderer.border.BorderCache = function(propValue, propData) +{ + if (qx.util.Validation.isValidArray(propValue) && propValue.length > 1) + { + propString = ""; + + for (var i=0, l=propValue.length, p; i<l; i++) + { + p = propValue[i]; + + propString += p; + + if (typeof p === "number") { + propString += "px"; + } + + if (i<(l-1)) { + propString += " "; + } + } + + propValue = propString; + } + else if (qx.util.Validation.isInvalidString(propValue)) + { + return propValue; + } + + if (qx.renderer.border.BorderCache._data[propValue]) { + return qx.renderer.border.BorderCache._data[propValue]; + } + + return qx.renderer.border.BorderCache._data[propValue] = qx.renderer.border.BorderObject.fromString(propValue); +} + +qx.renderer.border.BorderCache._data = {}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderObject.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderObject.js new file mode 100644 index 0000000000..89a963cf41 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderObject.js @@ -0,0 +1,151 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.border.BorderObject", qx.renderer.border.Border, +function(vWidth, vStyle, vColor) +{ + this._dependentObjects = {}; + + qx.renderer.border.Border.call(this, vWidth, vStyle, vColor); +}); + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.renderer.border.BorderObject.fromString = function(vDefString) +{ + var vBorder = new qx.renderer.border.BorderObject; + var vAllParts = vDefString.split(/\s+/); + var vPart, vTemp; + + for (var i=0; i<vAllParts.length; i++) + { + vPart = vAllParts[i]; + + switch(vPart) + { + case "groove": + case "ridge": + case "inset": + case "outset": + case "solid": + case "dotted": + case "dashed": + case "double": + case "none": + vBorder.setStyle(vPart); + break; + + default: + vTemp = parseFloat(vPart); + + if(vTemp == vPart || qx.lang.String.contains(vPart, "px")) + { + vBorder.setWidth(vTemp); + } + else + { + vPart = vPart.toLowerCase(); + vBorder.setColor(qx.renderer.color.Color.themedNames[vPart] ? new qx.renderer.color.ColorObject(vPart) : new qx.renderer.color.Color(vPart)); + } + + break; + } + } + + return vBorder; +} + + + + + + +/* +--------------------------------------------------------------------------- + WIDGET CONNECTION +--------------------------------------------------------------------------- +*/ + +qx.Proto.addListenerWidget = function(o) { + this._dependentObjects[o.toHashCode()] = o; +} + +qx.Proto.removeListenerWidget = function(o) { + delete this._dependentObjects[o.toHashCode()]; +} + +qx.Proto._sync = function(vEdge) +{ + var vAll = this._dependentObjects; + var vCurrent; + + for (vKey in vAll) + { + vCurrent = vAll[vKey]; + + if (vCurrent.isCreated()) { + vCurrent._updateBorder(vEdge); + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (typeof this._dependentObjects === "object") + { + var vAll = this._dependentObjects; + for (vKey in vAll) { + delete vAll[vKey]; + } + + vAll = null; + delete this._dependentObjects; + } + + return qx.renderer.border.Border.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderPresets.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderPresets.js new file mode 100644 index 0000000000..8ac7fbe439 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/border/BorderPresets.js @@ -0,0 +1,73 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/*! + Some common used border styles. +*/ +qx.OO.defineClass("qx.renderer.border.BorderPresets", qx.core.Object, function() +{ + qx.core.Object.call(this); + + this.black = new qx.renderer.border.Border(1, "solid", "black"); + this.white = new qx.renderer.border.Border(1, "solid", "white"); + this.none = new qx.renderer.border.Border(0, "none"); + + this.inset = new qx.renderer.border.BorderObject(2, "inset"); + this.outset = new qx.renderer.border.BorderObject(2, "outset"); + this.groove = new qx.renderer.border.BorderObject(2, "groove"); + this.ridge = new qx.renderer.border.BorderObject(2, "ridge"); + this.thinInset = new qx.renderer.border.BorderObject(1, "inset"); + this.thinOutset = new qx.renderer.border.BorderObject(1, "outset"); + + this.verticalDivider = new qx.renderer.border.BorderObject(1, "inset"); + this.verticalDivider.setLeftWidth(0); + this.verticalDivider.setRightWidth(0); + + this.horizontalDivider = new qx.renderer.border.BorderObject(1, "inset"); + this.horizontalDivider.setTopWidth(0); + this.horizontalDivider.setBottomWidth(0); + + this.shadow = new qx.renderer.border.BorderObject(1, "solid", "threedshadow"); + this.lightShadow = new qx.renderer.border.BorderObject(1, "solid", "threedlightshadow"); + this.info = new qx.renderer.border.BorderObject(1, "solid", "infotext"); +}); + + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js new file mode 100644 index 0000000000..37af8611fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js @@ -0,0 +1,669 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.lang.Function) +#load(qx.renderer.color.ColorObject) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.color.Color", qx.core.Object, +function(vValue) +{ + if (vValue != null) { + this.setValue(vValue); + } + + qx.core.Object.call(this); +}); + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Class.rgb2style = function(r, g, b) { + return "rgb(" + r + "," + g + "," + b + ")"; +} + + + + + +/* +--------------------------------------------------------------------------- + CORE DATA +--------------------------------------------------------------------------- +*/ + +qx.renderer.color.Color.m_hex = [ "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" ]; +qx.renderer.color.Color.m_rgb = { 0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,b:11,c:12,d:13,e:14,f:15 } + +qx.renderer.color.Color.r_hex3 = /^#([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})$/; +qx.renderer.color.Color.r_hex6 = /^#([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})$/; +qx.renderer.color.Color.r_cssrgb = /^rgb\(\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*\)$/; + +qx.renderer.color.Color.r_rgb = /^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}$/; +qx.renderer.color.Color.r_number = /^[0-9]{1,3}\.{0,1}[0-9]*$/; +qx.renderer.color.Color.r_percent = /^[0-9]{1,3}\.{0,1}[0-9]*%$/; + +/** + * CSS 3 colors (http://www.w3.org/TR/css3-color/#svg-color) + * + * This includes all classic HTML Color names (http://www.w3.org/TR/css3-color/#html4) and the <code>transparent</code> keyword. + */ +qx.Class.htmlNames = +{ + transparent : [-1,-1,-1], + aliceblue : [ 240,248,255 ], + antiquewhite : [ 250,235,215 ], + aqua : [ 0,255,255 ], + aquamarine : [ 127,255,212 ], + azure : [ 240,255,255 ], + beige : [ 245,245,220 ], + bisque : [ 255,228,196 ], + black : [ 0,0,0 ], + blanchedalmond : [ 255,235,205 ], + blue : [ 0,0,255 ], + blueviolet : [ 138,43,226 ], + brown : [ 165,42,42 ], + burlywood : [ 222,184,135 ], + cadetblue : [ 95,158,160 ], + chartreuse : [ 127,255,0 ], + chocolate : [ 210,105,30 ], + coral : [ 255,127,80 ], + cornflowerblue : [ 100,149,237 ], + cornsilk : [ 255,248,220 ], + crimson : [ 220,20,60 ], + cyan : [ 0,255,255 ], + darkblue : [ 0,0,139 ], + darkcyan : [ 0,139,139 ], + darkgoldenrod : [ 184,134,11 ], + darkgray : [ 169,169,169 ], + darkgreen : [ 0,100,0 ], + darkgrey : [ 169,169,169 ], + darkkhaki : [ 189,183,107 ], + darkmagenta : [ 139,0,139 ], + darkolivegreen : [ 85,107,47 ], + darkorange : [ 255,140,0 ], + darkorchid : [ 153,50,204 ], + darkred : [ 139,0,0 ], + darksalmon : [ 233,150,122 ], + darkseagreen : [ 143,188,143 ], + darkslateblue : [ 72,61,139 ], + darkslategray : [ 47,79,79 ], + darkslategrey : [ 47,79,79 ], + darkturquoise : [ 0,206,209 ], + darkviolet : [ 148,0,211 ], + deeppink : [ 255,20,147 ], + deepskyblue : [ 0,191,255 ], + dimgray : [ 105,105,105 ], + dimgrey : [ 105,105,105 ], + dodgerblue : [ 30,144,255 ], + firebrick : [ 178,34,34 ], + floralwhite : [ 255,250,240 ], + forestgreen : [ 34,139,34 ], + fuchsia : [ 255,0,255 ], + gainsboro : [ 220,220,220 ], + ghostwhite : [ 248,248,255 ], + gold : [ 255,215,0 ], + goldenrod : [ 218,165,32 ], + gray : [ 128,128,128 ], + green : [ 0,128,0 ], + greenyellow : [ 173,255,47 ], + grey : [ 128,128,128 ], + honeydew : [ 240,255,240 ], + hotpink : [ 255,105,180 ], + indianred : [ 205,92,92 ], + indigo : [ 75,0,130 ], + ivory : [ 255,255,240 ], + khaki : [ 240,230,140 ], + lavender : [ 230,230,250 ], + lavenderblush : [ 255,240,245 ], + lawngreen : [ 124,252,0 ], + lemonchiffon : [ 255,250,205 ], + lightblue : [ 173,216,230 ], + lightcoral : [ 240,128,128 ], + lightcyan : [ 224,255,255 ], + lightgoldenrodyellow : [ 250,250,210 ], + lightgray : [ 211,211,211 ], + lightgreen : [ 144,238,144 ], + lightgrey : [ 211,211,211 ], + lightpink : [ 255,182,193 ], + lightsalmon : [ 255,160,122 ], + lightseagreen : [ 32,178,170 ], + lightskyblue : [ 135,206,250 ], + lightslategray : [ 119,136,153 ], + lightslategrey : [ 119,136,153 ], + lightsteelblue : [ 176,196,222 ], + lightyellow : [ 255,255,224 ], + lime : [ 0,255,0 ], + limegreen : [ 50,205,50 ], + linen : [ 250,240,230 ], + magenta : [ 255,0,255 ], + maroon : [ 128,0,0 ], + mediumaquamarine : [ 102,205,170 ], + mediumblue : [ 0,0,205 ], + mediumorchid : [ 186,85,211 ], + mediumpurple : [ 147,112,219 ], + mediumseagreen : [ 60,179,113 ], + mediumslateblue : [ 123,104,238 ], + mediumspringgreen : [ 0,250,154 ], + mediumturquoise : [ 72,209,204 ], + mediumvioletred : [ 199,21,133 ], + midnightblue : [ 25,25,112 ], + mintcream : [ 245,255,250 ], + mistyrose : [ 255,228,225 ], + moccasin : [ 255,228,181 ], + navajowhite : [ 255,222,173 ], + navy : [ 0,0,128 ], + oldlace : [ 253,245,230 ], + olive : [ 128,128,0 ], + olivedrab : [ 107,142,35 ], + orange : [ 255,165,0 ], + orangered : [ 255,69,0 ], + orchid : [ 218,112,214 ], + palegoldenrod : [ 238,232,170 ], + palegreen : [ 152,251,152 ], + paleturquoise : [ 175,238,238 ], + palevioletred : [ 219,112,147 ], + papayawhip : [ 255,239,213 ], + peachpuff : [ 255,218,185 ], + peru : [ 205,133,63 ], + pink : [ 255,192,203 ], + plum : [ 221,160,221 ], + powderblue : [ 176,224,230 ], + purple : [ 128,0,128 ], + red : [ 255,0,0 ], + rosybrown : [ 188,143,143 ], + royalblue : [ 65,105,225 ], + saddlebrown : [ 139,69,19 ], + salmon : [ 250,128,114 ], + sandybrown : [ 244,164,96 ], + seagreen : [ 46,139,87 ], + seashell : [ 255,245,238 ], + sienna : [ 160,82,45 ], + silver : [ 192,192,192 ], + skyblue : [ 135,206,235 ], + slateblue : [ 106,90,205 ], + slategray : [ 112,128,144 ], + slategrey : [ 112,128,144 ], + snow : [ 255,250,250 ], + springgreen : [ 0,255,127 ], + steelblue : [ 70,130,180 ], + tan : [ 210,180,140 ], + teal : [ 0,128,128 ], + thistle : [ 216,191,216 ], + tomato : [ 255,99,71 ], + turquoise : [ 64,224,208 ], + violet : [ 238,130,238 ], + wheat : [ 245,222,179 ], + white : [ 255,255,255 ], + whitesmoke : [ 245,245,245 ], + yellow : [ 255,255,0 ], + yellowgreen : [ 154,205,50 ] +}; + +/** + * ActiveBorder: Active window border. + * ActiveCaption: Active window caption. + * + * AppWorkspace: Background color of multiple document interface. + * Background: Desktop background. + * + * ButtonFace: Face color for three-dimensional display elements. + * ButtonHighlight: Highlight color for three-dimensional display elements (for edges facing away from the light source). + * ButtonShadow: Shadow color for three-dimensional display elements. + * ButtonText: Text on push buttons. + * + * CaptionText: Text in caption, size box, and scrollbar arrow box. + * GrayText: Grayed (disabled) text. + * + * Highlight: Item(s) selected in a control. + * HighlightText: Text of item(s) selected in a control. + * + * InactiveBorder: Inactive window border. + * InactiveCaption: Inactive window caption. + * InactiveCaptionText: Color of text in an inactive caption. + * + * InfoBackground: Background color for tooltip controls. + * InfoText: Text color for tooltip controls. + * + * Menu: Menu background. + * MenuText: Text in menus. + * + * Scrollbar: Scroll bar gray area. + * + * ThreeDDarkShadow: Dark shadow for three-dimensional display elements. + * ThreeDFace: Face color for three-dimensional display elements. + * ThreeDHighlight: Highlight color for three-dimensional display elements. + * ThreeDLightShadow: Light color for three-dimensional display elements (for edges facing the light source). + * ThreeDShadow: Dark shadow for three-dimensional display elements. + * + * Window: Window background. + * WindowFrame: Window frame. + * WindowText: Text in windows. + */ +qx.Class.themedNames = +{ + activeborder : 1, + activecaption : 1, + appworkspace : 1, + background : 1, + buttonface : 1, + buttonhighlight : 1, + buttonshadow : 1, + buttontext : 1, + captiontext : 1, + graytext : 1, + highlight : 1, + highlighttext : 1, + inactiveborder : 1, + inactivecaption : 1, + inactivecaptiontext : 1, + infobackground : 1, + infotext : 1, + menu : 1, + menutext : 1, + scrollbar : 1, + threeddarkshadow : 1, + threedface : 1, + threedhighlight : 1, + threedlightshadow : 1, + threedshadow : 1, + window : 1, + windowframe : 1, + windowtext : 1 +} + + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Class.fromString = function(vDefString) { + return new qx.renderer.color.Color(vDefString); +} + +qx.Class.fromRandom = function() { + return new qx.renderer.color.Color([Math.round(255*Math.random()), Math.round(255*Math.random()), Math.round(255*Math.random())]); +} + + + + + + +/* +--------------------------------------------------------------------------- + DATA +--------------------------------------------------------------------------- +*/ + +qx.Proto._value = null; +qx.Proto._style = null; + +qx.Proto._isRgbColor = false; +qx.Proto._isHtmlColor = false; +qx.Proto._isThemedColor = false; + +qx.Proto._red = null; +qx.Proto._green = null; +qx.Proto._blue = null; + +qx.Proto._hex = null; + + + + + +/* +--------------------------------------------------------------------------- + COMPATIBILITY METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = qx.lang.Function.returnTrue; +qx.Proto.remove = qx.lang.Function.returnTrue; + + + + + + +/* +--------------------------------------------------------------------------- + PUBLIC METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.isRgbColor = function() { + return this._isRgbColor; +} + +qx.Proto.isHtmlColor = function() { + return this._isHtmlColor; +} + +qx.Proto.isThemedColor = function() { + return this._isThemedColor; +} + + + + +qx.Proto.setValue = function(vValue) +{ + this._normalize(vValue); + + if (this._isThemedColor) { + throw new Error("Please use qx.renderer.color.ColorObject for themed colors!"); + } +} + +qx.Proto.getValue = function() { + return this._value || ""; +} + + + + +qx.Proto.getStyle = function() +{ + if (this._style == null) { + this._evalStyle(); + } + + return this._style; +} + +qx.Proto._evalStyle = function() +{ + if (this._isRgbColor) + { + this._style = qx.renderer.color.Color.rgb2style(this._red, this._green, this._blue); + } + else if (this._isThemedColor) + { + this._applyThemedValue(); + } + else if (this._isHtmlColor) + { + this._style = this._value; + } + else if (this._value != null) + { + this.error("Could not handle non-rgb colors :" + this.getValue() + "!"); + } +} + + + + +qx.Proto.getHex = function() +{ + if (this._hex == null) { + this._evalHex(); + } + + return this._hex; +} + +qx.Proto._evalHex = function() +{ + if (this._isRgbColor) + { + var a = ["#"]; + + var r = this.getRed(); + a.push(qx.renderer.color.Color.m_hex[Math.floor(r/16)]); + a.push(qx.renderer.color.Color.m_hex[Math.floor(r%16)]); + + var g = this.getGreen(); + a.push(qx.renderer.color.Color.m_hex[Math.floor(g/16)]); + a.push(qx.renderer.color.Color.m_hex[Math.floor(g%16)]); + + var b = this.getBlue(); + a.push(qx.renderer.color.Color.m_hex[Math.floor(b/16)]); + a.push(qx.renderer.color.Color.m_hex[Math.floor(b%16)]); + + this._hex = a.join(""); + } + else + { + // TODO + } +} + + + + +qx.Proto.getRed = function() +{ + if (this._red == null) { + this._evalRgb(); + } + + return this._red; +} + +qx.Proto.getGreen = function() +{ + if (this._green == null) { + this._evalRgb(); + } + + return this._green; +} + +qx.Proto.getBlue = function() +{ + if (this._blue == null) { + this._evalRgb(); + } + + return this._blue; +} + + + + +qx.Proto._evalRgb = function() +{ + if (this._isThemedColor) + { + this._applyThemedValue(); + } + else if (this._isHtmlColor) + { + var a = qx.renderer.color.Color.htmlNames[this._value]; + + this._red = a[0]; + this._green = a[1]; + this._blue = a[2]; + } + else + { + throw new Error("_evalRgb needs implementation!"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + PRIVATE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto._normalize = function(vInValue) +{ + this._isThemedColor = this._isRgbColor = this._isHtmlColor = false; + this._hex = null; + + var invalid = new Error("Invalid color: " + vInValue); + + switch(typeof vInValue) + { + case "string": + vInValue = vInValue.toLowerCase(); + + if (qx.renderer.color.Color.htmlNames[vInValue]) + { + this._isHtmlColor = true; + } + else if (qx.renderer.color.Color.themedNames[vInValue]) + { + this._isThemedColor = true; + } + else if (qx.renderer.color.Color.r_cssrgb.test(vInValue)) + { + this._red = parseInt(RegExp.$1); + this._green = parseInt(RegExp.$2); + this._blue = parseInt(RegExp.$3); + + this._isRgbColor = true; + } + else if (qx.renderer.color.Color.r_hex3.test(vInValue)) + { + this._hex = vInValue; + + this._red = (qx.renderer.color.Color.m_rgb[RegExp.$1] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$1]; + this._green = (qx.renderer.color.Color.m_rgb[RegExp.$2] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$2]; + this._blue = (qx.renderer.color.Color.m_rgb[RegExp.$3] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$3]; + + this._isRgbColor = true; + } + else if (qx.renderer.color.Color.r_hex6.test(vInValue)) + { + this._hex = vInValue; + + this._red = (qx.renderer.color.Color.m_rgb[RegExp.$1] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$2]; + this._green = (qx.renderer.color.Color.m_rgb[RegExp.$3] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$4]; + this._blue = (qx.renderer.color.Color.m_rgb[RegExp.$5] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$6]; + + this._isRgbColor = true; + } + else + { + throw invalid; + } + + break; + + case "number": + if (vInValue >= 0 && vInValue <= 255) + { + this._red = this._green = this._blue = vInValue; + this._isRgbColor = true; + } + else + { + throw invalid; + } + + break; + + case "object": + if (qx.util.Validation.isValidArray(vInValue) && vInValue.length == 3) + { + this._red = vInValue[0]; + this._green = vInValue[1]; + this._blue = vInValue[2]; + + this._isRgbColor = true; + break; + } + + default: + throw invalid; + } + + if (!this._isRgbColor) + { + this._red = this._green = this._blue = null; + this._style = this._isHtmlColor ? vInValue : null; + } + else + { + this._style = null; + + if (!(this._red >= 0 && this._red <= 255 && this._green >= 0 && this._green <= 255 && this._blue >= 0 && this._blue <= 255)) { + throw invalid; + } + } + + return this._value = vInValue; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + delete this._value; + delete this._style; + + delete this._red; + delete this._green; + delete this._blue; + + delete this._isRgbColor; + delete this._isHtmlColor; + delete this._isThemedColor; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/ColorCache.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/ColorCache.js new file mode 100644 index 0000000000..0ae7e91869 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/ColorCache.js @@ -0,0 +1,85 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.color.ColorCache"); + +qx.renderer.color.ColorCache = function(propValue) +{ + var propKey; + var propKeyAsStyle = false; + + switch(typeof propValue) + { + case "string": + if (propValue != "") { + propValue = propKey = propValue.toLowerCase(); + break; + } + + return propValue; + + case "number": + if (propValue >= 0 && propValue <= 255) + { + propKey = propValue.toString(); + break; + } + + return propValue; + + case "object": + if (propValue == null || propValue instanceof qx.renderer.color.Color) { + return propValue; + } + + // Try to detect array of RGB values + if (typeof propValue.join === "function" && propValue.length == 3) + { + propKey = "rgb(" + propValue.join(",") + ")"; + propKeyAsStyle = true; + break; + } + + default: + return propValue; + } + + if (qx.renderer.color.ColorCache._data[propKey]) { + return qx.renderer.color.ColorCache._data[propKey]; + } + + // this.debug("Create new color instance: " + propKey); + + var vColorObject = qx.renderer.color.ColorCache._data[propKey] = qx.renderer.color.Color.themedNames[propValue] ? new qx.renderer.color.ColorObject(propValue) : new qx.renderer.color.Color(propValue); + + if (propKeyAsStyle) { + vColorObject._style = propKey; + } + + return vColorObject; +} + +qx.renderer.color.ColorCache._data = {}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/ColorObject.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/ColorObject.js new file mode 100644 index 0000000000..353c87c59e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/ColorObject.js @@ -0,0 +1,156 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.color.ColorObject", qx.renderer.color.Color, +function(vValue) +{ + // this.debug("Value: " + vValue); + this.setValue(vValue); + + if(qx.manager.object.ColorManager.getInstance().has(this._value)) { + return qx.manager.object.ColorManager.getInstance().get(this._value); + } + + qx.core.Object.call(this); + + // Register this color object to manager instance + qx.manager.object.ColorManager.getInstance().add(this); + + // Here will all objects with a dependency to this + // color stored. + this._dependentObjects = {}; +}); + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.renderer.color.ColorObject.fromString = function(vDefString) { + return new qx.renderer.color.ColorObject(vDefString); +} + + + + +/* +--------------------------------------------------------------------------- + PUBLIC METHODS +--------------------------------------------------------------------------- +*/ + +/*! + Set a new value from selected theme (only for Operating System Colors) +*/ +qx.Proto._updateTheme = function(vTheme) +{ + if (!this._isThemedColor) { + throw new Error("Could not redefine themed value of non os colors!"); + } + + this._applyThemedValue(); + this._syncObjects(); +} + +qx.Proto._applyThemedValue = function() +{ + var vTheme = qx.manager.object.ColorManager.getInstance().getColorTheme(); + var vRgb = vTheme.getValueByName(this._value); + + if (vRgb) + { + this._red = vRgb[0]; + this._green = vRgb[1]; + this._blue = vRgb[2]; + } + + this._style = vTheme.getStyleByName(this._value); + this._hex = null; +} + +qx.Proto._syncObjects = function() +{ + for (var i in this._dependentObjects) { + this._dependentObjects[i]._updateColors(this, this._style); + } +} + +qx.Proto.setValue = function(vValue) +{ + this._normalize(vValue); + this._syncObjects(); +} + + + + + +/* +--------------------------------------------------------------------------- + OBJECT MANAGMENT +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = function(vObject) { + this._dependentObjects[vObject.toHashCode()] = vObject; +} + +qx.Proto.remove = function(vObject) { + delete this._dependentObjects[vObject.toHashCode()]; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._dependentObjects) + { + for (var i in this._dependentObjects) { + delete this._dependentObjects[i]; + } + + delete this._dependentObjects; + } + + return qx.renderer.color.Color.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/Font.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/Font.js new file mode 100644 index 0000000000..816ca7639e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/Font.js @@ -0,0 +1,220 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#load(qx.renderer.font.FontObject) + +************************************************************************ */ + +/*! + Font implementation for qx.ui.core.Widget instances. +*/ + +qx.OO.defineClass("qx.renderer.font.Font", qx.core.Object, +function(vSize, vName) +{ + qx.core.Object.call(this); + + this._defs = {}; + + if (vSize != null) { + this.setSize(vSize); + } + + if (vName != null) { + this.setName(vName); + } +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "size", type : "number", impl : "style" }); +qx.OO.addProperty({ name : "name", type : "string", impl : "style" }); +qx.OO.addProperty({ name : "bold", type : "boolean", defaultValue : false, impl : "style" }); +qx.OO.addProperty({ name : "italic", type : "boolean", defaultValue : false, impl : "style" }); +qx.OO.addProperty({ name : "underline", type : "boolean", defaultValue : false, impl : "style" }); +qx.OO.addProperty({ name : "strikeout", type : "boolean", defaultValue : false, impl : "style" }); + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyStyle = function(propValue, propOldValue, propData) +{ + this._needsCompilation = true; + return true; +} + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.renderer.font.Font.fromString = function(s) +{ + var vFont = new qx.renderer.font.Font; + var vAllParts = s.split(/\s+/); + var vName = []; + var vPart; + + for (var i = 0; i < vAllParts.length; i++) + { + switch(vPart = vAllParts[i]) + { + case "bold": + vFont.setBold(true); + break; + + case "italic": + vFont.setItalic(true); + break; + + case "underline": + vFont.setUnderline(true); + break; + + case "strikeout": + vFont.setStrikeout(true); + break; + + default: + var vTemp = parseFloat(vPart); + + if(vTemp == vPart || qx.lang.String.contains(vPart, "px")) + { + vFont.setSize(vTemp); + } + else + { + vName.push(vPart); + } + + break; + } + } + + if(vName.length > 0) { + vFont.setName(vName.join(" ")); + } + + return vFont; +} + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto._needsCompilation = true; + +qx.Proto._compile = function() +{ + var vName = this.getName(); + var vSize = this.getSize(); + var vBold = this.getBold(); + var vItalic = this.getItalic(); + var vUnderline = this.getUnderline(); + var vStrikeout = this.getStrikeout(); + var vDecoration = ""; + + if (this.getUnderline()) { + vDecoration = "underline"; + } + + if (this.getStrikeout()) { + vDecoration += " " + "strikeout"; + } + + this._defs.fontFamily = vName || ""; + this._defs.fontSize = typeof vSize == "number" ? vSize + "px" : ""; + this._defs.fontWeight = this.getBold() ? "bold" : "normal"; + this._defs.fontStyle = this.getItalic() ? "italic" : "normal"; + this._defs.textDecoration = vDecoration || ""; + + this._needsCompilation = false; +} + +qx.Proto._applyWidget = function(vWidget) +{ + if (this._needsCompilation) { + this._compile(); + } + + vWidget.setStyleProperty("fontFamily", this._defs.fontFamily); + vWidget.setStyleProperty("fontSize", this._defs.fontSize); + vWidget.setStyleProperty("fontWeight", this._defs.fontWeight); + vWidget.setStyleProperty("fontStyle", this._defs.fontStyle); + vWidget.setStyleProperty("textDecoration", this._defs.textDecoration); +} + +qx.Proto._resetWidget = function(vWidget) +{ + vWidget.removeStyleProperty("fontFamily"); + vWidget.removeStyleProperty("fontSize"); + vWidget.removeStyleProperty("fontWeight"); + vWidget.removeStyleProperty("fontStyle"); + vWidget.removeStyleProperty("textDecoration"); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + delete this._defs; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/FontCache.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/FontCache.js new file mode 100644 index 0000000000..c7344803c3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/FontCache.js @@ -0,0 +1,72 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.font.FontCache"); + +qx.renderer.font.FontCache = function(propValue, propData) +{ + var propKey; + var propKeyAsStyle = false; + + switch(typeof propValue) + { + case "string": + if (propValue != "") + { + propValue = propKey = propValue.toLowerCase(); + break; + } + + return propValue; + + case "number": + propKey = propValue.toString(); + break; + + case "object": + if (propValue == null || propValue instanceof qx.renderer.font.Font) { + return propValue; + } + + // Try to detect array of RGB values + if (typeof propValue.join === "function") + { + propKey = propValue.join(" ").toLowerCase(); + break; + } + + default: + return propValue; + } + + if (qx.renderer.font.FontCache._data[propKey]) { + return qx.renderer.font.FontCache._data[propKey]; + } + + return qx.renderer.font.FontCache._data[propKey] = qx.renderer.font.Font.fromString(propKey); +} + +qx.renderer.font.FontCache._data = {}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/FontObject.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/FontObject.js new file mode 100644 index 0000000000..d9ff4bbbe5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/font/FontObject.js @@ -0,0 +1,95 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.font.FontObject", qx.renderer.font.Font, +function(vSize, vName) +{ + this._dependentObjects = {}; + + qx.renderer.font.Font.call(this, vSize, vName); +}); + + + + +/* +--------------------------------------------------------------------------- + WIDGET CONNECTION +--------------------------------------------------------------------------- +*/ + +qx.Proto.addListenerWidget = function(o) { + this._dependentObjects[o.toHashCode()] = o; +} + +qx.Proto.removeListenerWidget = function(o) { + delete this._dependentObjects[o.toHashCode()]; +} + +qx.Proto._sync = function(vEdge) +{ + var vAll = this._dependentObjects; + var vCurrent; + + for (vKey in vAll) + { + vCurrent = vAll[vKey]; + + if (vCurrent.isCreated()) { + vCurrent._updateFont(vEdge); + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (typeof this._dependentObjects === "object") + { + for (vKey in this._dependentObjects) { + delete this._dependentObjects[vKey]; + } + + delete this._dependentObjects; + } + + return qx.renderer.font.Font.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/CanvasLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/CanvasLayoutImpl.js new file mode 100644 index 0000000000..aec420dac6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/CanvasLayoutImpl.js @@ -0,0 +1,299 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.CanvasLayoutImpl", qx.renderer.layout.LayoutImpl, +function(vWidget) { + qx.renderer.layout.LayoutImpl.call(this, vWidget); +}); + + + +/*! + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + + Inherits from qx.renderer.layout.LayoutImpl: + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [11] DISPOSER +*/ + + + +/* +--------------------------------------------------------------------------- + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the box width of the given child +*/ +qx.Proto.computeChildBoxWidth = function(vChild) +{ + var vValue = null; + + if (vChild._computedLeftTypeNull || vChild._computedRightTypeNull) + { + vValue = vChild.getWidthValue(); + } + else if (vChild._hasParent) + { + vValue = this.getWidget().getInnerWidth() - vChild.getLeftValue() - vChild.getRightValue(); + } + + return vValue || vChild._computeBoxWidthFallback(); +} + +/*! + Compute and return the box height of the given child +*/ +qx.Proto.computeChildBoxHeight = function(vChild) +{ + var vValue = null; + + if (vChild._computedTopTypeNull || vChild._computedBottomTypeNull) + { + vValue = vChild.getHeightValue(); + } + else if (vChild._hasParent) + { + vValue = this.getWidget().getInnerHeight() - vChild.getTopValue() - vChild.getBottomValue(); + } + + return vValue || vChild._computeBoxHeightFallback(); +} + + + + + +/* +--------------------------------------------------------------------------- + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the needed width of the given child +*/ +qx.Proto.computeChildNeededWidth = function(vChild) +{ + var vLeft = vChild._computedLeftTypePercent ? null : vChild.getLeftValue(); + var vRight = vChild._computedRightTypePercent ? null : vChild.getRightValue(); + var vMinBox = vChild._computedMinWidthTypePercent ? null : vChild.getMinWidthValue(); + var vMaxBox = vChild._computedMaxWidthTypePercent ? null : vChild.getMaxWidthValue(); + + if (vLeft != null && vRight != null) + { + var vBox = vChild.getPreferredBoxWidth() || 0; + } + else + { + var vBox = (vChild._computedWidthTypePercent ? null : vChild.getWidthValue()) || vChild.getPreferredBoxWidth() || 0; + } + + return qx.lang.Number.limit(vBox, vMinBox, vMaxBox) + vLeft + vRight + vChild.getMarginLeft() + vChild.getMarginRight(); +} + +/*! + Compute and return the needed height of the given child +*/ +qx.Proto.computeChildNeededHeight = function(vChild) +{ + var vTop = vChild._computedTopTypePercent ? null : vChild.getTopValue(); + var vBottom = vChild._computedBottomTypePercent ? null : vChild.getBottomValue(); + var vMinBox = vChild._computedMinHeightTypePercent ? null : vChild.getMinHeightValue(); + var vMaxBox = vChild._computedMaxHeightTypePercent ? null : vChild.getMaxHeightValue(); + + if (vTop != null && vBottom != null) + { + var vBox = vChild.getPreferredBoxHeight() || 0; + } + else + { + var vBox = (vChild._computedHeightTypePercent ? null : vChild.getHeightValue()) || vChild.getPreferredBoxHeight() || 0; + } + + return qx.lang.Number.limit(vBox, vMinBox, vMaxBox) + vTop + vBottom + vChild.getMarginTop() + vChild.getMarginBottom(); +} + + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/*! + Actions that should be done if the inner width of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) +{ + // this makes sure that both functions get executed before return + var vUpdatePercent = vChild._recomputePercentX(); + var vUpdateRange = vChild._recomputeRangeX(); + + return vUpdatePercent || vUpdateRange; +} + +/*! + Actions that should be done if the inner height of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) +{ + // this makes sure that both functions get executed before return + var vUpdatePercent = vChild._recomputePercentY(); + var vUpdateRange = vChild._recomputeRangeY(); + + return vUpdatePercent || vUpdateRange; +} + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +/*! + This is called from qx.ui.core.Widget and it's task is to apply the layout + (excluding border and padding) to the child. +*/ +qx.Proto.layoutChild = function(vChild, vJobs) +{ + this.layoutChild_sizeX_essentialWrapper(vChild, vJobs); + this.layoutChild_sizeY_essentialWrapper(vChild, vJobs); + + this.layoutChild_sizeLimitX(vChild, vJobs); + this.layoutChild_sizeLimitY(vChild, vJobs); + + this.layoutChild_locationX(vChild, vJobs); + this.layoutChild_locationY(vChild, vJobs); + + this.layoutChild_marginX(vChild, vJobs); + this.layoutChild_marginY(vChild, vJobs); +} + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera()) +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth || vJobs.left || vJobs.right) + { + if (vChild._computedMinWidthTypeNull && vChild._computedWidthTypeNull && vChild._computedMaxWidthTypeNull && !(!vChild._computedLeftTypeNull && !vChild._computedRightTypeNull)) + { + vChild._resetRuntimeWidth(); + } + else + { + vChild._applyRuntimeWidth(vChild.getBoxWidth()); + } + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight || vJobs.top || vJobs.bottom) + { + if (vChild._computedMinHeightTypeNull && vChild._computedHeightTypeNull && vChild._computedMaxHeightTypeNull && !(!vChild._computedTopTypeNull && !vChild._computedBottomTypeNull)) + { + vChild._resetRuntimeHeight(); + } + else + { + vChild._applyRuntimeHeight(vChild.getBoxHeight()); + } + } + } +} +else +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width) { + vChild._computedWidthTypeNull ? vChild._resetRuntimeWidth() : vChild._applyRuntimeWidth(vChild.getWidthValue()); + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height) { + vChild._computedHeightTypeNull ? vChild._resetRuntimeHeight() : vChild._applyRuntimeHeight(vChild.getHeightValue()); + } + } +} + +qx.Proto.layoutChild_locationX = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + if (vJobs.initial || vJobs.left || vJobs.parentPaddingLeft) { + vChild._computedLeftTypeNull ? vChild._computedRightTypeNull && vWidget.getPaddingLeft() > 0 ? vChild._applyRuntimeLeft(vWidget.getPaddingLeft()) : vChild._resetRuntimeLeft() : vChild._applyRuntimeLeft(vChild.getLeftValue() + vWidget.getPaddingLeft()); + } + + if (vJobs.initial || vJobs.right || vJobs.parentPaddingRight) { + vChild._computedRightTypeNull ? vChild._computedLeftTypeNull && vWidget.getPaddingRight() > 0 ? vChild._applyRuntimeRight(vWidget.getPaddingRight()) : vChild._resetRuntimeRight() : vChild._applyRuntimeRight(vChild.getRightValue() + vWidget.getPaddingRight()); + } +} + +qx.Proto.layoutChild_locationY = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + if (vJobs.initial || vJobs.top || vJobs.parentPaddingTop) { + vChild._computedTopTypeNull ? vChild._computedBottomTypeNull && vWidget.getPaddingTop() > 0 ? vChild._applyRuntimeTop(vWidget.getPaddingTop()) : vChild._resetRuntimeTop() : vChild._applyRuntimeTop(vChild.getTopValue() + vWidget.getPaddingTop()); + } + + if (vJobs.initial || vJobs.bottom || vJobs.parentPaddingBottom) { + vChild._computedBottomTypeNull ? vChild._computedTopTypeNull && vWidget.getPaddingBottom() > 0 ? vChild._applyRuntimeBottom(vWidget.getPaddingBottom()) : vChild._resetRuntimeBottom() : vChild._applyRuntimeBottom(vChild.getBottomValue() + vWidget.getPaddingBottom()); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/DockLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/DockLayoutImpl.js new file mode 100644 index 0000000000..4c77209f50 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/DockLayoutImpl.js @@ -0,0 +1,490 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.DockLayoutImpl", qx.renderer.layout.LayoutImpl, +function(vWidget) { + qx.renderer.layout.LayoutImpl.call(this, vWidget); +}); + + +/*! + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + + Inherits from qx.renderer.layout.LayoutImpl: + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [11] DISPOSER +*/ + + + + +/* +--------------------------------------------------------------------------- + [00] ADDITIONAL GLOBAL DATA AND METHODS +--------------------------------------------------------------------------- +*/ + +qx.renderer.layout.DockLayoutImpl.METHOD_LOCATION = "layoutChild_location_"; + +qx.renderer.layout.DockLayoutImpl._childRanking = { + vertical : function(c) { return c.getVerticalAlign() ? 1e6 : c.getHorizontalAlign() ? 2e6 : 3e6; }, + horizontal : function(c) { return c.getHorizontalAlign() ? 1e6 : c.getVerticalAlign() ? 2e6 : 3e6; }, + ordered : function(c) { return c.getHorizontalAlign() || c.getVerticalAlign() ? 1e6 : 2e6; } +} + +qx.renderer.layout.DockLayoutImpl._childCheck = +{ + common : function(vChild) { + if (!(vChild._computedLeftTypeNull && vChild._computedRightTypeNull && vChild._computedTopTypeNull && vChild._computedBottomTypeNull)) { + throw new Error("qx.renderer.layout.DockLayoutImpl: It is not allowed to define any location values for children: " + vChild + "!"); + } + }, + + horizontal : function(vChild) + { + if (!(vChild._computedMinHeightTypeNull && vChild._computedHeightTypeNull && vChild._computedMaxHeightTypeNull)) { + throw new Error("qx.renderer.layout.DockLayoutImpl: It is not allowed to define any vertical dimension for 'horizontal' placed children: " + vChild + "!"); + } + }, + + vertical : function(vChild) + { + if (!(vChild._computedMinWidthTypeNull && vChild._computedWidthTypeNull && vChild._computedMaxWidthTypeNull)) { + throw new Error("qx.renderer.layout.DockLayoutImpl: It is not allowed to define any horizontal dimension for 'vertical' placed children: " + vChild + "!"); + } + }, + + "default" : function(vChild) + { + qx.renderer.layout.DockLayoutImpl._childCheck.horizontal(vChild); + qx.renderer.layout.DockLayoutImpl._childCheck.vertical(vChild); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the box width of the given child +*/ +qx.Proto.computeChildBoxWidth = function(vChild) +{ + if (this.getChildAlignMode(vChild) == "horizontal") { + return vChild.getWidthValue() || vChild._computeBoxWidthFallback(); + } + + return this.getWidget().getInnerWidth() - this._lastLeft - this._lastRight; +} + +/*! + Compute and return the box height of the given child +*/ +qx.Proto.computeChildBoxHeight = function(vChild) +{ + if (this.getChildAlignMode(vChild) == "vertical") { + return vChild.getHeightValue() || vChild._computeBoxHeightFallback(); + } + + return this.getWidget().getInnerHeight() - this._lastTop - this._lastBottom; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/*! + Actions that should be done if the inner width of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) +{ + vChild._recomputePercentX(); + vChild.addToLayoutChanges("location"); + + // inform the caller if there were any notable changes occured + return true; +} + +/*! + Actions that should be done if the inner height of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) +{ + vChild._recomputePercentY(); + vChild.addToLayoutChanges("location"); + + // inform the caller if there were any notable changes occured + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Invalidate and recompute things because of job in queue (before the rest of job handling will be executed). +*/ +qx.Proto.updateSelfOnJobQueueFlush = qx.lang.Function.returnFalse; + + + + + + + +/* +--------------------------------------------------------------------------- + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Updates children on special jobs +*/ +qx.Proto.updateChildrenOnJobQueueFlush = function(vQueue) +{ + if (vQueue.mode || vQueue.addChild || vQueue.removeChild) { + this.getWidget()._addChildrenToLayoutQueue("location"); + } +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + [09] FLUSH LAYOUT QUEUES OF CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + This method have full control of the order in which the + registered (or also non-registered) children should be + layouted on the horizontal axis. +*/ +qx.Proto.flushChildrenQueue = function(vChildrenQueue) +{ + var vWidget=this.getWidget(), vChildren=vWidget.getVisibleChildren(), vChildrenLength=vChildren.length, vMode=vWidget.getMode(); + + // reset layout + this._lastLeft = this._lastRight = this._lastTop = this._lastBottom = 0; + + // sorting children + var vRankImpl = qx.renderer.layout.DockLayoutImpl._childRanking[vMode]; + var vOrderedChildren = qx.lang.Array.copy(vChildren).sort(function(c1, c2) { + return (vRankImpl(c1) + vChildren.indexOf(c1)) - (vRankImpl(c2) + vChildren.indexOf(c2)); + }); + + // flushing children + for (var i=0; i<vChildrenLength; i++) { + vWidget._layoutChild(vOrderedChildren[i]); + } +} + +qx.Proto.getChildAlign = function(vChild) { + return vChild.getVerticalAlign() || vChild.getHorizontalAlign() || "default"; +} + +qx.Proto.getChildAlignMode = function(vChild) { + return vChild.getVerticalAlign() ? "vertical" : vChild.getHorizontalAlign() ? "horizontal" : "default"; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +/*! + This is called from qx.ui.core.Widget and it's task is to apply the layout + (excluding border and padding) to the child. +*/ +qx.Proto.layoutChild = function(vChild, vJobs) +{ + qx.renderer.layout.DockLayoutImpl._childCheck.common(vChild); + qx.renderer.layout.DockLayoutImpl._childCheck[this.getChildAlignMode(vChild)](vChild); + + this.layoutChild_sizeX_essentialWrapper(vChild, vJobs); + this.layoutChild_sizeY_essentialWrapper(vChild, vJobs); + + this.layoutChild_sizeLimitX(vChild, vJobs); + this.layoutChild_sizeLimitY(vChild, vJobs); + + this[qx.renderer.layout.DockLayoutImpl.METHOD_LOCATION + this.getChildAlign(vChild)](vChild, vJobs); +} + +qx.Proto.layoutChild_location_top = function(vChild, vJobs) +{ + vChild._applyRuntimeTop(this._lastTop); + vChild._applyRuntimeLeft(this._lastLeft); + + this.layoutChild_location_horizontal(vChild); + + this._lastTop += vChild.getBoxHeight(); +} + +qx.Proto.layoutChild_location_left = function(vChild, vJobs) +{ + vChild._applyRuntimeLeft(this._lastLeft); + vChild._applyRuntimeTop(this._lastTop); + + this.layoutChild_location_vertical(vChild); + + this._lastLeft += vChild.getBoxWidth(); +} + + + + + + + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera()) +{ + qx.Proto._applyComputedWidth = function(vChild) + { + // direct recompute (need to be done, while layouting as the + // _last* variable changes during layout process) + vChild._recomputeBoxWidth(); + + // wrong: simple invalidates are enough here + // correct: needs recompute to inform children (to update centering for example) + vChild._recomputeOuterWidth(); + vChild._recomputeInnerWidth(); + + // apply calculated width + vChild._applyRuntimeWidth(vChild.getBoxWidth()); + } + + qx.Proto._applyComputedHeight = function(vChild) + { + // direct recompute (need to be done, while layouting as the + // _last* variable changes during layout process) + vChild._recomputeBoxHeight(); + + // wrong: simple invalidates are enough here + // correct: needs recompute to inform children (to update centering for example) + vChild._recomputeOuterHeight(); + vChild._recomputeInnerHeight(); + + // apply calculated height + vChild._applyRuntimeHeight(vChild.getBoxHeight()); + } + + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + // We need to respect all dimension properties on the horizontal axis in internet explorer to set the 'width' style + if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth) { + vChild._computedWidthTypeNull && vChild._computedMinWidthTypeNull && vChild._computedMaxWidthTypeNull ? vChild._resetRuntimeWidth() : vChild._applyRuntimeWidth(vChild.getBoxWidth()); + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + // We need to respect all dimension properties on the vertical axis in internet explorer to set the 'height' style + if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight) { + vChild._computedHeightTypeNull && vChild._computedMinHeightTypeNull && vChild._computedMaxHeightTypeNull ? vChild._resetRuntimeHeight() : vChild._applyRuntimeHeight(vChild.getBoxHeight()); + } + } + + qx.Proto.layoutChild_location_horizontal = function(vChild) { + this._applyComputedWidth(vChild); + } + + qx.Proto.layoutChild_location_vertical = function(vChild) { + this._applyComputedHeight(vChild); + } + + qx.Proto.layoutChild_location_right = function(vChild, vJobs) + { + vChild._applyRuntimeLeft(this.getWidget().getInnerWidth() - this._lastRight - vChild.getBoxWidth()); + vChild._applyRuntimeTop(this._lastTop); + + this.layoutChild_location_vertical(vChild); + + this._lastRight += vChild.getBoxWidth(); + } + + qx.Proto.layoutChild_location_bottom = function(vChild, vJobs) + { + vChild._applyRuntimeTop(this.getWidget().getInnerHeight() - this._lastBottom - vChild.getBoxHeight()); + vChild._applyRuntimeLeft(this._lastLeft); + + this.layoutChild_location_horizontal(vChild); + + this._lastBottom += vChild.getBoxHeight(); + } + + qx.Proto.layoutChild_location_default = function(vChild, vJobs) + { + var vWidget = this.getWidget(); + + vChild._resetRuntimeRight(); + vChild._resetRuntimeBottom(); + + vChild._applyRuntimeTop(this._lastTop); + vChild._applyRuntimeLeft(this._lastLeft); + + this._applyComputedWidth(vChild); + this._applyComputedHeight(vChild); + } +} +else +{ + qx.Proto._applyComputedWidth = function(vChild) + { + // direct recompute (need to be done, while layouting as the + // _last* variable changes during layout process) + vChild._recomputeBoxWidth(); + + // wrong: simple invalidates are enough here + // correct: needs recompute to inform children (to update centering for example) + vChild._recomputeOuterWidth(); + vChild._recomputeInnerWidth(); + } + + qx.Proto._applyComputedHeight = function(vChild) + { + // direct recompute (need to be done, while layouting as the + // _last* variable changes during layout process) + vChild._recomputeBoxHeight(); + + // wrong: simple invalidates are enough here + // correct: needs recompute to inform children (to update centering for example) + vChild._recomputeOuterHeight(); + vChild._recomputeInnerHeight(); + } + + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width) { + vChild._computedWidthTypeNull ? vChild._resetRuntimeWidth() : vChild._applyRuntimeWidth(vChild.getWidthValue()); + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height) { + vChild._computedHeightTypeNull ? vChild._resetRuntimeHeight() : vChild._applyRuntimeHeight(vChild.getHeightValue()); + } + } + + qx.Proto.layoutChild_location_horizontal = function(vChild) + { + this._applyComputedWidth(vChild); + vChild._applyRuntimeRight(this._lastRight); + } + + qx.Proto.layoutChild_location_vertical = function(vChild) + { + this._applyComputedHeight(vChild); + vChild._applyRuntimeBottom(this._lastBottom); + } + + qx.Proto.layoutChild_location_right = function(vChild, vJobs) + { + vChild._applyRuntimeRight(this._lastRight); + vChild._applyRuntimeTop(this._lastTop); + + this.layoutChild_location_vertical(vChild); + + this._lastRight += vChild.getBoxWidth(); + } + + qx.Proto.layoutChild_location_bottom = function(vChild, vJobs) + { + vChild._applyRuntimeBottom(this._lastBottom); + vChild._applyRuntimeLeft(this._lastLeft); + + this.layoutChild_location_horizontal(vChild); + + this._lastBottom += vChild.getBoxHeight(); + } + + qx.Proto.layoutChild_location_default = function(vChild, vJobs) + { + vChild._resetRuntimeWidth(); + vChild._resetRuntimeHeight(); + + vChild._applyRuntimeTop(this._lastTop); + vChild._applyRuntimeRight(this._lastRight); + vChild._applyRuntimeBottom(this._lastBottom); + vChild._applyRuntimeLeft(this._lastLeft); + + this._applyComputedWidth(vChild); + this._applyComputedHeight(vChild); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/FlowLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/FlowLayoutImpl.js new file mode 100644 index 0000000000..153356d3bb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/FlowLayoutImpl.js @@ -0,0 +1,428 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.FlowLayoutImpl", qx.renderer.layout.LayoutImpl, +function(vWidget) { + qx.renderer.layout.LayoutImpl.call(this, vWidget); +}); + +qx.renderer.layout.FlowLayoutImpl.STR_FIRST = "getFirstVisibleChild"; +qx.renderer.layout.FlowLayoutImpl.STR_LAST = "getLastVisibleChild"; +qx.renderer.layout.FlowLayoutImpl.STR_NEXT = "getNextSibling"; +qx.renderer.layout.FlowLayoutImpl.STR_PREVIOUS = "getPreviousSibling"; + + +/*! + Global Structure: + + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + Inherits from qx.renderer.layout.LayoutImpl: + + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [11] DISPOSER +*/ + + + + + + +/* +--------------------------------------------------------------------------- + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the width needed by all children of this widget +*/ +qx.Proto.computeChildrenNeededWidth = function() +{ + var w = this.getWidget(); + return qx.renderer.layout.LayoutImpl.prototype.computeChildrenNeededWidth_sum.call(this) + ((w.getVisibleChildrenLength()-1) * w.getHorizontalSpacing()); +} + +/*! + Calculate the layout to get the needed height of the children +*/ +qx.Proto.computeChildrenNeededHeight = function() +{ + var vWidget = this.getWidget(); + + var vInnerWidth = vWidget.getInnerWidth(); + + var vHorizontalSpacing = vWidget.getHorizontalSpacing(); + var vVerticalSpacing = vWidget.getVerticalSpacing(); + var vReversed = vWidget.getReverseChildrenOrder(); + + var vRowWidth = 0; + var vRowHeight = 0; + + var vRowHeightSum = 0; + + for (var i=0, ch=vWidget.getVisibleChildren(), chl=ch.length, chc; i<chl; i++) + { + chc = vReversed ? ch[chl-1-i] : ch[i]; + + vRowWidth += chc.getNeededWidth(); + + if (vRowWidth > vInnerWidth) + { + vRowHeightSum += vRowHeight + vVerticalSpacing; + vRowWidth = chc.getNeededWidth(); + vRowHeight = chc.getNeededHeight(); + } + else + { + vRowHeight = Math.max(vRowHeight, chc.getNeededHeight()); + } + + vRowWidth += vHorizontalSpacing; + } + + return vRowHeightSum + vRowHeight; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS +--------------------------------------------------------------------------- +*/ + +/*! + Things to do and layout when any of the childs changes it's outer width. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateSelfOnChildOuterWidthChange = function(vChild) +{ + // If a child only change it's width also recompute the height + // as the layout flows around here + //this.getWidget()._recomputeNeededHeightHelper(); + this.getWidget()._invalidatePreferredInnerHeight(); +} + + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/*! + Actions that should be done if the inner width of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) +{ + vChild._recomputePercentX(); + vChild.addToLayoutChanges("location"); + + return true; +} + +/*! + Actions that should be done if the inner height of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) +{ + vChild._recomputePercentY(); + vChild.addToLayoutChanges("location"); + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Updates children on special jobs +*/ +qx.Proto.updateChildrenOnJobQueueFlush = function(vQueue) +{ + if (vQueue.horizontalSpacing || vQueue.verticalSpacing || vQueue.reverseChildrenOrder || vQueue.horizontalChildrenAlign || vQueue.verticalChildrenAlign) { + this.getWidget()._addChildrenToLayoutQueue("location"); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + [08] CHILDREN ADD/REMOVE/MOVE HANDLING +--------------------------------------------------------------------------- +*/ + +/*! + This method combines calls of methods which should be done if a widget should be removed from the current layout. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateChildrenOnRemoveChild = function(vChild, vIndex) +{ + var w=this.getWidget(), ch=w.getVisibleChildren(), chl=ch.length, chc, i=-1; + + if (w.getReverseChildrenOrder()) + { + while((chc=ch[++i]) && i<vIndex) { + chc.addToLayoutChanges("location"); + } + } + else + { + i+=vIndex; + while(chc=ch[++i]) { + chc.addToLayoutChanges("location"); + } + } +} + +/*! + This method combines calls of methods which should be done if a child should be moved + inside the same parent to a new positions. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateChildrenOnMoveChild = function(vChild, vIndex, vOldIndex) +{ + for (var i=Math.min(vIndex, vOldIndex), ch=this.getWidget().getVisibleChildren(), l=ch.length; i<l; i++) { + ch[i].addToLayoutChanges("location"); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + [09] FLUSH LAYOUT QUEUES OF CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + This method have full control of the order in which the + registered (or also non-registered) children should be + layouted on the horizontal axis. +*/ + +qx.Proto.flushChildrenQueue = function(vChildrenQueue) +{ + var w=this.getWidget(), ch=w.getVisibleChildren(), chl=ch.length, chc, chh; + + if (w.getReverseChildrenOrder()) + { + // layout all childs from the first child + // with an own layout request to the end + var i=chl, changed=false; + while(chc=ch[--i]) + { + chh = chc.toHashCode(); + + if (changed || vChildrenQueue[chh]) + { + w._layoutChild(chc); + changed = true; + } + } + } + else + { + // layout all childs from the first child + // with an own layout request to the end + var i=-1, changed=false; + while(chc=ch[++i]) + { + chh = chc.toHashCode(); + + if (changed || vChildrenQueue[chh]) + { + w._layoutChild(chc); + changed = true; + } + } + } +} + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +qx.Proto.layoutChild = function(vChild, vJobs) +{ + this.layoutChild_sizeX_essentialWrapper(vChild, vJobs); + this.layoutChild_sizeY_essentialWrapper(vChild, vJobs); + + this.layoutChild_sizeLimitX(vChild, vJobs); + this.layoutChild_sizeLimitY(vChild, vJobs); + + this.layoutChild_marginX(vChild, vJobs); + this.layoutChild_marginY(vChild, vJobs); + + this.layoutChild_location(vChild, vJobs); +} + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera()) +{ + /*! + We need to respect all dimension properties on the horizontal axis in + internet explorer to set the 'width' style + */ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth) { + vChild._computedWidthTypeNull && vChild._computedMinWidthTypeNull && vChild._computedMaxWidthTypeNull ? vChild._resetRuntimeWidth() : vChild._applyRuntimeWidth(vChild.getBoxWidth()); + } + } + + /*! + We need to respect all dimension properties on the vertical axis in + internet explorer to set the 'height' style + */ + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight) { + vChild._computedHeightTypeNull && vChild._computedMinHeightTypeNull && vChild._computedMaxHeightTypeNull ? vChild._resetRuntimeHeight() : vChild._applyRuntimeHeight(vChild.getBoxHeight()); + } + } +} +else +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width) { + vChild._computedWidthTypeNull ? vChild._resetRuntimeWidth() : vChild._applyRuntimeWidth(vChild.getWidthValue()); + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height) { + vChild._computedHeightTypeNull ? vChild._resetRuntimeHeight() : vChild._applyRuntimeHeight(vChild.getHeightValue()); + } + } +} + +qx.Proto.layoutChild_location = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + var vReverse = vWidget.getReverseChildrenOrder(); + + var vMethodBegin = vReverse ? qx.renderer.layout.FlowLayoutImpl.STR_LAST : qx.renderer.layout.FlowLayoutImpl.STR_FIRST; + var vMethodContinue = vReverse ? qx.renderer.layout.FlowLayoutImpl.STR_NEXT : qx.renderer.layout.FlowLayoutImpl.STR_PREVIOUS; + + if (vChild == vWidget[vMethodBegin]()) + { + vChild._cachedLocationHorizontal = vChild._cachedLocationVertical = vChild._cachedRow = 0; + } + else + { + var vTempChild = vChild[vMethodContinue](); + + // stupidly update cache value (check them later) + vChild._cachedLocationHorizontal = vTempChild._cachedLocationHorizontal + vTempChild.getOuterWidth() + vWidget.getHorizontalSpacing(); + vChild._cachedLocationVertical = vTempChild._cachedLocationVertical; + vChild._cachedRow = vTempChild._cachedRow; + + // check now + if ((vChild._cachedLocationHorizontal + vChild.getOuterWidth()) > vWidget.getInnerWidth()) + { + // evaluate width of previous row + vRowMax = vTempChild.getOuterHeight(); + while((vTempChild = vTempChild[vMethodContinue]()) && vTempChild._cachedRow == vChild._cachedRow) { + vRowMax = Math.max(vRowMax, vTempChild.getOuterHeight()); + } + + // switch to new row + vChild._cachedLocationHorizontal = 0; + vChild._cachedLocationVertical += vWidget.getVerticalSpacing() + vRowMax; + vChild._cachedRow++; + } + } + + // add margins and parent padding + if (vWidget.getHorizontalChildrenAlign() == "right") + { + vChild._resetRuntimeLeft(); + vChild._applyRuntimeRight(vWidget.getPaddingRight() + vChild._cachedLocationHorizontal); + } + else + { + vChild._resetRuntimeRight(); + vChild._applyRuntimeLeft(vWidget.getPaddingLeft() + vChild._cachedLocationHorizontal); + } + + if (vWidget.getVerticalChildrenAlign() == "bottom") + { + vChild._resetRuntimeTop(); + vChild._applyRuntimeBottom(vWidget.getPaddingBottom() + vChild._cachedLocationVertical); + } + else + { + vChild._resetRuntimeBottom(); + vChild._applyRuntimeTop(vWidget.getPaddingTop() + vChild._cachedLocationVertical); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/GridLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/GridLayoutImpl.js new file mode 100644 index 0000000000..e6079d31eb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/GridLayoutImpl.js @@ -0,0 +1,302 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.GridLayoutImpl", qx.renderer.layout.LayoutImpl, +function(vWidget) { + qx.renderer.layout.LayoutImpl.call(this, vWidget); +}); + + + + +/*! + Global Structure: + + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + Inherits from qx.renderer.layout.LayoutImpl: + + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [11] DISPOSER +*/ + + + +/* +--------------------------------------------------------------------------- + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the box width of the given child. +*/ +qx.Proto.computeChildBoxWidth = function(vChild) +{ + var vWidget = this.getWidget(); + var vColWidth = vWidget.getColumnInnerWidth(vChild._col, vChild._row); + + // extend colwidth to spanned area + if (vWidget.isSpanStart(vChild._col, vChild._row)) + { + var vEntry = vWidget.getSpanEntry(vChild._col, vChild._row); + for (var i=1; i<vEntry.colLength; i++) + { + // right padding from the previous cell + vColWidth += vWidget.getComputedCellPaddingRight(vChild._col + i - 1, vChild._row); + + // left padding from the current cell + vColWidth += vWidget.getComputedCellPaddingLeft(vChild._col + i, vChild._row); + + // spacing between previous and current cell + vColWidth += vWidget.getHorizontalSpacing(); + + // inner width of the current cell plus + vColWidth += vWidget.getColumnInnerWidth(vChild._col + i, vChild._row); + } + } + + return vChild.getAllowStretchX() ? vColWidth : Math.min(vChild.getWidthValue(), vColWidth); +} + +/*! + Compute and return the box height of the given child. +*/ +qx.Proto.computeChildBoxHeight = function(vChild) +{ + var vWidget = this.getWidget(); + var vRowHeight = vWidget.getRowInnerHeight(vChild._col, vChild._row); + + // extend colwidth to spanned area + if (vWidget.isSpanStart(vChild._col, vChild._row)) + { + var vEntry = vWidget.getSpanEntry(vChild._col, vChild._row); + for (var i=1; i<vEntry.rowLength; i++) + { + // right padding from the previous cell + vRowHeight += vWidget.getComputedCellPaddingBottom(vChild._col, vChild._row + i - 1); + + // left padding from the current cell + vRowHeight += vWidget.getComputedCellPaddingTop(vChild._col, vChild._row + i); + + // spacing between previous and current cell + vRowHeight += vWidget.getVerticalSpacing(); + + // inner width of the current cell plus + vRowHeight += vWidget.getRowInnerHeight(vChild._col, vChild._row + i); + } + } + + return vChild.getAllowStretchY() ? vRowHeight : Math.min(vChild.getHeightValue(), vRowHeight); +} + + + + + + + +/* +--------------------------------------------------------------------------- + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the width needed by all children of this widget + which is in a grid layout the width used by all columns. +*/ +qx.Proto.computeChildrenNeededWidth = function() +{ + var vWidget = this.getWidget(); + var vSpacingX = vWidget.getHorizontalSpacing(); + var vSum = -vSpacingX; + + for (var i=0, l=vWidget.getColumnCount(); i<l; i++) { + vSum += vWidget.getColumnBoxWidth(i) + vSpacingX; + } + + return vSum; +} + +/*! + Compute and return the height needed by all children of this widget + which is in a grid layout the height used by all rows. +*/ +qx.Proto.computeChildrenNeededHeight = function() +{ + var vWidget = this.getWidget(); + var vSpacingY = vWidget.getVerticalSpacing(); + var vSum = -vSpacingY; + + for (var i=0, l=vWidget.getRowCount(); i<l; i++) { + vSum += vWidget.getRowBoxHeight(i) + vSpacingY; + } + + return vSum; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/*! + Actions that should be done if the inner width of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) +{ + vChild._recomputePercentX(); + vChild.addToLayoutChanges("locationX"); + + return true; +} + +/*! + Actions that should be done if the inner height of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) +{ + vChild._recomputePercentY(); + vChild.addToLayoutChanges("locationY"); + + return true; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +/*! + This is called from qx.ui.core.Widget and it's task is to apply the layout + (excluding border and padding) to the child. +*/ + +qx.Proto.layoutChild = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + this.layoutChild_sizeX(vChild, vJobs); + this.layoutChild_sizeY(vChild, vJobs); + + this.layoutChild_sizeLimitX(vChild, vJobs); + this.layoutChild_sizeLimitY(vChild, vJobs); + + this.layoutChild_marginX(vChild, vJobs); + this.layoutChild_marginY(vChild, vJobs); + + this.layoutChild_locationX(vChild, vJobs); + this.layoutChild_locationY(vChild, vJobs); +} + +qx.Proto.layoutChild_sizeX = function(vChild, vJobs) +{ + vChild._applyRuntimeWidth(vChild.getBoxWidth()); +} + +qx.Proto.layoutChild_sizeY = function(vChild, vJobs) +{ + vChild._applyRuntimeHeight(vChild.getBoxHeight()); +} + +qx.Proto.layoutChild_locationX = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + var vSpacingX = vWidget.getHorizontalSpacing(); + var vLocSumX = vWidget.getPaddingLeft() + vWidget.getComputedCellPaddingLeft(vChild._col, vChild._row); + + for (var i=0; i<vChild._col; i++) { + vLocSumX += vWidget.getColumnBoxWidth(i) + vSpacingX; + } + + switch(vChild.getHorizontalAlign() || vWidget.getColumnHorizontalAlignment(vChild._col) || vWidget.getRowHorizontalAlignment(vChild._row) || vWidget.getHorizontalChildrenAlign()) + { + case "center": + vLocSumX += Math.round((vWidget.getColumnInnerWidth(vChild._col, vChild._row) - vChild.getBoxWidth()) / 2); + break; + + case "right": + vLocSumX += vWidget.getColumnInnerWidth(vChild._col, vChild._row) - vChild.getBoxWidth(); + break; + } + + vChild._applyRuntimeLeft(vLocSumX); +} + +qx.Proto.layoutChild_locationY = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + var vSpacingY = vWidget.getVerticalSpacing(); + var vLocSumY = vWidget.getPaddingTop() + vWidget.getComputedCellPaddingTop(vChild._col, vChild._row); + + for (var i=0; i<vChild._row; i++) { + vLocSumY += vWidget.getRowBoxHeight(i) + vSpacingY; + } + + switch(vChild.getVerticalAlign() || vWidget.getRowVerticalAlignment(vChild._row) || vWidget.getColumnVerticalAlignment(vChild._col) || vWidget.getVerticalChildrenAlign()) + { + case "middle": + vLocSumY += Math.round((vWidget.getRowInnerHeight(vChild._col, vChild._row) - vChild.getBoxHeight()) / 2); + break; + + case "bottom": + vLocSumY += vWidget.getRowInnerHeight(vChild._col, vChild._row) - vChild.getBoxHeight(); + break; + } + + vChild._applyRuntimeTop(vLocSumY); +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/HorizontalBoxLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/HorizontalBoxLayoutImpl.js new file mode 100644 index 0000000000..035b146d0e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/HorizontalBoxLayoutImpl.js @@ -0,0 +1,865 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.HorizontalBoxLayoutImpl", qx.renderer.layout.LayoutImpl, +function(vWidget) { + qx.renderer.layout.LayoutImpl.call(this, vWidget); +}); + +qx.OO.addProperty({ name : "enableFlexSupport", type : "boolean", defaultValue : true }); + +/*! + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + + Inherits from qx.renderer.layout.LayoutImpl: + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [11] DISPOSER +*/ + + + + +/* +--------------------------------------------------------------------------- + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the box width of the given child. +*/ +qx.Proto.computeChildBoxWidth = function(vChild) { + return vChild.getWidthValue() || vChild._computeBoxWidthFallback(); +} + +/*! + Compute and return the box height of the given child. +*/ +qx.Proto.computeChildBoxHeight = function(vChild) +{ + if (this.getWidget().getStretchChildrenOrthogonalAxis() && vChild._computedHeightTypeNull && vChild.getAllowStretchY()) { + return this.getWidget().getInnerHeight(); + } + + return vChild.getHeightValue() || vChild._computeBoxHeightFallback(); +} + +/*! + Computes the width of all flexible children. +*/ +qx.Proto.computeChildrenFlexWidth = function() +{ + if (this._childrenFlexWidthComputed || !this.getEnableFlexSupport()) { + return; + } + + this._childrenFlexWidthComputed = true; + + // this.debug("computeChildrenFlexWidth"); + + var vWidget = this.getWidget(); + var vChildren = vWidget.getVisibleChildren(); + var vChildrenLength = vChildren.length; + var vCurrentChild; + var vFlexibleChildren = []; + var vAvailWidth = vWidget.getInnerWidth(); + var vUsedWidth = vWidget.getSpacing() * (vChildrenLength-1); + var vIterator; + + + // ************************************************************* + // 1. Compute the sum of all static sized children and finding + // all flexible children. + // ************************************************************* + for (vIterator=0; vIterator<vChildrenLength; vIterator++) + { + vCurrentChild = vChildren[vIterator]; + + if (vCurrentChild._computedWidthTypeFlex) + { + vFlexibleChildren.push(vCurrentChild); + + if (vWidget._computedWidthTypeAuto) { + vUsedWidth += vCurrentChild.getPreferredBoxWidth(); + } + } + else + { + vUsedWidth += vCurrentChild.getOuterWidth(); + } + } + + // this.debug("Width: " + vUsedWidth + "/" + vAvailWidth); + // this.debug("Flexible Count: " + vFlexibleChildren.length); + + + // ************************************************************* + // 2. Compute the sum of all flexible children widths + // ************************************************************* + var vRemainingWidth = vAvailWidth - vUsedWidth; + var vFlexibleChildrenLength = vFlexibleChildren.length; + var vPrioritySum = 0; + + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) { + vPrioritySum += vFlexibleChildren[vIterator]._computedWidthParsed; + } + + + // ************************************************************* + // 3. Calculating the size of each 'part'. + // ************************************************************* + var vPartWidth = vRemainingWidth / vPrioritySum; + + + if (!vWidget.getUseAdvancedFlexAllocation()) + { + // ************************************************************* + // 4a. Computing the flex width value of each flexible child + // and add the width to the usedWidth, so that we can + // fix rounding problems later. + // ************************************************************* + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthParsed * vPartWidth); + vUsedWidth += vCurrentChild._computedWidthFlexValue; + } + } + else + { + // ************************************************************* + // 4b. Calculating the diff. Which means respect the min/max + // width configuration in flex and store the higher/lower + // data in a diff. + // ************************************************************* + + var vAllocationDiff = 0; + var vMinAllocationLoops, vFlexibleChildrenLength, vAdjust, vCurrentAllocationSum, vFactorSum, vComputedFlexibleWidth; + + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + vComputedFlexibleWidth = vCurrentChild._computedWidthFlexValue = vCurrentChild._computedWidthParsed * vPartWidth; + vAllocationDiff += vComputedFlexibleWidth - qx.lang.Number.limit(vComputedFlexibleWidth, vCurrentChild.getMinWidthValue(), vCurrentChild.getMaxWidthValue()); + } + + // Rounding diff + vAllocationDiff = Math.round(vAllocationDiff); + + if (vAllocationDiff == 0) + { + // ************************************************************* + // 5a. If the diff is equal zero we must not do anything more + // and do nearly identical the same like in 4a. which means + // to round the calculated flex value and add it to the + // used width so we can fix rounding problems later. + // ************************************************************* + + // Rounding values and fixing rounding errors + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue); + vUsedWidth += vCurrentChild._computedWidthFlexValue; + } + } + else + { + // ************************************************************* + // 5b. Find maximum loops of each adjustable child to adjust + // the width until the min/max width limits are reached. + // ************************************************************* + + var vUp = vAllocationDiff > 0; + for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + if (vUp) + { + vAdjust = (vCurrentChild.getMaxWidthValue() || Infinity) - vCurrentChild._computedWidthFlexValue; + + if (vAdjust > 0) + { + vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedWidthParsed); + } + else + { + qx.lang.Array.removeAt(vFlexibleChildren, vIterator); + + vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue); + vUsedWidth += Math.round(vCurrentChild._computedWidthFlexValue + vAdjust); + } + } + else + { + vAdjust = qx.util.Validation.isValidNumber(vCurrentChild.getMinWidthValue()) ? vCurrentChild._computedWidthFlexValue - vCurrentChild.getMinWidthValue() : vCurrentChild._computedWidthFlexValue; + + if (vAdjust > 0) + { + vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedWidthParsed); + } + else + { + qx.lang.Array.removeAt(vFlexibleChildren, vIterator); + + vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue); + vUsedWidth += Math.round(vCurrentChild._computedWidthFlexValue - vAdjust); + } + } + } + + // ************************************************************* + // 6. Try to reallocate the width between flexible children + // so that the requirements through min/max limits + // are satisfied. + // ************************************************************* + while (vAllocationDiff != 0 && vFlexibleChildrenLength > 0) + { + vFlexibleChildrenLength = vFlexibleChildren.length; + vMinAllocationLoops = Infinity; + vFactorSum = 0; + + // Find minimal loop amount + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vMinAllocationLoops = Math.min(vMinAllocationLoops, vFlexibleChildren[vIterator]._allocationLoops); + vFactorSum += vFlexibleChildren[vIterator]._computedWidthParsed; + } + + // Be sure that the adjustment is not bigger/smaller than diff + vCurrentAllocationSum = Math.min(vFactorSum * vMinAllocationLoops, vAllocationDiff); + + // this.debug("Diff: " + vAllocationDiff); + // this.debug("Min Loops: " + vMinAllocationLoops); + // this.debug("Sum: " + vCurrentAllocationSum); + // this.debug("Factor: " + vFactorSum); + + // Reducing diff by current sum + vAllocationDiff -= vCurrentAllocationSum; + + // Adding sizes to children to adjust + for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--) + { + vCurrentChild = vFlexibleChildren[vIterator]; + vCurrentChild._computedWidthFlexValue += vCurrentAllocationSum / vFactorSum * vCurrentChild._computedWidthParsed; + + if (vCurrentChild._allocationLoops == vMinAllocationLoops) + { + vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue); + + vUsedWidth += vCurrentChild._computedWidthFlexValue; + delete vCurrentChild._allocationLoops; + qx.lang.Array.removeAt(vFlexibleChildren, vIterator); + } + else + { + if (vAllocationDiff == 0) + { + vCurrentChild._computedWidthFlexValue = Math.round(vCurrentChild._computedWidthFlexValue); + vUsedWidth += vCurrentChild._computedWidthFlexValue; + delete vCurrentChild._allocationLoops; + } + else + { + vCurrentChild._allocationLoops -= vMinAllocationLoops; + } + } + } + } + } + } + + // ************************************************************* + // 7. Fix rounding errors + // ************************************************************* + vCurrentChild._computedWidthFlexValue += vAvailWidth - vUsedWidth; +} + +qx.Proto.invalidateChildrenFlexWidth = function() { + delete this._childrenFlexWidthComputed; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the width needed by all children of this widget +*/ +qx.Proto.computeChildrenNeededWidth = function() +{ + var w = this.getWidget(); + return qx.renderer.layout.LayoutImpl.prototype.computeChildrenNeededWidth_sum.call(this) + ((w.getVisibleChildrenLength()-1) * w.getSpacing()); +} + + + + + + +/* +--------------------------------------------------------------------------- + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS +--------------------------------------------------------------------------- +*/ + +/*! + Things to do and layout when any of the childs changes its outer width. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateSelfOnChildOuterWidthChange = function(vChild) +{ + // if a childrens outer width changes we need to update our accumulated + // width of all childrens (used for center or right alignments) + this.getWidget()._invalidateAccumulatedChildrenOuterWidth(); +} + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/*! + Actions that should be done if the inner width of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) +{ + if (this.getWidget().getHorizontalChildrenAlign() == "center") { + vChild.addToLayoutChanges("locationX"); + } + + // use variables here to be sure to call both methods. + var vUpdatePercent = vChild._recomputePercentX(); + var vUpdateFlex = vChild._recomputeFlexX(); + + // inform the caller if there were any notable changes occured + return vUpdatePercent || vUpdateFlex; +} + +/*! + Actions that should be done if the inner height of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) +{ + // use variables here to be sure to call both methods. + var vUpdatePercent = vChild._recomputePercentY(); + var vUpdateStretch = vChild._recomputeStretchingY(); + + // priority to childs internal alignment + if ((vChild.getVerticalAlign() || this.getWidget().getVerticalChildrenAlign()) == "middle") { + vChild.addToLayoutChanges("locationY"); + } + + // inform the caller if there were any notable changes occured + return vUpdatePercent || vUpdateStretch; +} + + + + + +/* +--------------------------------------------------------------------------- + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Invalidate and recompute things because of job in queue (before the rest of job handling will be executed). +*/ +qx.Proto.updateSelfOnJobQueueFlush = function(vJobQueue) +{ + if (vJobQueue.addChild || vJobQueue.removeChild) { + this.getWidget()._invalidateAccumulatedChildrenOuterWidth(); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Updates children on special jobs +*/ +qx.Proto.updateChildrenOnJobQueueFlush = function(vQueue) +{ + var vStretchX=false, vStretchY=false; + var vWidget = this.getWidget(); + + // switching the orientation need updates for stretching on both axis + if (vQueue.orientation) { + vStretchX = vStretchY = true; + } + + // different updates depending from the current orientation (or the new one) + if (vQueue.spacing || vQueue.orientation || vQueue.reverseChildrenOrder || vQueue.horizontalChildrenAlign) { + vWidget._addChildrenToLayoutQueue("locationX"); + } + + if (vQueue.verticalChildrenAlign) { + vWidget._addChildrenToLayoutQueue("locationY"); + } + + if (vQueue.stretchChildrenOrthogonalAxis) { + vStretchY = true; + } + + // if stretching should be reworked reset the previous one and add + // a layout job to update the width respectively height. + if (vStretchX) + { + vWidget._recomputeChildrenStretchingX(); + vWidget._addChildrenToLayoutQueue("width"); + } + + if (vStretchY) + { + vWidget._recomputeChildrenStretchingY(); + vWidget._addChildrenToLayoutQueue("height"); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + [08] CHILDREN ADD/REMOVE/MOVE HANDLING +--------------------------------------------------------------------------- +*/ + +/*! + This method combines calls of methods which should be done if a widget should be removed from the current layout. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateChildrenOnRemoveChild = function(vChild, vIndex) +{ + var w=this.getWidget(), ch=w.getVisibleChildren(), chl=ch.length, chc, i=-1; + + // Fix index to be at the first flex child + if (this.getEnableFlexSupport()) + { + for (i=0; i<chl; i++) + { + chc = ch[i]; + if (chc.getHasFlexX()) + { + vIndex = Math.min(vIndex, i); + break; + } + } + + i=-1; + } + + // Handle differently depending on layout mode + switch(w.getLayoutMode()) + { + case "right": + case "left-reversed": + while((chc=ch[++i]) && i<vIndex) { + chc.addToLayoutChanges("locationX"); + } + + break; + + case "center": + case "center-reversed": + while(chc=ch[++i]) { + chc.addToLayoutChanges("locationX"); + } + + break; + + default: + i+=vIndex; + while(chc=ch[++i]) { + chc.addToLayoutChanges("locationX"); + } + } +} + +/*! + This method combines calls of methods which should be done if a child should be moved + inside the same parent to a new positions. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateChildrenOnMoveChild = function(vChild, vIndex, vOldIndex) +{ + var vChildren = this.getWidget().getVisibleChildren(); + + var vStart = Math.min(vIndex, vOldIndex); + var vStop = Math.max(vIndex, vOldIndex)+1; + + for (var i=vStart; i<vStop; i++) { + vChildren[i].addToLayoutChanges("locationX"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + [09] FLUSH LAYOUT QUEUES OF CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + This method have full control of the order in which the + registered (or also non-registered) children should be + layouted on the horizontal axis. +*/ +qx.Proto.flushChildrenQueue = function(vChildrenQueue) +{ + var w=this.getWidget(), ch=w.getVisibleChildren(), chl=ch.length, chc, i; + + // This block is needed for flex handling and + // will inform flex children if there was any + // change to the other content + if (this.getEnableFlexSupport()) + { + this.invalidateChildrenFlexWidth(); + + for (i=0; i<chl; i++) + { + chc = ch[i]; + if (chc.getHasFlexX()) + { + chc._computedWidthValue = null; + + if (chc._recomputeBoxWidth()) + { + chc._recomputeOuterWidth(); + chc._recomputeInnerWidth(); + } + + vChildrenQueue[chc.toHashCode()] = chc; + chc._layoutChanges.width = true; + } + } + } + + switch(w.getLayoutMode()) + { + case "right": + case "left-reversed": + // find the last child which has a layout request + for (var i=chl-1; i>=0 && !vChildrenQueue[ch[i].toHashCode()]; i--) {} + + // layout all children before this last child + for (var j=0; j<=i; j++) { + w._layoutChild(chc=ch[j]); + } + + break; + + case "center": + case "center-reversed": + // re-layout all children + i = -1; + while(chc=ch[++i]) { + w._layoutChild(chc); + } + + break; + + default: + // layout all childs from the first child + // with an own layout request to the end + i = -1; + var changed=false; + while(chc=ch[++i]) + { + if (changed || vChildrenQueue[chc.toHashCode()]) + { + w._layoutChild(chc); + changed = true; + } + } + } +} + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +/*! + This is called from qx.ui.core.Widget and it's task is to apply the layout + (excluding border and padding) to the child. +*/ +qx.Proto.layoutChild = function(vChild, vJobs) +{ + this.layoutChild_sizeX(vChild, vJobs); + this.layoutChild_sizeY(vChild, vJobs); + + this.layoutChild_sizeLimitX(vChild, vJobs); + this.layoutChild_sizeLimitY(vChild, vJobs); + + this.layoutChild_locationX(vChild, vJobs); + this.layoutChild_locationY(vChild, vJobs); + + this.layoutChild_marginX(vChild, vJobs); + this.layoutChild_marginY(vChild, vJobs); +} + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera() || qx.core.Client.getInstance().isWebkit() ) +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth) + { + if (vChild._isWidthEssential() && (!vChild._computedWidthTypeNull || !vChild._computedMinWidthTypeNull || !vChild._computedMaxWidthTypeNull)) + { + vChild._applyRuntimeWidth(vChild.getBoxWidth()); + } + else + { + vChild._resetRuntimeWidth(); + } + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight) + { + if ((vChild._isHeightEssential() && (!vChild._computedHeightTypeNull || !vChild._computedMinHeightTypeNull || !vChild._computedMaxHeightTypeNull)) || (vChild.getAllowStretchY() && this.getWidget().getStretchChildrenOrthogonalAxis())) + { + vChild._applyRuntimeHeight(vChild.getBoxHeight()); + } + else + { + vChild._resetRuntimeHeight(); + } + } + } +} +else +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width) + { + if (vChild._isWidthEssential() && !vChild._computedWidthTypeNull) + { + vChild._applyRuntimeWidth(vChild.getWidthValue()); + } + else + { + vChild._resetRuntimeWidth(); + } + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height) + { + if (vChild._isHeightEssential() && !vChild._computedHeightTypeNull) + { + vChild._applyRuntimeHeight(vChild.getHeightValue()); + } + else + { + vChild._resetRuntimeHeight(); + } + } + } +} + +qx.Proto.layoutChild_locationX = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + // handle first child + if (vWidget.getFirstVisibleChild() == vChild) + { + switch(vWidget.getLayoutMode()) + { + case "right": + case "left-reversed": + var vPos = vWidget.getPaddingRight() + vWidget.getAccumulatedChildrenOuterWidth() - vChild.getOuterWidth(); + break; + + case "center": + case "center-reversed": + var vPos = vWidget.getPaddingLeft() + Math.round((vWidget.getInnerWidth() - vWidget.getAccumulatedChildrenOuterWidth()) / 2); + break; + + default: + var vPos = vWidget.getPaddingLeft(); + } + } + + // handle any following child + else + { + var vPrev = vChild.getPreviousVisibleSibling(); + + switch(vWidget.getLayoutMode()) + { + case "right": + case "left-reversed": + var vPos = vPrev._cachedLocationHorizontal - vChild.getOuterWidth() - vWidget.getSpacing(); + break; + + default: + var vPos = vPrev._cachedLocationHorizontal + vPrev.getOuterWidth() + vWidget.getSpacing(); + } + } + + // store for next sibling + vChild._cachedLocationHorizontal = vPos; + + // apply styles + switch(vWidget.getLayoutMode()) + { + case "right": + case "right-reversed": + case "center-reversed": + // add relative positions (like 'position:relative' in css) + vPos += !vChild._computedRightTypeNull ? vChild.getRightValue() : !vChild._computedLeftTypeNull ? -(vChild.getLeftValue()) : 0; + + vChild._resetRuntimeLeft(); + vChild._applyRuntimeRight(vPos); + break; + + default: + // add relative positions (like 'position:relative' in css) + vPos += !vChild._computedLeftTypeNull ? vChild.getLeftValue() : !vChild._computedRightTypeNull ? -(vChild.getRightValue()) : 0; + + vChild._resetRuntimeRight(); + vChild._applyRuntimeLeft(vPos); + } +} + +qx.Proto.layoutChild_locationY = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + // special stretching support + if (qx.core.Client.getInstance().isGecko() && vChild.getAllowStretchY() && vWidget.getStretchChildrenOrthogonalAxis() && vChild._computedHeightTypeNull) + { + vChild._applyRuntimeTop(vWidget.getPaddingTop() || 0); + vChild._applyRuntimeBottom(vWidget.getPaddingBottom() || 0); + + return; + } + + // priority to childs internal alignment + var vAlign = vChild.getVerticalAlign() || vWidget.getVerticalChildrenAlign(); + + // handle middle alignment + var vPos = vAlign == "middle" ? Math.round((vWidget.getInnerHeight() - vChild.getOuterHeight()) / 2) : 0; + + // the bottom alignment use the real 'bottom' styleproperty to + // use the best available method in modern browsers + if (vAlign == "bottom") + { + // add parent padding + vPos += vWidget.getPaddingBottom(); + + // relative positions (like 'position:relative' in css) + if (!vChild._computedBottomTypeNull) { + vPos += vChild.getBottomValue(); + } + else if (!vChild._computedTopTypeNull) { + vPos -= vChild.getTopValue(); + } + + // apply styles + vChild._resetRuntimeTop(); + vChild._applyRuntimeBottom(vPos); + } + else + { + // add parent padding + vPos += vWidget.getPaddingTop(); + + // relative positions (like 'position:relative' in css) + if (!vChild._computedTopTypeNull) { + vPos += vChild.getTopValue(); + } + else if (!vChild._computedBottomTypeNull) { + vPos -= vChild.getBottomValue(); + } + + // apply styles + vChild._resetRuntimeBottom(); + vChild._applyRuntimeTop(vPos); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/LayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/LayoutImpl.js new file mode 100644 index 0000000000..ee78f0cc50 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/LayoutImpl.js @@ -0,0 +1,551 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(ui_layout) +#require(qx.core.Client) + +************************************************************************ */ + +/** + * Abstact base class of all layout implementations + * + * @param vWidget {qx.ui.core.Parent} reference to the associated widget + */ +qx.OO.defineClass("qx.renderer.layout.LayoutImpl", qx.core.Object, +function(vWidget) +{ + qx.core.Object.call(this); + + this._widget = vWidget; +}); + + + + +/** + * Returns the associated widget + * + * @return {qx.ui.core.Parent} reference to the associated widget + */ +qx.Proto.getWidget = function() { + return this._widget; +} + + +/* + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER +*/ + + +/* +--------------------------------------------------------------------------- + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/** + * Compute and return the box width of the given child + * + * @param vChild {qx.ui.core.Widget} + * @return {Integer} box width of the given child + */ +qx.Proto.computeChildBoxWidth = function(vChild) { + return vChild.getWidthValue() || vChild._computeBoxWidthFallback(); +} + +/** + * Compute and return the box height of the given child + * + * @param vChild {qx.ui.core.Widget} + * @return {Integer} box height of the given child + */ +qx.Proto.computeChildBoxHeight = function(vChild) { + return vChild.getHeightValue() || vChild._computeBoxHeightFallback(); +} + + + + + +/* +--------------------------------------------------------------------------- + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/** + * Compute and return the needed width of the given child + * + * @param vChild {qx.ui.core.Widget} + * @return {Integer} needed width + */ +qx.Proto.computeChildNeededWidth = function(vChild) +{ + // omit ultra long lines, these two variables only needed once + // here, but this enhance the readability of the code :) + var vMinBox = vChild._computedMinWidthTypePercent ? null : vChild.getMinWidthValue(); + var vMaxBox = vChild._computedMaxWidthTypePercent ? null : vChild.getMaxWidthValue(); + + var vBox = (vChild._computedWidthTypePercent || vChild._computedWidthTypeFlex ? null : vChild.getWidthValue()) || vChild.getPreferredBoxWidth() || 0; + + return qx.lang.Number.limit(vBox, vMinBox, vMaxBox) + vChild.getMarginLeft() + vChild.getMarginRight(); +} + +/** + * Compute and return the needed height of the given child + * + * @param vChild {qx.ui.core.Widget} + * @return {Integer} needed height + */ +qx.Proto.computeChildNeededHeight = function(vChild) +{ + // omit ultra long lines, these two variables only needed once + // here, but this enhance the readability of the code :) + var vMinBox = vChild._computedMinHeightTypePercent ? null : vChild.getMinHeightValue(); + var vMaxBox = vChild._computedMaxHeightTypePercent ? null : vChild.getMaxHeightValue(); + + var vBox = (vChild._computedHeightTypePercent || vChild._computedHeightTypeFlex ? null : vChild.getHeightValue()) || vChild.getPreferredBoxHeight() || 0; + + return qx.lang.Number.limit(vBox, vMinBox, vMaxBox) + vChild.getMarginTop() + vChild.getMarginBottom(); +} + + + + +/* +--------------------------------------------------------------------------- + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN +--------------------------------------------------------------------------- +*/ + +/** + * Calculate the maximum needed width of all children + * + * @return {Integer} maximum needed width of all children + */ +qx.Proto.computeChildrenNeededWidth_max = function() +{ + for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, maxv=0; i<chl; i++) { + maxv = Math.max(maxv, ch[i].getNeededWidth()); + } + + return maxv; +} + +/** + * Calculate the maximum needed height of all children + * + * @return {Integer} maximum needed height of all children + */ +qx.Proto.computeChildrenNeededHeight_max = function() +{ + for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, maxv=0; i<chl; i++) { + maxv = Math.max(maxv, ch[i].getNeededHeight()); + } + + return maxv; +} + +/** + * Compute and return the width needed by all children of this widget + * + * @return {Integer} + */ +qx.Proto.computeChildrenNeededWidth_sum = function() +{ + for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, sumv=0; i<chl; i++) { + sumv += ch[i].getNeededWidth(); + } + + return sumv; +} + +/** + * Compute and return the height needed by all children of this widget + * + * @return {Integer} height needed by all children of this widget + */ +qx.Proto.computeChildrenNeededHeight_sum = function() +{ + for (var i=0, ch=this.getWidget().getVisibleChildren(), chl=ch.length, sumv=0; i<chl; i++) { + sumv += ch[i].getNeededHeight(); + } + + return sumv; +} + +/** + * Compute and return the width needed by all children of this widget + * + * @return {Integer} width needed by all children of this widget + */ +qx.Proto.computeChildrenNeededWidth = qx.Proto.computeChildrenNeededWidth_max; + +/** + * Compute and return the height needed by all children of this widget + * + * @return {Integer} height needed by all children of this widget + */ +qx.Proto.computeChildrenNeededHeight = qx.Proto.computeChildrenNeededHeight_max; + + + + +/* +--------------------------------------------------------------------------- + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS +--------------------------------------------------------------------------- +*/ + +/** + * Things to do and layout when any of the childs changes its outer width. + * Needed by layouts where the children depend on each other, like flow or box layouts. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} changed child widget + */ +qx.Proto.updateSelfOnChildOuterWidthChange = function(vChild) {} + +/** + * Things to do and layout when any of the childs changes its outer height. + * Needed by layouts where the children depend on each other, like flow or box layouts. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} changed child widget + */ +qx.Proto.updateSelfOnChildOuterHeightChange = function(vChild) {} + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/** + * Actions that should be done if the inner width of the layout widget has changed. + * Normally this includes updates to percent values and ranges. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} changed child widget + */ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) {} + +/** + * Actions that should be done if the inner height of the layout widget has changed. + * Normally this includes updates to percent values and ranges. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} changed child widget + */ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) {} + + + + + +/* +--------------------------------------------------------------------------- + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/** + * Invalidate and recompute cached data according to job queue. + * This is executed at the beginning of the job queue handling. + * + * Subclasses might implement this method + * + * @param vJobQueue {Object} + */ +qx.Proto.updateSelfOnJobQueueFlush = function(vJobQueue) {} + + + + + + +/* +--------------------------------------------------------------------------- + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ +/** + * Updates children on job queue flush. + * This is executed at the end of the job queue handling. + * + * Subclasses might implement this method + * + * @param vJobQueue {Object} + */ +qx.Proto.updateChildrenOnJobQueueFlush = function(vJobQueue) {} + + + + + + +/* +--------------------------------------------------------------------------- + [08] CHILDREN ADD/REMOVE/MOVE HANDLING +--------------------------------------------------------------------------- +*/ + +/** + * Add child to current layout. Rarely needed by some layout implementations. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} newly added child + * @param vIndex {Integer} index of the child + */ +qx.Proto.updateChildrenOnAddChild = function(vChild, vIndex) {} + +/** + *Remove child from current layout. + * Needed by layouts where the children depend on each other, like flow or box layouts. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} newly added child + * @param vIndex {Integer} index of the child + */ + qx.Proto.updateChildrenOnRemoveChild = function(vChild, vIndex) {} + +/** + * Move child within its parent to a new position. + * Needed by layouts where the children depend on each other, like flow or box layouts. + * + * Subclasses might implement this method + * + * @param vChild {qx.ui.core.Widget} newly added child + * @param vIndex {Integer} new index of the child + * @param vOldIndex {Integer} old index of the child + */ +qx.Proto.updateChildrenOnMoveChild = function(vChild, vIndex, vOldIndex) {} + + + + + + + +/* +--------------------------------------------------------------------------- + [09] FLUSH LAYOUT QUEUES OF CHILDREN +--------------------------------------------------------------------------- +*/ + +/** + * Has full control of the order in which the registered + * (or non-registered) children should be layouted. + * + * @param vChildrenQueue {Object} + */ +qx.Proto.flushChildrenQueue = function(vChildrenQueue) +{ + var vWidget = this.getWidget(); + + for (var vHashCode in vChildrenQueue) { + vWidget._layoutChild(vChildrenQueue[vHashCode]); + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +/** + * Called from qx.ui.core.Parent. Its task is to apply the layout + * (excluding border and padding) to the child. + * + * @param vChild {qx.ui.core.Widget} child to layout + * @param vJobs {Set} layout changes to perform + */ +qx.Proto.layoutChild = function(vChild, vJobs) {} + + +/** + * Apply min-/max-width to the child. Direct usage of stylesheet properties. + * This is only possible in modern capable clients (i.e. excluding all current + * versions of Internet Explorer) + * + * @param vChild {qx.ui.core.Widget} child to layout + * @param vJobs {Set} layout changes to perform + */ +qx.Proto.layoutChild_sizeLimitX = function(vChild, vJobs) {} + +/** + * Apply min-/max-height to the child. Direct usage of stylesheet properties. + * This is only possible in modern capable clients (i.e. excluding all current + * versions of Internet Explorer) + * + * @param vChild {qx.ui.core.Widget} child to layout + * @param vJobs {Set} layout changes to perform + */ +qx.Proto.layoutChild_sizeLimitY = function(vChild, vJobs) {} + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.layoutChild_sizeLimitX = qx.lang.Function.returnTrue; + qx.Proto.layoutChild_sizeLimitY = qx.lang.Function.returnTrue; +} +else +{ + + qx.Proto.layoutChild_sizeLimitX = function(vChild, vJobs) + { + if (vJobs.minWidth) { + vChild._computedMinWidthTypeNull ? vChild._resetRuntimeMinWidth() : vChild._applyRuntimeMinWidth(vChild.getMinWidthValue()); + } + else if (vJobs.initial && !vChild._computedMinWidthTypeNull) { + vChild._applyRuntimeMinWidth(vChild.getMinWidthValue()); + } + + if (vJobs.maxWidth) { + vChild._computedMaxWidthTypeNull ? vChild._resetRuntimeMaxWidth() : vChild._applyRuntimeMaxWidth(vChild.getMaxWidthValue()); + } + else if (vJobs.initial && !vChild._computedMaxWidthTypeNull) { + vChild._applyRuntimeMaxWidth(vChild.getMaxWidthValue()); + } + } + + qx.Proto.layoutChild_sizeLimitY = function(vChild, vJobs) + { + if (vJobs.minHeight) { + vChild._computedMinHeightTypeNull ? vChild._resetRuntimeMinHeight() : vChild._applyRuntimeMinHeight(vChild.getMinHeightValue()); + } + else if (vJobs.initial && !vChild._computedMinHeightTypeNull) { + vChild._applyRuntimeMinHeight(vChild.getMinHeightValue()); + } + + if (vJobs.maxHeight) { + vChild._computedMaxHeightTypeNull ? vChild._resetRuntimeMaxHeight() : vChild._applyRuntimeMaxHeight(vChild.getMaxHeightValue()); + } + else if (vJobs.initial && !vChild._computedMaxHeightTypeNull) { + vChild._applyRuntimeMaxHeight(vChild.getMaxHeightValue()); + } + } +} + +/** + * Apply the X margin values as pure stylesheet equivalent. + * + * @param vChild {qx.ui.core.Widget} child to layout + * @param vJobs {Set} layout changes to perform + */ +qx.Proto.layoutChild_marginX = function(vChild, vJobs) +{ + if (vJobs.marginLeft || vJobs.initial) + { + var vValueLeft = vChild.getMarginLeft(); + vValueLeft != null ? vChild._applyRuntimeMarginLeft(vValueLeft) : vChild._resetRuntimeMarginLeft(); + } + + if (vJobs.marginRight || vJobs.initial) + { + var vValueRight = vChild.getMarginRight(); + vValueRight != null ? vChild._applyRuntimeMarginRight(vValueRight) : vChild._resetRuntimeMarginRight(); + } +} + +/** + * Apply the Y margin values as pure stylesheet equivalent. + * + * @param vChild {qx.ui.core.Widget} child to layout + * @param vJobs {Set} layout changes to perform + */ +qx.Proto.layoutChild_marginY = function(vChild, vJobs) +{ + if (vJobs.marginTop || vJobs.initial) + { + var vValueTop = vChild.getMarginTop(); + vValueTop != null ? vChild._applyRuntimeMarginTop(vValueTop) : vChild._resetRuntimeMarginTop(); + } + + if (vJobs.marginBottom || vJobs.initial) + { + var vValueBottom = vChild.getMarginBottom(); + vValueBottom != null ? vChild._applyRuntimeMarginBottom(vValueBottom) : vChild._resetRuntimeMarginBottom(); + } +} + +qx.Proto.layoutChild_sizeX_essentialWrapper = function(vChild, vJobs) { + return vChild._isWidthEssential() ? this.layoutChild_sizeX(vChild, vJobs) : vChild._resetRuntimeWidth(); +} + +qx.Proto.layoutChild_sizeY_essentialWrapper = function(vChild, vJobs) { + return vChild._isHeightEssential() ? this.layoutChild_sizeY(vChild, vJobs) : vChild._resetRuntimeHeight(); +} + + + + + + +/* +--------------------------------------------------------------------------- + [11] DISPOSER +--------------------------------------------------------------------------- +*/ + +/*! + Dispose the layout implmentation and release the associated widget. +*/ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + this._widget = null; + + qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/MenuButtonLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/MenuButtonLayoutImpl.js new file mode 100644 index 0000000000..a9c6f3499d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/MenuButtonLayoutImpl.js @@ -0,0 +1,185 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.MenuButtonLayoutImpl", qx.renderer.layout.HorizontalBoxLayoutImpl, +function(vWidget) +{ + qx.renderer.layout.HorizontalBoxLayoutImpl.call(this, vWidget); + + // We don't need flex support, should make things a bit faster, + // as this omits some additional loops in qx.renderer.layout.HorizontalBoxLayoutImpl. + this.setEnableFlexSupport(false); +}); + + +/*! + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + + Inherits from qx.renderer.layout.HorizontalBoxLayoutImpl: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [11] DISPOSER +*/ + + + + + +/* +--------------------------------------------------------------------------- + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the width needed by all children of this widget +*/ +qx.Proto.computeChildrenNeededWidth = function() +{ + // Caching the widget reference + var vWidget = this.getWidget(); + + // Ignore the verticalBoxLayout inside qx.ui.menu.Menu + var vMenu = vWidget.getParent().getParent(); + + // Let the menu do the real hard things + return vMenu.getMenuButtonNeededWidth(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS +--------------------------------------------------------------------------- +*/ + +/*! + Things to do and layout when any of the childs changes its outer width. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateSelfOnChildOuterWidthChange = function(vChild) +{ + // Caching the widget reference + var vWidget = this.getWidget(); + + // Ignore the verticalBoxLayout inside qx.ui.menu.Menu + var vMenu = vWidget.getParent().getParent(); + + // Send out invalidate signals + switch(vChild) + { + case vWidget._iconObject: + vMenu._invalidateMaxIconWidth(); + break; + + case vWidget._labelObject: + vMenu._invalidateMaxLabelWidth(); + break; + + case vWidget._shortcutObject: + vMenu._invalidateMaxShortcutWidth(); + break; + + case vWidget._arrowObject: + vMenu._invalidateMaxArrowWidth(); + break; + } + + // Call superclass implementation + return qx.renderer.layout.HorizontalBoxLayoutImpl.prototype.updateSelfOnChildOuterWidthChange.call(this, vChild); +} + + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +qx.Proto.layoutChild_locationX = function(vChild, vJobs) +{ + // Caching the widget reference + var vWidget = this.getWidget(); + + // Ignore the verticalBoxLayout inside qx.ui.menu.Menu + var vMenu = vWidget.getParent().getParent(); + + // Left position of the child + var vPos = null; + + // Ask the menu instance for the correct location + switch(vChild) + { + case vWidget._iconObject: + vPos = vMenu.getIconPosition(); + break; + + case vWidget._labelObject: + vPos = vMenu.getLabelPosition(); + break; + + case vWidget._shortcutObject: + vPos = vMenu.getShortcutPosition(); + break; + + case vWidget._arrowObject: + vPos = vMenu.getArrowPosition(); + break; + } + + if (vPos != null) + { + vPos += vWidget.getPaddingLeft(); + vChild._applyRuntimeLeft(vPos); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/MenuLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/MenuLayoutImpl.js new file mode 100644 index 0000000000..14ef800a76 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/MenuLayoutImpl.js @@ -0,0 +1,102 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.MenuLayoutImpl", qx.renderer.layout.VerticalBoxLayoutImpl, +function(vWidget) +{ + qx.renderer.layout.VerticalBoxLayoutImpl.call(this, vWidget); + + // We don't need flex support, should make things a bit faster, + // as this omits some additional loops in qx.renderer.layout.HorizontalBoxLayoutImpl. + this.setEnableFlexSupport(false); +}); + + +/*! + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + + Inherits from qx.renderer.layout.VerticalBoxLayoutImpl: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER +*/ + + + + +/* +--------------------------------------------------------------------------- + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Updates children on special jobs +*/ +qx.Proto.updateChildrenOnJobQueueFlush = function(vQueue) +{ + var vWidget = this.getWidget(); + var ch, chc; + + if (vQueue.preferredInnerWidth) + { + var ch = vWidget.getChildren(), chl = ch.length, chc; + var sch, schl; + + for (var i=0; i<chl; i++) + { + chc = ch[i]; + sch = chc.getChildren(); + schl = sch.length; + + for (var j=0; j<schl; j++) { + sch[j].addToLayoutChanges("locationX"); + } + } + } + + // Call superclass implementation + return qx.renderer.layout.VerticalBoxLayoutImpl.prototype.updateChildrenOnJobQueueFlush.call(this, vQueue); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/VerticalBoxLayoutImpl.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/VerticalBoxLayoutImpl.js new file mode 100644 index 0000000000..fe2eb8f897 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/layout/VerticalBoxLayoutImpl.js @@ -0,0 +1,868 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.layout.VerticalBoxLayoutImpl", qx.renderer.layout.LayoutImpl, +function(vWidget) { + qx.renderer.layout.LayoutImpl.call(this, vWidget); +}); + +qx.OO.addProperty({ name : "enableFlexSupport", type : "boolean", defaultValue : true }); + + + +/*! + Global Structure: + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH + [08] CHILDREN ADD/REMOVE/MOVE HANDLING + [09] FLUSH LAYOUT QUEUES OF CHILDREN + [10] LAYOUT CHILD + [11] DISPOSER + + + Inherits from qx.renderer.layout.LayoutImpl: + [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD + [11] DISPOSER +*/ + + + +/* +--------------------------------------------------------------------------- + [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the box width of the given child. +*/ +qx.Proto.computeChildBoxWidth = function(vChild) +{ + if (this.getWidget().getStretchChildrenOrthogonalAxis() && vChild._computedWidthTypeNull && vChild.getAllowStretchX()) { + return this.getWidget().getInnerWidth(); + } + + return vChild.getWidthValue() || vChild._computeBoxWidthFallback(); +} + +/*! + Compute and return the box height of the given child. +*/ +qx.Proto.computeChildBoxHeight = function(vChild) { + return vChild.getHeightValue() || vChild._computeBoxHeightFallback(); +} + +/*! + Computes the height of all flexible children. +*/ +qx.Proto.computeChildrenFlexHeight = function() +{ + if (this._childrenFlexHeightComputed || !this.getEnableFlexSupport()) { + return; + } + + this._childrenFlexHeightComputed = true; + + // this.debug("computeChildrenFlexHeight"); + + var vWidget = this.getWidget(); + var vChildren = vWidget.getVisibleChildren(); + var vChildrenLength = vChildren.length; + var vCurrentChild; + var vFlexibleChildren = []; + var vAvailHeight = vWidget.getInnerHeight(); + var vUsedHeight = vWidget.getSpacing() * (vChildrenLength-1); + var vIterator; + + + // ************************************************************* + // 1. Compute the sum of all static sized children and finding + // all flexible children. + // ************************************************************* + for (vIterator=0; vIterator<vChildrenLength; vIterator++) + { + vCurrentChild = vChildren[vIterator]; + + if (vCurrentChild._computedHeightTypeFlex) + { + vFlexibleChildren.push(vCurrentChild); + + if (vWidget._computedHeightTypeAuto) { + vUsedHeight += vCurrentChild.getPreferredBoxHeight(); + } + } + else + { + vUsedHeight += vCurrentChild.getOuterHeight(); + } + } + + // this.debug("Height: " + vUsedHeight + "/" + vAvailHeight); + // this.debug("Flexible Count: " + vFlexibleChildren.length); + + + // ************************************************************* + // 2. Compute the sum of all flexible children heights + // ************************************************************* + var vRemainingHeight = vAvailHeight - vUsedHeight; + var vFlexibleChildrenLength = vFlexibleChildren.length; + var vPrioritySum = 0; + + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) { + vPrioritySum += vFlexibleChildren[vIterator]._computedHeightParsed; + } + + + // ************************************************************* + // 3. Calculating the size of each 'part'. + // ************************************************************* + var vPartHeight = vRemainingHeight / vPrioritySum; + + + if (!vWidget.getUseAdvancedFlexAllocation()) + { + // ************************************************************* + // 4a. Computing the flex height value of each flexible child + // and add the height to the usedHeight, so that we can + // fix rounding problems later. + // ************************************************************* + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightParsed * vPartHeight); + vUsedHeight += vCurrentChild._computedHeightFlexValue; + } + } + else + { + // ************************************************************* + // 4b. Calculating the diff. Which means respect the min/max + // height configuration in flex and store the higher/lower + // data in a diff. + // ************************************************************* + + var vAllocationDiff = 0; + var vMinAllocationLoops, vFlexibleChildrenLength, vAdjust, vCurrentAllocationSum, vFactorSum, vComputedFlexibleHeight; + + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + vComputedFlexibleHeight = vCurrentChild._computedHeightFlexValue = vCurrentChild._computedHeightParsed * vPartHeight; + vAllocationDiff += vComputedFlexibleHeight - qx.lang.Number.limit(vComputedFlexibleHeight, vCurrentChild.getMinHeightValue(), vCurrentChild.getMaxHeightValue()); + } + + // Rounding diff + vAllocationDiff = Math.round(vAllocationDiff); + + if (vAllocationDiff == 0) + { + // ************************************************************* + // 5a. If the diff is equal zero we must not do anything more + // and do nearly identical the same like in 4a. which means + // to round the calculated flex value and add it to the + // used height so we can fix rounding problems later. + // ************************************************************* + + // Rounding values and fixing rounding errors + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue); + vUsedHeight += vCurrentChild._computedHeightFlexValue; + } + } + else + { + // ************************************************************* + // 5b. Find maximum loops of each adjustable child to adjust + // the height until the min/max height limits are reached. + // ************************************************************* + + var vUp = vAllocationDiff > 0; + for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--) + { + vCurrentChild = vFlexibleChildren[vIterator]; + + if (vUp) + { + vAdjust = (vCurrentChild.getMaxHeightValue() || Infinity) - vCurrentChild._computedHeightFlexValue; + + if (vAdjust > 0) + { + vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedHeightParsed); + } + else + { + qx.lang.Array.removeAt(vFlexibleChildren, vIterator); + + vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue); + vUsedHeight += Math.round(vCurrentChild._computedHeightFlexValue + vAdjust); + } + } + else + { + vAdjust = qx.util.Validation.isValidNumber(vCurrentChild.getMinHeightValue()) ? vCurrentChild._computedHeightFlexValue - vCurrentChild.getMinHeightValue() : vCurrentChild._computedHeightFlexValue; + + if (vAdjust > 0) + { + vCurrentChild._allocationLoops = Math.floor(vAdjust / vCurrentChild._computedHeightParsed); + } + else + { + qx.lang.Array.removeAt(vFlexibleChildren, vIterator); + + vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue); + vUsedHeight += Math.round(vCurrentChild._computedHeightFlexValue - vAdjust); + } + } + } + + // ************************************************************* + // 6. Try to reallocate the height between flexible children + // so that the requirements through min/max limits + // are satisfied. + // ************************************************************* + while (vAllocationDiff != 0 && vFlexibleChildrenLength > 0) + { + vFlexibleChildrenLength = vFlexibleChildren.length; + vMinAllocationLoops = Infinity; + vFactorSum = 0; + + // Find minimal loop amount + for (vIterator=0; vIterator<vFlexibleChildrenLength; vIterator++) + { + vMinAllocationLoops = Math.min(vMinAllocationLoops, vFlexibleChildren[vIterator]._allocationLoops); + vFactorSum += vFlexibleChildren[vIterator]._computedHeightParsed; + } + + // Be sure that the adjustment is not bigger/smaller than diff + vCurrentAllocationSum = Math.min(vFactorSum * vMinAllocationLoops, vAllocationDiff); + + // this.debug("Diff: " + vAllocationDiff); + // this.debug("Min Loops: " + vMinAllocationLoops); + // this.debug("Sum: " + vCurrentAllocationSum); + // this.debug("Factor: " + vFactorSum); + + // Reducing diff by current sum + vAllocationDiff -= vCurrentAllocationSum; + + // Adding sizes to children to adjust + for (vIterator=vFlexibleChildrenLength-1; vIterator>=0; vIterator--) + { + vCurrentChild = vFlexibleChildren[vIterator]; + vCurrentChild._computedHeightFlexValue += vCurrentAllocationSum / vFactorSum * vCurrentChild._computedHeightParsed; + + if (vCurrentChild._allocationLoops == vMinAllocationLoops) + { + vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue); + + vUsedHeight += vCurrentChild._computedHeightFlexValue; + delete vCurrentChild._allocationLoops; + qx.lang.Array.removeAt(vFlexibleChildren, vIterator); + } + else + { + if (vAllocationDiff == 0) + { + vCurrentChild._computedHeightFlexValue = Math.round(vCurrentChild._computedHeightFlexValue); + vUsedHeight += vCurrentChild._computedHeightFlexValue; + delete vCurrentChild._allocationLoops; + } + else + { + vCurrentChild._allocationLoops -= vMinAllocationLoops; + } + } + } + } + } + } + + // ************************************************************* + // 7. Fix rounding errors + // ************************************************************* + vCurrentChild._computedHeightFlexValue += vAvailHeight - vUsedHeight; +} + +qx.Proto.invalidateChildrenFlexHeight = function() { + delete this._childrenFlexHeightComputed; +} + + + + + +/* +--------------------------------------------------------------------------- + [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + Compute and return the height needed by all children of this widget +*/ +qx.Proto.computeChildrenNeededHeight = function() +{ + var w = this.getWidget(); + return qx.renderer.layout.LayoutImpl.prototype.computeChildrenNeededHeight_sum.call(this) + ((w.getVisibleChildrenLength()-1) * w.getSpacing()); +} + + + + + + +/* +--------------------------------------------------------------------------- + [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS +--------------------------------------------------------------------------- +*/ + +/*! + Things to do and layout when any of the childs changes its outer height. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateSelfOnChildOuterHeightChange = function(vChild) +{ + // if a childrens outer height changes we need to update our accumulated + // height of all childrens (used for middle or bottom alignments) + this.getWidget()._invalidateAccumulatedChildrenOuterHeight(); +} + + + + + +/* +--------------------------------------------------------------------------- + [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT +--------------------------------------------------------------------------- +*/ + +/*! + Actions that should be done if the inner width of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerWidthChange = function(vChild) +{ + // use variables here to be sure to call both methods. + var vUpdatePercent = vChild._recomputePercentX(); + var vUpdateStretch = vChild._recomputeStretchingX(); + + // priority to childs internal alignment + if ((vChild.getHorizontalAlign() || this.getWidget().getHorizontalChildrenAlign()) == "center") { + vChild.addToLayoutChanges("locationX"); + } + + // inform the caller if there were any notable changes occured + return vUpdatePercent || vUpdateStretch; +} + +/*! + Actions that should be done if the inner height of the widget was changed. + Normally this includes update to percent values and ranges. +*/ +qx.Proto.updateChildOnInnerHeightChange = function(vChild) +{ + if (this.getWidget().getVerticalChildrenAlign() == "middle") { + vChild.addToLayoutChanges("locationY"); + } + + // use variables here to be sure to call both methods. + var vUpdatePercent = vChild._recomputePercentY(); + var vUpdateFlex = vChild._recomputeFlexY(); + + // inform the caller if there were any notable changes occured + return vUpdatePercent || vUpdateFlex; +} + + + + + + + +/* +--------------------------------------------------------------------------- + [06] UPDATE LAYOUT ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Invalidate and recompute things because of job in queue (before the rest of job handling will be executed). +*/ +qx.Proto.updateSelfOnJobQueueFlush = function(vJobQueue) +{ + if (vJobQueue.addChild || vJobQueue.removeChild) { + this.getWidget()._invalidateAccumulatedChildrenOuterHeight(); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + [07] UPDATE CHILDREN ON JOB QUEUE FLUSH +--------------------------------------------------------------------------- +*/ + +/*! + Updates children on special jobs +*/ +qx.Proto.updateChildrenOnJobQueueFlush = function(vQueue) +{ + var vStretchX=false, vStretchY=false; + var vWidget = this.getWidget(); + + // switching the orientation need updates for stretching on both axis + if (vQueue.orientation) { + vStretchX = vStretchY = true; + } + + // different updates depending from the current orientation (or the new one) + if (vQueue.spacing || vQueue.orientation || vQueue.reverseChildrenOrder || vQueue.verticalChildrenAlign) { + vWidget._addChildrenToLayoutQueue("locationY"); + } + + if (vQueue.horizontalChildrenAlign) { + vWidget._addChildrenToLayoutQueue("locationX"); + } + + if (vQueue.stretchChildrenOrthogonalAxis) { + vStretchX = true; + } + + // if stretching should be reworked reset the previous one and add + // a layout job to update the width respectively height. + if (vStretchX) + { + vWidget._recomputeChildrenStretchingX(); + vWidget._addChildrenToLayoutQueue("width"); + } + + if (vStretchY) + { + vWidget._recomputeChildrenStretchingY(); + vWidget._addChildrenToLayoutQueue("height"); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + [08] CHILDREN ADD/REMOVE/MOVE HANDLING +--------------------------------------------------------------------------- +*/ + +/*! + This method combines calls of methods which should be done if a widget should be removed from the current layout. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateChildrenOnRemoveChild = function(vChild, vIndex) +{ + var w=this.getWidget(), ch=w.getVisibleChildren(), chl=ch.length, chc, i=-1; + + // Fix index to be at the first flex child + if (this.getEnableFlexSupport()) + { + for (var i=0; i<chl; i++) + { + chc = ch[i]; + if (chc.getHasFlexY()) + { + vIndex = Math.min(vIndex, i); + break; + } + } + + i=-1; + } + + // Handle differently depending on layout mode + switch(w.getLayoutMode()) + { + case "bottom": + case "top-reversed": + while((chc=ch[++i]) && i<vIndex) { + chc.addToLayoutChanges("locationY"); + } + + break; + + case "middle": + case "middle-reversed": + while(chc=ch[++i]) { + chc.addToLayoutChanges("locationY"); + } + + break; + + default: + i+=vIndex; + while(chc=ch[++i]) { + chc.addToLayoutChanges("locationY"); + } + } +} + +/*! + This method combines calls of methods which should be done if a child should be moved + inside the same parent to a new positions. + Needed by layouts where the children depends on each-other, like flow- or box-layouts. +*/ +qx.Proto.updateChildrenOnMoveChild = function(vChild, vIndex, vOldIndex) +{ + var vChildren = this.getWidget().getVisibleChildren(); + + var vStart = Math.min(vIndex, vOldIndex); + var vStop = Math.max(vIndex, vOldIndex)+1; + + for (var i=vStart; i<vStop; i++) { + vChildren[i].addToLayoutChanges("locationY"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + [09] FLUSH LAYOUT QUEUES OF CHILDREN +--------------------------------------------------------------------------- +*/ + +/*! + This method have full control of the order in which the + registered (or also non-registered) children should be + layouted on the horizontal axis. +*/ +qx.Proto.flushChildrenQueue = function(vChildrenQueue) +{ + var w=this.getWidget(), ch=w.getVisibleChildren(), chl=ch.length, chc, i; + + // This block is needed for flex handling and + // will inform flex children if there was any + // change to the other content + if (this.getEnableFlexSupport()) + { + this.invalidateChildrenFlexHeight(); + + for (i=0; i<chl; i++) + { + chc = ch[i]; + if (chc.getHasFlexY()) + { + chc._computedHeightValue = null; + + if (chc._recomputeBoxHeight()) + { + chc._recomputeOuterHeight(); + chc._recomputeInnerHeight(); + } + + vChildrenQueue[chc.toHashCode()] = chc; + chc._layoutChanges.height = true; + } + } + } + + switch(w.getLayoutMode()) + { + case "bottom": + case "top-reversed": + // find the last child which has a layout request + for (var i=chl-1; i>=0 && !vChildrenQueue[ch[i].toHashCode()]; i--) {} + + // layout all children before this last child + for (var j=0; j<=i; j++) { + w._layoutChild(chc=ch[j]); + } + + break; + + case "middle": + case "middle-reversed": + // re-layout all children + i = -1; + while(chc=ch[++i]) { + w._layoutChild(chc); + } + + break; + + default: + // layout all childs from the first child + // with an own layout request to the end + i = -1; + var changed=false; + while(chc=ch[++i]) + { + if (changed || vChildrenQueue[chc.toHashCode()]) + { + w._layoutChild(chc); + changed = true; + } + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + [10] LAYOUT CHILD +--------------------------------------------------------------------------- +*/ + +/*! + This is called from qx.ui.core.Widget and it's task is to apply the layout + (excluding border and padding) to the child. +*/ +qx.Proto.layoutChild = function(vChild, vJobs) +{ + this.layoutChild_sizeX(vChild, vJobs); + this.layoutChild_sizeY(vChild, vJobs); + + this.layoutChild_sizeLimitX(vChild, vJobs); + this.layoutChild_sizeLimitY(vChild, vJobs); + + this.layoutChild_locationX(vChild, vJobs); + this.layoutChild_locationY(vChild, vJobs); + + this.layoutChild_marginX(vChild, vJobs); + this.layoutChild_marginY(vChild, vJobs); +} + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera() || qx.core.Client.getInstance().isWebkit()) +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth) + { + if ((vChild._isWidthEssential() && (!vChild._computedWidthTypeNull || !vChild._computedMinWidthTypeNull || !vChild._computedMaxWidthTypeNull)) || (vChild.getAllowStretchX() && this.getWidget().getStretchChildrenOrthogonalAxis())) + { + vChild._applyRuntimeWidth(vChild.getBoxWidth()); + } + else + { + vChild._resetRuntimeWidth(); + } + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight) + { + if (vChild._isHeightEssential() && (!vChild._computedHeightTypeNull || !vChild._computedMinHeightTypeNull || !vChild._computedMaxHeightTypeNull)) + { + vChild._applyRuntimeHeight(vChild.getBoxHeight()); + } + else + { + vChild._resetRuntimeHeight(); + } + } + } +} +else +{ + qx.Proto.layoutChild_sizeX = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.width) + { + if (vChild._isWidthEssential() && !vChild._computedWidthTypeNull) + { + vChild._applyRuntimeWidth(vChild.getWidthValue()); + } + else + { + vChild._resetRuntimeWidth(); + } + } + } + + qx.Proto.layoutChild_sizeY = function(vChild, vJobs) + { + if (vJobs.initial || vJobs.height) + { + if (vChild._isHeightEssential() && !vChild._computedHeightTypeNull) + { + vChild._applyRuntimeHeight(vChild.getHeightValue()); + } + else + { + vChild._resetRuntimeHeight(); + } + } + } +} + +qx.Proto.layoutChild_locationY = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + // handle first child + if (vWidget.getFirstVisibleChild() == vChild) + { + switch(vWidget.getLayoutMode()) + { + case "bottom": + case "top-reversed": + var vPos = vWidget.getPaddingBottom() + vWidget.getAccumulatedChildrenOuterHeight() - vChild.getOuterHeight(); + break; + + case "middle": + case "middle-reversed": + var vPos = vWidget.getPaddingTop() + Math.round((vWidget.getInnerHeight() - vWidget.getAccumulatedChildrenOuterHeight()) / 2); + break; + + default: + var vPos = vWidget.getPaddingTop(); + } + } + + // handle any following child + else + { + var vPrev = vChild.getPreviousVisibleSibling(); + + switch(vWidget.getLayoutMode()) + { + case "bottom": + case "top-reversed": + var vPos = vPrev._cachedLocationVertical - vChild.getOuterHeight() - vWidget.getSpacing(); + break; + + default: + var vPos = vPrev._cachedLocationVertical + vPrev.getOuterHeight() + vWidget.getSpacing(); + } + } + + // store for next sibling + vChild._cachedLocationVertical = vPos; + + // apply styles + switch(this.getWidget().getLayoutMode()) + { + case "bottom": + case "bottom-reversed": + case "middle-reversed": + // add relative positions (like 'position:relative' in css) + vPos += !vChild._computedBottomTypeNull ? vChild.getBottomValue() : !vChild._computedTopTypeNull ? -(vChild.getTopValue()) : 0; + + vChild._resetRuntimeTop(); + vChild._applyRuntimeBottom(vPos); + break; + + default: + // add relative positions (like 'position:relative' in css) + vPos += !vChild._computedTopTypeNull ? vChild.getTopValue() : !vChild._computedBottomTypeNull ? -(vChild.getBottomValue()) : 0; + + vChild._resetRuntimeBottom(); + vChild._applyRuntimeTop(vPos); + } +} + +qx.Proto.layoutChild_locationX = function(vChild, vJobs) +{ + var vWidget = this.getWidget(); + + // special stretching support + if (qx.core.Client.getInstance().isGecko() && vChild.getAllowStretchX() && vWidget.getStretchChildrenOrthogonalAxis() && vChild._computedWidthTypeNull) + { + vChild._applyRuntimeLeft(vWidget.getPaddingLeft() || 0); + vChild._applyRuntimeRight(vWidget.getPaddingRight() || 0); + + return; + } + + // priority to childs internal alignment + var vAlign = vChild.getHorizontalAlign() || vWidget.getHorizontalChildrenAlign(); + + // handle center alignment + var vPos = vAlign == "center" ? Math.round((vWidget.getInnerWidth() - vChild.getOuterWidth()) / 2) : 0; + + // the right alignment use the real 'right' styleproperty to + // use the best available method in modern browsers + if (vAlign == "right") + { + // add parent padding + vPos += vWidget.getPaddingRight(); + + // relative positions (like 'position:relative' in css) + if (!vChild._computedRightTypeNull) { + vPos += vChild.getRightValue(); + } + else if (!vChild._computedLeftTypeNull) { + vPos -= vChild.getLeftValue(); + } + + // apply styles + vChild._resetRuntimeLeft(); + vChild._applyRuntimeRight(vPos); + } + else + { + // add parent padding + vPos += vWidget.getPaddingLeft(); + + // relative positions (like 'position:relative' in css) + if (!vChild._computedLeftTypeNull) { + vPos += vChild.getLeftValue(); + } + else if (!vChild._computedRightTypeNull) { + vPos -= vChild.getRightValue(); + } + + // apply styles + vChild._resetRuntimeRight(); + vChild._applyRuntimeLeft(vPos); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/AppearanceTheme.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/AppearanceTheme.js new file mode 100644 index 0000000000..cea49e86ab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/AppearanceTheme.js @@ -0,0 +1,216 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/** + * Appearance Theme + * + * @param vTitle {String} anme of the appearance + */ +qx.OO.defineClass("qx.renderer.theme.AppearanceTheme", qx.core.Object, +function(vTitle) +{ + qx.core.Object.call(this); + + this.setTitle(vTitle); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** name of the theme */ +qx.OO.addProperty({ name : "title", type : "string", allowNull : false, defaultValue : "" }); + + + + + +/* +--------------------------------------------------------------------------- + DATA +--------------------------------------------------------------------------- +*/ + +qx.Proto._appearances = {}; + + + + + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Register an appearance for a given id + * + * vData has the following structure: + * <pre> + * { + * setup : function() {} + * initial : function(vTheme) {} + * state : function(vTheme, vStates) {} + * } + * </pre> + * @param vId {String} id of the apperance (e.g. "button", "label", ...) + * @param vData {Map} + */ +qx.Proto.registerAppearance = function(vId, vData) { + this._appearances[vId] = vData; +}; + + +/** + * Return the apperance object for a specific apperance id. + * + * @param vId {String} id of the apperance (e.g. "button", "label", ...) + * @return {Object} appearance map + */ +qx.Proto.getAppearance = function(vId) { + return this._appearances[vId]; +} + + +/** + * Call the "setup" function of the apperance + * + * @param vAppearance {Object} appearance map + */ +qx.Proto.setupAppearance = function(vAppearance) +{ + if (!vAppearance._setupDone) + { + if (vAppearance.setup) { + vAppearance.setup(this); + } + + vAppearance._setupDone = true; + } +}; + + + + + + + + +/* +--------------------------------------------------------------------------- + WIDGET METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Get the result of the "initial" function for a given id + * + * @param vId {String} id of the apperance (e.g. "button", "label", ...) + * @return {Map} map of widget properties as returned by the "initial" function + */ +qx.Proto.initialFrom = function(vId) +{ + var vAppearance = this.getAppearance(vId); + if (vAppearance) + { + this.setupAppearance(vAppearance); + + try + { + return vAppearance.initial ? vAppearance.initial(this) : {} + } + catch(ex) + { + this.error("Couldn't apply initial appearance", ex); + } + } + else + { + return this.error("Missing appearance: " + vId); + } +}; + + +/** + * Get the result of the "state" function for a given id and states + * + * @param vId {String} id of the apperance (e.g. "button", "label", ...) + * @param vStates {Map} hash map defining the set states + * @return {Map} map of widget properties as returned by the "state" function + */ +qx.Proto.stateFrom = function(vId, vStates) +{ + var vAppearance = this.getAppearance(vId); + if (vAppearance) + { + this.setupAppearance(vAppearance); + + try + { + return vAppearance.state ? vAppearance.state(this, vStates) : {} + } + catch(ex) + { + this.error("Couldn't apply state appearance", ex); + } + } + else + { + return this.error("Missing appearance: " + vId); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Disposer + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._appearances = null; + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/ColorTheme.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/ColorTheme.js new file mode 100644 index 0000000000..a8ad292443 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/ColorTheme.js @@ -0,0 +1,134 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#after(qx.manager.object.ColorManager) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.theme.ColorTheme", qx.core.Object, +function(vTitle) +{ + qx.core.Object.call(this); + + this._compiledColors = {}; + this.setTitle(vTitle); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "title", type : "string", allowNull : false, defaultValue : "" }); + + + + + +/* +--------------------------------------------------------------------------- + DATA +--------------------------------------------------------------------------- +*/ + +qx.Proto._needsCompilation = true; +qx.Proto._colors = {}; + + + + +/* +--------------------------------------------------------------------------- + PUBLIC METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getValueByName = function(vName) { + return this._colors[vName] || ""; +} + +qx.Proto.getStyleByName = function(vName) { + return this._compiledColors[vName] || ""; +} + + + + + + +/* +--------------------------------------------------------------------------- + PRIVATE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.compile = function() +{ + if (!this._needsCompilation) { + return; + } + + for (var vName in qx.renderer.color.Color.themedNames) { + this._compileValue(vName); + } + + this._needsCompilation = false; +} + +qx.Proto._compileValue = function(vName) +{ + var v = this._colors[vName]; + this._compiledColors[vName] = v ? qx.renderer.color.Color.rgb2style.apply(this, this._colors[vName]) : vName; +} + +qx.Proto._register = function() { + return qx.manager.object.ColorManager.getInstance().registerTheme(this); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + delete this._colors; + delete this._compiledColors; + + qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/IconTheme.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/IconTheme.js new file mode 100644 index 0000000000..d45384376b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/IconTheme.js @@ -0,0 +1,36 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#after(qx.manager.object.ImageManager) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.theme.IconTheme", qx.core.Object, +function(vTitle) +{ + qx.core.Object.call(this); + + this.setTitle(vTitle); +}); + +qx.OO.addProperty({ name : "title", type : "string", allowNull : false, defaultValue : "" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/WidgetTheme.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/WidgetTheme.js new file mode 100644 index 0000000000..914c8dbbd1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/theme/WidgetTheme.js @@ -0,0 +1,36 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#after(qx.manager.object.ImageManager) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.theme.WidgetTheme", qx.core.Object, +function(vTitle) +{ + qx.core.Object.call(this); + + this.setTitle(vTitle); +}); + +qx.OO.addProperty({ name : "title", type : "string", allowNull : false, defaultValue : "" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/appearance/Classic.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/appearance/Classic.js new file mode 100644 index 0000000000..9e8d0e702b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/appearance/Classic.js @@ -0,0 +1,2229 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Til Schneider (til132) + + ************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(theme_appearance) +#require(qx.manager.object.AppearanceManager) +#optional(qx.renderer.color.Color) +#optional(qx.renderer.color.ColorObject) +#optional(qx.renderer.border.Border) +#optional(qx.renderer.border.BorderObject) +#optional(qx.renderer.font.Font) +#optional(qx.renderer.font.FontObject) +#embed(qx.static/image/dotted_white.gif) +#embed(qx.static/image/blank.gif) + + ************************************************************************ */ + +/** + * The default qooxdoo appearance theme. + * + * @param vTitle {String?"qooxdoo default appearance"} appearance title + */ +qx.OO.defineClass("qx.theme.appearance.Classic", qx.renderer.theme.AppearanceTheme, +function(vTitle) { + qx.renderer.theme.AppearanceTheme.call(this, vTitle || "qooxdoo default appearance"); +}); + + + + +qx.Proto._appearances = qx.lang.Object.carefullyMergeWith( { + /* + --------------------------------------------------------------------------- + CORE + --------------------------------------------------------------------------- + */ + + "image" : { + initial : function(vTheme) { + return { + allowStretchX : false, + allowStretchY : false + } + } + }, + + "client-document" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("threedface"); + this.color = new qx.renderer.color.ColorObject("windowtext"); + }, + + initial : function(vTheme) { + return { + backgroundColor : this.bgcolor, + color : this.color, + hideFocus : true, + enableElementFocus : false + } + } + }, + + "blocker" : { + initial : function(vTheme) { + // You could also use: "static/image/dotted_white.gif" for example as backgroundImage here + // (Visible) background tiles could be dramatically slow down mshtml! + // A background image or color is always needed for mshtml to block the events successfully. + return { + cursor : "default", + backgroundImage : "static/image/blank.gif" + } + } + }, + + "atom" : { + initial : function(vTheme) { + return { + cursor : "default", + spacing : 4, + width : "auto", + height : "auto", + horizontalChildrenAlign : "center", + verticalChildrenAlign : "middle", + stretchChildrenOrthogonalAxis : false, + allowStretchY : false, + allowStretchX : false + } + } + }, + + "label" : { + setup : function() { + this.color_disabled = new qx.renderer.color.ColorObject("graytext"); + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + }, + + initial : function(vTheme) { + return { + font: this.font, + wrap : false + } + }, + + state : function(vTheme, vStates) { + return { + color : vStates.disabled ? this.color_disabled : null + } + } + }, + + "htmlcontainer" : { + initial : function(vTheme) { + return vTheme.initialFrom("label"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("label", vStates); + } + }, + + "popup" : { + initial : function(vTheme) { + return { + width : "auto", + height : "auto" + } + } + }, + + "tool-tip" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("InfoBackground"); + this.color = new qx.renderer.color.ColorObject("InfoText"); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("popup"), { + backgroundColor : this.bgcolor, + color : this.color, + border : qx.renderer.border.BorderPresets.getInstance().info, + paddingTop : 1, + paddingRight : 3, + paddingBottom : 2, + paddingLeft : 3 + }); + } + }, + + "iframe" : { + initial : function(vTheme) { + return { + border : qx.renderer.border.BorderPresets.getInstance().inset + } + } + }, + + + + + + + /* + --------------------------------------------------------------------------- + BUTTON + --------------------------------------------------------------------------- + */ + + "button" : { + setup : function() { + this.bgcolor_default = new qx.renderer.color.ColorObject("buttonface"); + this.bgcolor_over = new qx.renderer.color.Color("#87BCE5"); + this.bgcolor_left = new qx.renderer.color.Color("#FFF0C9"); + + this.border_pressed = qx.renderer.border.BorderPresets.getInstance().inset; + this.border_default = qx.renderer.border.BorderPresets.getInstance().outset; + }, + + initial : function(vTheme) { + return vTheme.initialFrom("atom"); + }, + + state : function(vTheme, vStates) { + var vReturn = { + backgroundColor : vStates.abandoned ? this.bgcolor_left : vStates.over ? this.bgcolor_over : this.bgcolor_default, + border : vStates.pressed || vStates.checked || vStates.abandoned ? this.border_pressed : this.border_default + } + + if (vStates.pressed || vStates.abandoned) { + vReturn.paddingTop = 4; + vReturn.paddingRight = 3; + vReturn.paddingBottom = 2; + vReturn.paddingLeft = 5; + } + else { + vReturn.paddingTop = vReturn.paddingBottom = 3; + vReturn.paddingRight = vReturn.paddingLeft = 4; + } + + return vReturn; + } + }, + + + + + + + + + /* + --------------------------------------------------------------------------- + TOOLBAR + --------------------------------------------------------------------------- + */ + + "toolbar" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("threedface"); + }, + + initial : function(vTheme) { + return { + border : qx.renderer.border.BorderPresets.getInstance().thinOutset, + backgroundColor : this.bgcolor, + height : "auto" + } + } + }, + + "toolbar-part" : { + initial : function(vTheme) { + return { + width : "auto" + } + } + }, + + "toolbar-part-handle" : { + initial : function(vTheme) { + return { + width : 10 + } + } + }, + + "toolbar-part-handle-line" : { + initial : function(vTheme) { + return { + top : 2, + left : 3, + bottom : 2, + width : 4, + border : qx.renderer.border.BorderPresets.getInstance().thinOutset + } + } + }, + + "toolbar-separator" : { + initial : function(vTheme) { + return { + width : 8 + } + } + }, + + "toolbar-separator-line" : { + setup : function() { + var b = this.border = new qx.renderer.border.BorderObject; + + b.setLeftColor("threedshadow"); + b.setRightColor("threedhighlight"); + + b.setLeftStyle("solid"); + b.setRightStyle("solid"); + + b.setLeftWidth(1); + b.setRightWidth(1); + b.setTopWidth(0); + b.setBottomWidth(0); + }, + + initial : function(vTheme) { + return { + top : 2, + left: 3, + width : 2, + bottom : 2, + border : this.border + } + } + }, + + "toolbar-button" : { + setup : function() { + this.bgcolor_default = new qx.renderer.color.ColorObject("buttonface"); + this.bgcolor_left = new qx.renderer.color.Color("#FFF0C9"); + + this.border_pressed = qx.renderer.border.BorderPresets.getInstance().thinInset; + this.border_over = qx.renderer.border.BorderPresets.getInstance().thinOutset; + this.border_default = qx.renderer.border.BorderPresets.getInstance().none; + + this.checked_background = "static/image/dotted_white.gif"; + }, + + initial : function(vTheme) { + return { + cursor : "default", + spacing : 4, + width : "auto", + verticalChildrenAlign : "middle" + } + }, + + state : function(vTheme, vStates) { + var vReturn = { + backgroundColor : vStates.abandoned ? this.bgcolor_left : this.bgcolor_default, + backgroundImage : vStates.checked && !vStates.over ? this.checked_background : null + } + + if (vStates.pressed || vStates.checked || vStates.abandoned) { + vReturn.border = this.border_pressed; + + vReturn.paddingTop = 3; + vReturn.paddingRight = 2; + vReturn.paddingBottom = 1; + vReturn.paddingLeft = 4; + } else if (vStates.over) { + vReturn.border = this.border_over; + + vReturn.paddingTop = vReturn.paddingBottom = 2; + vReturn.paddingLeft = vReturn.paddingRight = 3; + } else { + vReturn.border = this.border_default; + + vReturn.paddingTop = vReturn.paddingBottom = 3; + vReturn.paddingLeft = vReturn.paddingRight = 4; + } + + return vReturn; + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + BAR VIEW + --------------------------------------------------------------------------- + */ + + "bar-view" : { + setup : function() { + this.background = new qx.renderer.color.ColorObject("#FAFBFE"); + }, + + initial : function(vTheme) { + return { + backgroundColor : this.background, + border : qx.renderer.border.BorderPresets.getInstance().shadow + } + } + }, + + "bar-view-pane" : { + state : function(vTheme, vStates) { + if (vStates.barHorizontal) { + return { + width : null, + height : "1*" + } + } + else { + return { + width : "1*", + height : null + } + } + } + }, + + "bar-view-page" : { + initial : function(vTheme) { + return { + left : 10, + right : 10, + top : 10, + bottom : 10 + } + } + }, + + "bar-view-bar" : { + setup : function() { + this.background_color = new qx.renderer.color.ColorObject("#E1EEFF"); + + this.border_color = new qx.renderer.color.ColorObject("threedshadow"); + + this.border_top = new qx.renderer.border.BorderObject; + this.border_top.setBottom(1, "solid", this.border_color); + + this.border_bottom = new qx.renderer.border.BorderObject; + this.border_bottom.setTop(1, "solid", this.border_color); + + this.border_left = new qx.renderer.border.BorderObject; + this.border_left.setRight(1, "solid", this.border_color); + + this.border_right = new qx.renderer.border.BorderObject; + this.border_right.setLeft(1, "solid", this.border_color); + }, + + initial : function(vTheme) { + return { + backgroundColor : this.background_color + } + }, + + state : function(vTheme, vStates) { + if (vStates.barTop) { + return { + paddingTop : 1, + paddingRight : 0, + paddingBottom : 1, + paddingLeft : 0, + + border : this.border_top, + height : "auto", + width : null, + orientation : "horizontal" + }; + } + else if (vStates.barBottom) { + return { + paddingTop : 1, + paddingRight : 0, + paddingBottom : 1, + paddingLeft : 0, + + border : this.border_bottom, + height : "auto", + width : null, + orientation : "horizontal" + }; + } + else if (vStates.barLeft) { + return { + paddingTop : 0, + paddingRight : 1, + paddingBottom : 0, + paddingLeft : 1, + + border : this.border_left, + height : null, + width : "auto", + orientation : "vertical" + }; + } + else if (vStates.barRight) { + return { + paddingTop : 0, + paddingRight : 1, + paddingBottom : 0, + paddingLeft : 1, + + border : this.border_right, + height : null, + width : "auto", + orientation : "vertical" + }; + } + } + }, + + "bar-view-button" : { + setup : function() { + this.background_color_normal = null; + this.background_color_checked = new qx.renderer.color.ColorObject("#FAFBFE"); + + this.border_color = new qx.renderer.color.ColorObject("threedshadow"); + this.border_color_checked = new qx.renderer.color.ColorObject("#FEC83C"); + + this.border_top_checked = new qx.renderer.border.Border(1, "solid", this.border_color); + this.border_top_checked.setBottom(3, "solid", this.border_color_checked); + + this.border_bottom_checked = new qx.renderer.border.Border(1, "solid", this.border_color); + this.border_bottom_checked.setTop(3, "solid", this.border_color_checked); + + this.border_left_checked = new qx.renderer.border.Border(1, "solid", this.border_color); + this.border_left_checked.setRight(3, "solid", this.border_color_checked); + + this.border_right_checked = new qx.renderer.border.Border(1, "solid", this.border_color); + this.border_right_checked.setLeft(3, "solid", this.border_color_checked); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("atom"), { + iconPosition : "top" + }); + }, + + state : function(vTheme, vStates) { + var vReturn = { + backgroundColor : vStates.checked ? this.background_color_checked : this.background_color_normal, + allowStretchX : true, + allowStretchY : true + } + + if (vStates.checked || vStates.over) { + if (vStates.barTop) { + vReturn.border = this.border_top_checked; + vReturn.paddingTop = 3; + vReturn.paddingRight = 6; + vReturn.paddingBottom = 1; + vReturn.paddingLeft = 6; + } + else if (vStates.barBottom) { + vReturn.border = this.border_bottom_checked; + vReturn.paddingTop = 1; + vReturn.paddingRight = 6; + vReturn.paddingBottom = 3; + vReturn.paddingLeft = 6; + } + else if (vStates.barLeft) { + vReturn.border = this.border_left_checked; + vReturn.paddingTop = 3; + vReturn.paddingRight = 4; + vReturn.paddingBottom = 3; + vReturn.paddingLeft = 6; + } + else if (vStates.barRight) { + vReturn.border = this.border_right_checked; + vReturn.paddingTop = 3; + vReturn.paddingRight = 6; + vReturn.paddingBottom = 3; + vReturn.paddingLeft = 4; + } + } + else { + vReturn.border = qx.renderer.border.BorderPresets.getInstance().none; + vReturn.paddingTop = vReturn.paddingBottom = 4; + vReturn.paddingRight = vReturn.paddingLeft = 7; + } + + if (vStates.barTop || vStates.barBottom) { + vReturn.marginTop = vReturn.marginBottom = 0; + vReturn.marginRight = vReturn.marginLeft = 1; + vReturn.width = "auto"; + vReturn.height = null; + } + else if (vStates.barLeft || vStates.barRight) { + vReturn.marginTop = vReturn.marginBottom = 1; + vReturn.marginRight = vReturn.marginLeft = 0; + vReturn.height = "auto"; + vReturn.width = null; + } + + return vReturn; + } + }, + + + + + + + + + + /* + --------------------------------------------------------------------------- + WINDOW + --------------------------------------------------------------------------- + */ + + "window" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("threedface"); + this.color = new qx.renderer.color.ColorObject("windowtext"); + }, + + initial : function(vTheme) { + return { + backgroundColor : this.bgcolor, + color : this.color, + paddingTop : 1, + paddingRight : 1, + paddingBottom : 1, + paddingLeft : 1 + } + }, + + state : function(vTheme, vStates) { + return { + border : vStates.maximized ? qx.renderer.border.BorderPresets.getInstance().none : qx.renderer.border.BorderPresets.getInstance().outset + } + } + }, + + "window-captionbar" : { + setup : function() { + this.bgcolor_active = new qx.renderer.color.ColorObject("activecaption"); + this.color_active = new qx.renderer.color.ColorObject("captiontext"); + this.bgcolor_inactive = new qx.renderer.color.ColorObject("inactivecaption"); + this.color_inactive = new qx.renderer.color.ColorObject("inactivecaptiontext"); + }, + + initial : function(vTheme) { + return { + paddingTop : 1, + paddingRight : 2, + paddingBottom : 2, + paddingLeft : 2, + verticalChildrenAlign : "middle", + height : "auto", + overflow : "hidden" + } + }, + + state : function(vTheme, vStates) { + return { + backgroundColor : vStates.active ? this.bgcolor_active : this.bgcolor_inactive, + color : vStates.active ? this.color_active : this.color_inactive + } + } + }, + + "window-resize-frame" : { + initial : function(vTheme) { + return { + border : qx.renderer.border.BorderPresets.getInstance().shadow + } + } + }, + + "window-captionbar-icon" : { + initial : function(vTheme) { + return { + marginRight : 2 + } + } + }, + + "window-captionbar-title" : { + setup : function() { + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + this.font.setBold(true); + }, + + initial : function(vTheme) { + return { + cursor : "default", + font : this.font, + marginRight : 2, + wrap : false + } + } + }, + + "window-captionbar-button" : { + initial : function(vTheme) { + return vTheme.initialFrom("button"); + }, + + state : function(vTheme, vStates) { + var vReturn = vTheme.stateFrom("button", vStates); + + if (vStates.pressed || vStates.abandoned) { + vReturn.paddingTop = 2; + vReturn.paddingRight = 1; + vReturn.paddingBottom = 0; + vReturn.paddingLeft = 3; + } + else { + vReturn.paddingTop = vReturn.paddingBottom = 1; + vReturn.paddingRight = vReturn.paddingLeft = 2; + } + + return vReturn; + } + }, + + "window-captionbar-minimize-button" : { + initial : function(vTheme) { + return vTheme.initialFrom("window-captionbar-button"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("window-captionbar-button", vStates); + } + }, + + "window-captionbar-restore-button" : { + initial : function(vTheme) { + return vTheme.initialFrom("window-captionbar-button"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("window-captionbar-button", vStates); + } + }, + + "window-captionbar-maximize-button" : { + initial : function(vTheme) { + return vTheme.initialFrom("window-captionbar-button"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("window-captionbar-button", vStates); + } + }, + + "window-captionbar-close-button" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("window-captionbar-button"), { + marginLeft : 2 + }); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("window-captionbar-button", vStates); + } + }, + + "window-statusbar" : { + initial : function(vTheme) { + return { + border : qx.renderer.border.BorderPresets.getInstance().thinInset, + height : "auto" + } + } + }, + + "window-statusbar-text" : { + initial : function(vTheme) { + return { + paddingTop : 1, + paddingRight : 4, + paddingBottom : 1, + paddingLeft : 4, + cursor : "default" + } + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + RESIZER + --------------------------------------------------------------------------- + */ + + "resizer": { + initial: function(vTheme) { + return { + border : qx.renderer.border.BorderPresets.getInstance().outset + } + } + }, + + "resizer-frame" : { + initial : function(vTheme) { + return { + border : qx.renderer.border.BorderPresets.getInstance().shadow + } + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + MENU + --------------------------------------------------------------------------- + */ + + "menu" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("menu"); + }, + + initial : function(vTheme) { + return { + width : "auto", + height : "auto", + backgroundColor : this.bgcolor, + border : qx.renderer.border.BorderPresets.getInstance().outset, + paddingTop : 1, + paddingRight : 1, + paddingBottom : 1, + paddingLeft : 1 + } + } + }, + + "menu-layout" : { + initial : function(vTheme) { + return { + top : 0, + right : 0, + bottom : 0, + left : 0 + } + } + }, + + "menu-button" : { + setup : function() { + this.BGCOLOR_OVER = new qx.renderer.color.ColorObject("highlight"); + this.BGCOLOR_OUT = null; + + this.COLOR_OVER = new qx.renderer.color.ColorObject("highlighttext"); + this.COLOR_OUT = null; + }, + + initial : function(vTheme) { + return { + minWidth : "auto", + height : "auto", + spacing : 2, + paddingTop : 2, + paddingRight : 4, + paddingBottom : 2, + paddingLeft : 4, + cursor : "default", + verticalChildrenAlign : "middle", + allowStretchX : true + } + }, + + state : function(vTheme, vStates) { + return { + backgroundColor : vStates.over ? this.BGCOLOR_OVER : this.BGCOLOR_OUT, + color : vStates.over ? this.COLOR_OVER : this.COLOR_OUT + } + } + }, + + "menu-check-box" : { + initial : function(vTheme) { + return vTheme.initialFrom("menu-button"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("menu-button", vStates); + } + }, + + "menu-radio-button" : { + initial : function(vTheme) { + return vTheme.initialFrom("menu-button"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("menu-button", vStates); + } + }, + + "menu-separator" : { + initial : function(vTheme) { + return { + height : "auto", + marginTop : 3, + marginBottom : 2, + paddingLeft : 3, + paddingRight : 3 + } + } + }, + + "menu-separator-line" : { + initial : function(vTheme) { + return { + right : 0, + left : 0, + height : "auto", + border : qx.renderer.border.BorderPresets.getInstance().verticalDivider + } + } + }, + + + + + + + + + /* + --------------------------------------------------------------------------- + LIST + --------------------------------------------------------------------------- + */ + + "list" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("white"); + }, + + initial : function(vTheme) { + return { + overflow : "hidden", + border : qx.renderer.border.BorderPresets.getInstance().thinInset, + backgroundColor : this.bgcolor + } + } + }, + + "list-item" : { + setup : function() { + this.bgcolor_selected = new qx.renderer.color.ColorObject("highlight"); + this.color_selected = new qx.renderer.color.ColorObject("highlighttext"); + }, + + initial : function(vTheme) { + return { + cursor : "default", + height : "auto", + horizontalChildrenAlign : "left", + verticalChildrenAlign : "middle", + spacing : 4, + paddingTop : 3, + paddingRight : 5, + paddingBottom : 3, + paddingLeft : 5, + minWidth : "auto" + } + }, + + state : function(vTheme, vStates) { + return { + backgroundColor : vStates.selected ? this.bgcolor_selected : null, + color : vStates.selected ? this.color_selected : null + } + } + }, + + + + + + + + + /* + --------------------------------------------------------------------------- + FIELDS + --------------------------------------------------------------------------- + */ + + "text-field" : { + setup : function() { + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + }, + + initial : function(vTheme) { + return { + hideFocus : true, + border : qx.renderer.border.BorderPresets.getInstance().inset, + paddingTop : 1, + paddingRight : 3, + paddingBottom : 1, + paddingLeft : 3, + allowStretchY : false, + allowStretchX : true, + font : this.font, + width : "auto", + height : "auto" + } + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("label", vStates); + } + }, + + "text-area" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("text-field"), { + overflow : "auto", + + // gecko automatically defines a marginTop/marginBottom of 1px. We need to reset these values. + marginTop : 0, + marginBottom : 0 + }); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("text-field", vStates); + } + }, + + + + + + + + + + + /* + --------------------------------------------------------------------------- + COMBOBOX + --------------------------------------------------------------------------- + */ + + "combo-box" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("white"); + }, + + initial : function(vTheme) { + return { + minWidth : 40, + width : 120, + height : "auto", + border : qx.renderer.border.BorderPresets.getInstance().inset, + backgroundColor : this.bgcolor, + allowStretchY : false + } + } + }, + + "combo-box-ex" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("white"); + }, + + initial : function(vTheme) { + return { + width : "auto", + height : "auto", + border : qx.renderer.border.BorderPresets.getInstance().inset, + backgroundColor : this.bgcolor, + allowStretchY : false + } + } + }, + + "combo-box-list" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("list"), { + top : 0, + right : 0, + bottom : 0, + left : 0, + border : null, + overflow : "scrollY" + }); + } + }, + + "combo-box-ex-list" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("list"), { + statusBarVisible: false, + columnVisibilityButtonVisible: false, + height: 'auto', + maxHeight: 150, + top : 0, + left : 0, + border : null + }); + } + }, + + "combo-box-popup" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("list"), { + height : "auto", + maxHeight : 150, + border : qx.renderer.border.BorderPresets.getInstance().shadow + }); + } + }, + + "combo-box-ex-popup" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("list"), { + width: "auto", + height : "auto", + border : qx.renderer.border.BorderPresets.getInstance().shadow + }); + } + }, + + "combo-box-text-field" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("transparent"); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("text-field"), { + border : qx.renderer.border.BorderPresets.getInstance().none, + width : "1*", + backgroundColor : this.bgcolor + }); + } + }, + + "combo-box-ex-text-field" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("transparent"); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("text-field"), { + border : qx.renderer.border.BorderPresets.getInstance().none, + minWidth : 30, + width : 100, + backgroundColor : this.bgcolor + }); + } + }, + + // Used both for ComboBox and ComboBoxEx + "combo-box-button" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("button"), { + height : null, + allowStretchY : true + }); + }, + + state : function(vTheme, vStates) { + return qx.lang.Object.mergeWith(vTheme.stateFrom("button", vStates), { + paddingTop : 0, + paddingRight : 3, + paddingBottom : 0, + paddingLeft : 2 + }); + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + TREE + --------------------------------------------------------------------------- + */ + + "tree-element" : { + initial : function(vTheme) { + return { + height : 16, + verticalChildrenAlign : "middle" + } + } + }, + + "tree-element-icon" : { + initial : function(vTheme) { + return { + width : 16, + height : 16 + } + } + }, + + "tree-element-label" : { + setup : function() { + this.bgcolor_selected = new qx.renderer.color.ColorObject("highlight"); + this.color_selected = new qx.renderer.color.ColorObject("highlighttext"); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("label"), { + cursor : "default", + marginLeft : 3, + height : 15, + paddingTop : 2, + paddingRight : 2, + paddingBottom : 2, + paddingLeft : 2, + allowStretchY : false + }); + }, + + state : function(vTheme, vStates) { + return qx.lang.Object.mergeWith(vTheme.stateFrom("label", vStates), { + backgroundColor : vStates.selected ? this.bgcolor_selected : null, + color : vStates.selected ? this.color_selected : null + }); + } + }, + + "tree-folder" : { + initial : function(vTheme) { + return vTheme.initialFrom("tree-element"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("tree-element", vStates); + } + }, + + "tree-folder-icon" : { + initial : function(vTheme) { + return { + width : 16, + height : 16 + } + } + }, + + "tree-folder-label" : { + initial : function(vTheme) { + return vTheme.initialFrom("tree-element-label"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("tree-element-label", vStates); + } + }, + + "tree" : { + initial : function(vTheme) { + return vTheme.initialFrom("tree-folder"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("tree-folder", vStates); + } + }, + + "tree-icon" : { + initial : function(vTheme) { + return vTheme.initialFrom("tree-folder-icon"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("tree-folder-icon", vStates); + } + }, + + "tree-label" : { + initial : function(vTheme) { + return vTheme.initialFrom("tree-folder-label"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("tree-folder-label", vStates); + } + }, + + "tree-container" : { + initial : function(vTheme) { + return { + verticalChildrenAlign : "top" + } + } + }, + + "tree-folder-container" : { + initial : function(vTheme) { + return { + height : "auto", + verticalChildrenAlign : "top" + } + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + LISTVIEW + --------------------------------------------------------------------------- + */ + + "list-view" : { + initial : function(vTheme) { + return { + cursor : "default", + overflow: "hidden" + } + } + }, + + "list-view-pane" : { + initial : function(vTheme) { + return { + width : "1*", + horizontalSpacing : 1, + overflow : "hidden" + } + } + }, + + "list-view-header" : { + setup : function() { + this.border = new qx.renderer.border.Border; + this.border.setBottom(1, "solid", "#e2e2e2"); + + this.bgcolor = new qx.renderer.color.Color("#f2f2f2"); + }, + + initial : function(vTheme) { + return { + height : "auto", + overflow: "hidden", + border : this.border, + backgroundColor : this.bgcolor + } + } + }, + + "list-view-header-cell" : { + setup : function() { + this.border_hover = new qx.renderer.border.Border; + this.border_hover.setBottom(2, "solid", "#F9B119"); + + this.bgcolor_hover = new qx.renderer.color.Color("white"); + }, + + initial : function(vTheme) { + return { + overflow : "hidden", + paddingTop : 2, + paddingRight : 6, + paddingBottom : 2, + paddingLeft : 6, + spacing : 4 + }; + }, + + state : function(vTheme, vStates) { + if (vStates.over) { + return { + backgroundColor : this.bgcolor_hover, + paddingBottom : 0, + border : this.border_hover + }; + } + else { + return { + backgroundColor : null, + paddingBottom : 2, + border : null + }; + } + } + }, + + "list-view-header-separator" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("#D6D5D9"); + }, + + initial : function(vTheme) { + return { + backgroundColor : this.bgcolor, + width : 1, + marginTop : 1, + marginBottom : 1 + }; + } + }, + + "list-view-content-cell" : { + setup : function() { + this.bgcolor_selected = new qx.renderer.color.ColorObject("highlight"); + this.color_selected = new qx.renderer.color.ColorObject("highlighttext"); + }, + + state : function(vTheme, vStates) { + return { + backgroundColor : vStates.selected ? this.bgcolor_selected : null, + color : vStates.selected ? this.color_selected : null + }; + } + }, + + "list-view-content-cell-image" : { + initial : function(vTheme) { + return { + paddingLeft : 6, + paddingRight : 6 + }; + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("list-view-content-cell", vStates); + } + }, + + "list-view-content-cell-text" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("htmlcontainer"), { + overflow: "hidden", + paddingLeft : 6, + paddingRight : 6 + }); + }, + + state : function(vTheme, vStates) { + return qx.lang.Object.mergeWith(vTheme.stateFrom("htmlcontainer", vStates), vTheme.stateFrom("list-view-content-cell", vStates)); + } + }, + + "list-view-content-cell-html" : { + initial : function(vTheme) { + return vTheme.initialFrom("list-view-content-cell-text"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("list-view-content-cell-text", vStates); + } + }, + + "list-view-content-cell-icon-html" : { + initial : function(vTheme) { + return vTheme.initialFrom("list-view-content-cell-text"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("list-view-content-cell-text", vStates); + } + }, + + "list-view-content-cell-link" : { + initial : function(vTheme) { + return vTheme.initialFrom("list-view-content-cell-text"); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("list-view-content-cell-text", vStates); + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + TABVIEW + --------------------------------------------------------------------------- + */ + + "tab-view" : { + initial : function(vTheme) { + return { + spacing : -1 + }; + } + }, + + "tab-view-bar" : { + initial : function(vTheme) { + return { + height : "auto" + }; + } + }, + + "tab-view-pane" : { + setup : function() { + this.border = new qx.renderer.border.Border(1, "solid", "#91A5BD"); + this.bgcolor = new qx.renderer.color.ColorObject("#FAFBFE"); + }, + + initial : function(vTheme) { + return { + height : "1*", + backgroundColor : this.bgcolor, + border : this.border, + paddingTop : 10, + paddingRight : 10, + paddingBottom : 10, + paddingLeft : 10 + }; + } + }, + + "tab-view-page" : { + initial : function(vTheme) { + return { + top : 0, + right : 0, + bottom : 0, + left : 0 + }; + } + }, + + "tab-view-button" : { + setup : function() { + this.bgcolor_normal = new qx.renderer.color.ColorObject("#E1EEFF"); + this.bgcolor_checked = new qx.renderer.color.ColorObject("#FAFBFE"); + + this.border_top_normal = new qx.renderer.border.Border(1, "solid", "#91A5BD"); + this.border_top_normal.setBottomWidth(0); + + this.border_top_checked = new qx.renderer.border.Border(1, "solid", "#91A5BD"); + this.border_top_checked.setBottomWidth(0); + this.border_top_checked.setTop(3, "solid", "#FEC83C"); + + this.border_bottom_normal = new qx.renderer.border.Border(1, "solid", "#91A5BD"); + this.border_bottom_normal.setTopWidth(0); + + this.border_bottom_checked = new qx.renderer.border.Border(1, "solid", "#91A5BD"); + this.border_bottom_checked.setTopWidth(0); + this.border_bottom_checked.setBottom(3, "solid", "#FEC83C"); + }, + + initial : function(vTheme) { + return vTheme.initialFrom("atom"); + }, + + state : function(vTheme, vStates) { + var vReturn; + + if (vStates.checked) { + vReturn = { + backgroundColor : this.bgcolor_checked, + zIndex : 1, + paddingTop : 2, + paddingBottom : 4, + paddingLeft : 7, + paddingRight : 8, + border : vStates.barTop ? this.border_top_checked : this.border_bottom_checked, + marginTop : 0, + marginBottom : 0, + marginRight : -1, + marginLeft : -2 + } + + if (vStates.alignLeft) { + if (vStates.firstChild) { + vReturn.paddingLeft = 6; + vReturn.paddingRight = 7; + vReturn.marginLeft = 0; + } + } + else { + if (vStates.lastChild) { + vReturn.paddingLeft = 8; + vReturn.paddingRight = 5; + vReturn.marginRight = 0; + } + } + } + else { + vReturn = { + backgroundColor : vStates.over ? this.bgcolor_checked : this.bgcolor_normal, + zIndex : 0, + paddingTop : 2, + paddingBottom : 2, + paddingLeft : 5, + paddingRight : 6, + marginRight : 1, + marginLeft : 0 + } + + if (vStates.alignLeft) { + if (vStates.firstChild) { + vReturn.paddingLeft = 6; + vReturn.paddingRight = 5; + } + } + else { + if (vStates.lastChild) { + vReturn.paddingLeft = 6; + vReturn.paddingRight = 5; + vReturn.marginRight = 0; + } + } + + if (vStates.barTop) { + vReturn.border = this.border_top_normal; + vReturn.marginTop = 3; + vReturn.marginBottom = 1; + } + else { + vReturn.border = this.border_bottom_normal; + vReturn.marginTop = 1; + vReturn.marginBottom = 3; + } + } + + return vReturn; + } + }, + + + + + + + /* + --------------------------------------------------------------------------- + FIELDSET + --------------------------------------------------------------------------- + */ + + "field-set" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("threedface"); + }, + + initial : function(vTheme) { + return { + backgroundColor : this.bgcolor + } + } + }, + + "field-set-legend" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("threedface"); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("atom"), { + top : 1, + left : 10, + backgroundColor : this.bgcolor, + paddingRight : 3, + paddingLeft : 4, + marginRight: 10 + }); + } + }, + + "field-set-frame" : { + initial : function(vTheme) { + return { + top : 8, + left : 2, + right : 2, + bottom : 2, + paddingTop : 12, + paddingRight : 9, + paddingBottom : 12, + paddingLeft : 9, + border : qx.renderer.border.BorderPresets.getInstance().groove + } + } + }, + + "check-box-field-set-legend" : { + setup : function() { + this.bgcolor = new qx.renderer.color.ColorObject("threedface"); + }, + + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("atom"), { + top : 1, + left : 10, + backgroundColor : this.bgcolor, + paddingRight : 3 + }); + } + }, + + "radio-button-field-set-legend" : { + initial : function(vTheme) { + return vTheme.initialFrom("check-box-field-set-legend"); + } + }, + + + + + + + + /* + --------------------------------------------------------------------------- + SPINNER + --------------------------------------------------------------------------- + */ + + "spinner" : { + setup : function() { + this.bgcolor = new qx.renderer.color.Color("white"); + }, + + initial : function(vTheme) { + return { + width : 60, + height : 22, + border : qx.renderer.border.BorderPresets.getInstance().inset, + backgroundColor : this.bgcolor + } + } + }, + + "spinner-field" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("text-field"), { + width : "1*", + border : qx.renderer.border.BorderPresets.getInstance().none + }); + }, + + state : function(vTheme, vStates) { + return vTheme.stateFrom("text-field", vStates); + } + }, + + "spinner-button-up" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("image"), { + height: "1*", + width: 16, + backgroundColor: new qx.renderer.color.ColorObject("threedface") + }); + }, + + state : function(vTheme, vStates) { + return qx.lang.Object.mergeWith(vTheme.stateFrom("button", vStates), { + paddingTop : 0, + paddingRight : 0, + paddingBottom: 0, + paddingLeft : 3 + }); + } + }, + + "spinner-button-down" : { + initial : function(vTheme) { + return qx.lang.Object.mergeWith(vTheme.initialFrom("image"), { + height: "1*", + width: 16, + backgroundColor: new qx.renderer.color.ColorObject("threedface") + }); + }, + + state : function(vTheme, vStates) { + return qx.lang.Object.mergeWith(vTheme.stateFrom("button", vStates), { + paddingTop : 1, + paddingRight : 0, + paddingBottom: 0, + paddingLeft : 3 + }); + } + }, + + + + + + /* + --------------------------------------------------------------------------- + COLORSELECTOR + --------------------------------------------------------------------------- + */ + + "colorselector" : { + setup : function() { + this.border = qx.renderer.border.BorderPresets.getInstance().outset; + }, + + initial : function(vTheme) { + return { + border : this.border, + width: "auto", + height: "auto" + } + }, + + state : function(vTheme, vStates) { + + } + }, + + + + + + /* + --------------------------------------------------------------------------- + DATECHOOSER + --------------------------------------------------------------------------- + */ + + "datechooser-toolbar-button" : { + setup : function() { + this.bgcolor_default = new qx.renderer.color.ColorObject("buttonface"); + this.bgcolor_left = new qx.renderer.color.Color("#FFF0C9"); + + this.border_pressed = qx.renderer.border.BorderPresets.getInstance().thinInset; + this.border_over = qx.renderer.border.BorderPresets.getInstance().thinOutset; + this.border_default = null; + + this.checked_background = "static/image/dotted_white.gif"; + }, + + initial : function(vTheme) { + return { + cursor : "default", + spacing : 4, + width : "auto", + verticalChildrenAlign : "middle" + } + }, + + state : function(vTheme, vStates) { + var vReturn = { + backgroundColor : vStates.abandoned ? this.bgcolor_left : this.bgcolor_default, + backgroundImage : (vStates.checked && !vStates.over) ? this.checked_background : null + } + + if (vStates.pressed || vStates.checked || vStates.abandoned) { + vReturn.border = this.border_pressed; + } else if (vStates.over) { + vReturn.border = this.border_over; + } else { + vReturn.border = this.border_default; + } + + if (vStates.pressed || vStates.checked || vStates.abandoned) { + vReturn.paddingTop = 2; + vReturn.paddingRight = 0; + vReturn.paddingBottom = 0; + vReturn.paddingLeft = 2; + } else if (vStates.over) { + vReturn.paddingTop = vReturn.paddingBottom = 1; + vReturn.paddingLeft = vReturn.paddingRight = 1; + } else { + vReturn.paddingTop = vReturn.paddingBottom = 2; + vReturn.paddingLeft = vReturn.paddingRight = 2; + } + + return vReturn; + } + }, + + + "datechooser-monthyear" : { + setup : function() { + this.font = new qx.renderer.font.Font(13, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + }, + + initial : function(vTheme) { + return { + font : this.font, + textAlign: "center", + verticalAlign: "middle" + } + } + }, + + + "datechooser-datepane" : { + setup : function() { + this.border = new qx.renderer.border.Border(1, "solid", "gray"); + this.bgcolor = new qx.renderer.color.ColorObject("window"); + }, + + initial : function(vTheme) { + return { + border : this.border, + backgroundColor : this.bgcolor + } + } + }, + + + "datechooser-weekday" : { + setup : function() { + this.border = new qx.renderer.border.Border; + this.border.set({ bottomColor:"gray", bottomStyle :"solid", bottomWidth:1 }); + this.color = new qx.renderer.color.ColorObject("window"); + this.bgcolor = new qx.renderer.color.ColorObject("#6285BA"); + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + this.font.setBold(true); + }, + + initial : function(vTheme) { + return { + border : this.border, + font : this.font, + textAlign : "center" + } + }, + + state : function(vTheme, vStates) { + return { + color : vStates.weekend ? this.bgcolor : this.color, + backgroundColor : vStates.weekend ? this.color : this.bgcolor + } + } + + }, + + + "datechooser-day" : { + setup : function() { + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + + this.selectedColor = new qx.renderer.color.ColorObject("highlightText"); + this.selectedBgColor = new qx.renderer.color.ColorObject("highlight"); + this.color = new qx.renderer.color.ColorObject("windowText"); + this.otherMonthColor = new qx.renderer.color.ColorObject("grayText"); + + this.transparentBorder = new qx.renderer.border.Border(1, "none"); + }, + + initial : function(vTheme) { + return { + cursor : "default", + border : this.border, + color : this.color, + font : this.font, + textAlign : "center", + verticalAlign: "middle", + selectable: false + } + }, + + state : function(vTheme, vStates) { + return { + border : vStates.today ? qx.renderer.border.BorderPresets.getInstance().black : this.transparentBorder, + color : vStates.selected ? this.selectedColor : + (vStates.otherMonth ? this.otherMonthColor : this.color), + backgroundColor : vStates.selected ? this.selectedBgColor : null + } + } + }, + + "datechooser-week" : { + setup : function() { + this.border = new qx.renderer.border.Border; + this.border.set({ rightColor:"gray", rightStyle :"solid", rightWidth:1 }); + this.headerBorder = new qx.renderer.border.Border; + this.headerBorder.set({ rightColor:"gray", rightStyle :"solid", rightWidth:1, + bottomColor:"gray", bottomStyle :"solid", bottomWidth:1 }); + this.color = new qx.renderer.color.ColorObject("#6285BA"); + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + }, + + initial : function(vTheme) { + return { + border : this.border, + font : this.font, + color: this.color, + paddingLeft : 2 + } + }, + + state : function(vTheme, vStates) { + return { + border : vStates.header ? this.headerBorder : this.border + } + } + }, + + + + + + + /* + --------------------------------------------------------------------------- + TABLE + --------------------------------------------------------------------------- + */ + + "table-focus-statusbar" : { + setup : function() { + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + this.border = new qx.renderer.border.Border; + this.border.set({ topColor:"threedshadow", topStyle :"solid", topWidth:1 }); + }, + + initial : function(vTheme) { + return { + font: this.font, + border: this.border, + paddingLeft: 2, + paddingRight: 2 + } + } + }, + + + "table-focus-indicator" : { + setup : function() { + this.border = new qx.renderer.border.Border(3, "solid", "#b3d9ff"); + this.blurBorder = new qx.renderer.border.Border(3, "solid", "#c5c8ca"); + this.editingBorder = new qx.renderer.border.Border(2, "solid", "#b3d9ff"); + }, + + state : function(vTheme, vStates) { + return { + border : vStates.editing ? this.editingBorder : (vStates.tableHasFocus ? this.border : this.blurBorder) + } + } + }, + + + "table-editor-textfield" : { + setup : function() { + this.font = new qx.renderer.font.Font(11, '"Segoe UI", Corbel, Calibri, Tahoma, "Lucida Sans Unicode", sans-serif'); + }, + + initial : function(vTheme) { + return { + font: this.font, + border: qx.renderer.border.BorderPresets.getInstance().none, + paddingLeft: 2, + paddingRight: 2, + paddingTop: 0, + paddingBottom: 0 + } + } + }, + + "table-header-cell" : { + setup : function() { + this.border = new qx.renderer.border.Border; + this.border.set({ rightColor:"#d6d2c2", rightStyle :"solid", rightWidth:1, + bottomColor:"#d6d2c2", bottomStyle :"solid", bottomWidth:2 }); + + this.mouseOverBorder = new qx.renderer.border.Border; + this.mouseOverBorder.set({ rightColor:"#d6d2c2", rightStyle :"solid", rightWidth:1, + bottomColor:"#F9B119", bottomStyle :"solid", bottomWidth:2 }); + + this.mouseOverBackground = new qx.renderer.color.ColorObject("white"); + this.background = new qx.renderer.color.ColorObject("#ebeadb"); + }, + + initial : function(vTheme) { + return { + cursor : "default", + border : this.border, + paddingLeft : 2, + paddingRight : 2, + spacing:2, + overflow:"hidden", + selectable: false, + backgroundColor:this.background, + iconPosition:"right", + verticalChildrenAlign:"middle" + } + }, + + state : function(vTheme, vStates) { + return { + backgroundColor : vStates.mouseover ? this.mouseOverBackground : this.background, + border : vStates.mouseover ? this.mouseOverBorder : this.border + } + } + }, + + + + + /* + --------------------------------------------------------------------------- + SPLITPANE + --------------------------------------------------------------------------- + */ + + "splitpane" : + { + initial : function(vTheme) + { + return { + overflow : "hidden" + } + } + }, + + "splitpane-glasspane" : + { + setup : function() { + this.background = new qx.renderer.color.ColorObject("threedshadow"); + }, + + initial : function(vTheme) + { + return { + zIndex : 1e7, + backgroundColor : this.background + } + }, + + state : function(vTheme, vStates) { + return { + opacity : vStates.visible ? 0.2 : 0 + } + } + }, + + "splitpane-splitter" : + { + initial : function(vTheme) { + return { + backgroundColor : "threedface" + } + }, + + state : function(vTheme, vStates) + { + return { + cursor : vStates.horizontal ? "col-resize" : "row-resize" + }; + } + }, + + "splitpane-slider" : + { + initial : function(vTheme) + { + return { + opacity: 0.5, + zIndex : 1e8 + } + }, + + state : function(vTheme, vStates) + { + return { + backgroundColor: vStates.dragging ? "threeddarkshadow" : "threedface" + } + } + }, + + "splitpane-knob" : + { + state : function(vTheme, vStates) + { + var vReturn = { + opacity: vStates.dragging ? 0.5 : 1.0 + } + + if (vStates.horizontal) + { + vReturn.top = "33%"; + vReturn.left = null; + vReturn.marginLeft = -6; + vReturn.marginTop = 0; + vReturn.cursor = "col-resize"; + } + else if (vStates.vertical) + { + vReturn.top = null; + vReturn.left = "33%"; + vReturn.marginTop = -6; + vReturn.marginLeft = 0; + vReturn.cursor = "row-resize"; + } + + return vReturn; + } + } + + + + + /* + --------------------------------------------------------------------------- + END + --------------------------------------------------------------------------- + */ +}, qx.Super.prototype._appearances); + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.AppearanceManager.getInstance().registerAppearanceTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/System.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/System.js new file mode 100644 index 0000000000..a73824d179 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/System.js @@ -0,0 +1,59 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(theme_color) + +************************************************************************ */ + +/** + * System color theme + */ +qx.OO.defineClass("qx.theme.color.System", qx.renderer.theme.ColorTheme, +function() { + qx.renderer.theme.ColorTheme.call(this, "Operating System Default"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ColorManager.getInstance().registerColorTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsClassic.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsClassic.js new file mode 100644 index 0000000000..5d4f7e930a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsClassic.js @@ -0,0 +1,103 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(theme_color) + +************************************************************************ */ + + +/** + * Windows classic color theme + */ +qx.OO.defineClass("qx.theme.color.WindowsClassic", qx.renderer.theme.ColorTheme, +function() { + qx.renderer.theme.ColorTheme.call(this, "Windows Classic"); +}); + + + + + +/* +--------------------------------------------------------------------------- + DEFINE COLORS +--------------------------------------------------------------------------- +*/ + +qx.Proto._colors = qx.lang.Object.carefullyMergeWith({ + activeborder : [ 212,208,200 ], + activecaption : [ 10,36,106 ], + appworkspace : [ 128,128,128 ], + background : [ 58,110,165 ], + buttonface : [ 212,208,200 ], + buttonhighlight : [ 255,255,255 ], + buttonshadow : [ 128,128,128 ], + buttontext : [ 0,0,0 ], + captiontext : [ 255,255,255 ], + graytext : [ 128,128,128 ], + highlight : [ 10,36,106 ], + highlighttext : [ 255,255,255 ], + inactiveborder : [ 212,208,200 ], + inactivecaption : [ 128,128,128 ], + inactivecaptiontext : [ 212,208,200 ], + infobackground : [ 255,255,225 ], + infotext : [ 0,0,0 ], + menu : [ 212,208,200 ], + menutext : [ 0,0,0 ], + scrollbar : [ 212,208,200 ], + threeddarkshadow : [ 64,64,64 ], + threedface : [ 212,208,200 ], + threedhighlight : [ 255,255,255 ], + threedlightshadow : [ 212,208,200 ], + threedshadow : [ 128,128,128 ], + window : [ 255,255,255 ], + windowframe : [ 0,0,0 ], + windowtext : [ 0,0,0 ] +}, qx.Super.prototype._colors); + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ColorManager.getInstance().registerColorTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaBlue.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaBlue.js new file mode 100644 index 0000000000..0928f80420 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaBlue.js @@ -0,0 +1,101 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(theme_color) + +************************************************************************ */ + +/** + * Windows luna blue color theme + */ +qx.OO.defineClass("qx.theme.color.WindowsLunaBlue", qx.renderer.theme.ColorTheme, +function() { + qx.renderer.theme.ColorTheme.call(this, "Windows Luna Blue"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFINE COLORS +--------------------------------------------------------------------------- +*/ + +qx.Proto._colors = qx.lang.Object.carefullyMergeWith({ + activeborder : [ 212,208,200 ], + activecaption : [ 0,84,227 ], + appworkspace : [ 128,128,128 ], + background : [ 0,78,152 ], + buttonface : [ 236,233,216 ], + buttonhighlight : [ 255,255,255 ], + buttonshadow : [ 172,168,153 ], + buttontext : [ 0,0,0 ], + captiontext : [ 255,255,255 ], + graytext : [ 172,168,153 ], + highlight : [ 49,106,197 ], + highlighttext : [ 255,255,255 ], + inactiveborder : [ 212,208,200 ], + inactivecaption : [ 122,150,223 ], + inactivecaptiontext : [ 216,228,248 ], + infobackground : [ 255,255,225 ], + infotext : [ 0,0,0 ], + menu : [ 255,255,255 ], + menutext : [ 0,0,0 ], + scrollbar : [ 212,208,200 ], + threeddarkshadow : [ 113,111,100 ], + threedface : [ 236,233,216 ], + threedhighlight : [ 255,255,255 ], + threedlightshadow : [ 241,239,226 ], + threedshadow : [ 172,168,153 ], + window : [ 255,255,255 ], + windowframe : [ 0,0,0 ], + windowtext : [ 0,0,0 ] +}, qx.Super.prototype._colors); + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ColorManager.getInstance().registerColorTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaGreen.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaGreen.js new file mode 100644 index 0000000000..e5581849c5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaGreen.js @@ -0,0 +1,99 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(theme_color) + +************************************************************************ */ + +/** + * Windows luna green color theme + */ +qx.OO.defineClass("qx.theme.color.WindowsLunaGreen", qx.renderer.theme.ColorTheme, +function() { + qx.renderer.theme.ColorTheme.call(this, "Windows Luna Green"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFINE COLORS +--------------------------------------------------------------------------- +*/ + +qx.Proto._colors = qx.lang.Object.carefullyMergeWith({ + activeborder : [ 212,208,200 ], + activecaption : [ 139,161,105 ], + appworkspace : [ 128,128,128 ], + background : [ 157,172,189 ], + buttonface : [ 236,233,216 ], + buttonhighlight : [ 255,255,255 ], + buttonshadow : [ 172,168,153 ], + buttontext : [ 0,0,0 ], + captiontext : [ 255,255,255 ], + graytext : [ 172,168,153 ], + highlight : [ 147,160,112 ], + highlighttext : [ 255,255,255 ], + inactiveborder : [ 212,208,200 ], + inactivecaption : [ 212,214,186 ], + inactivecaptiontext : [ 255,255,255 ], + infobackground : [ 255,255,225 ], + infotext : [ 0,0,0 ], + menu : [ 255,255,255 ], + menutext : [ 0,0,0 ], + scrollbar : [ 212,208,200 ], + threeddarkshadow : [ 113,111,100 ], + threedface : [ 236,233,216 ], + threedhighlight : [ 255,255,255 ], + threedlightshadow : [ 241,239,226 ], + threedshadow : [ 172,168,153 ], + window : [ 255,255,255 ], + windowframe : [ 0,0,0 ], + windowtext : [ 0,0,0 ] +}, qx.Super.prototype._colors); + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ColorManager.getInstance().registerColorTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaSilver.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaSilver.js new file mode 100644 index 0000000000..8c160d96b6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsLunaSilver.js @@ -0,0 +1,99 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(theme_color) + +************************************************************************ */ + +/** + * Windows luna silver color theme + */ +qx.OO.defineClass("qx.theme.color.WindowsLunaSilver", qx.renderer.theme.ColorTheme, +function() { + qx.renderer.theme.ColorTheme.call(this, "Windows Luna Silver"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFINE COLORS +--------------------------------------------------------------------------- +*/ + +qx.Proto._colors = qx.lang.Object.carefullyMergeWith({ + activeborder : [ 212,208,200 ], + activecaption : [ 192,192,192 ], + appworkspace : [ 128,128,128 ], + background : [ 88,87,104 ], + buttonface : [ 224,223,227 ], + buttonhighlight : [ 255,255,255 ], + buttonshadow : [ 157,157,161 ], + buttontext : [ 0,0,0 ], + captiontext : [ 14,16,16 ], + graytext : [ 172,168,153 ], + highlight : [ 178,180,191 ], + highlighttext : [ 0,0,0 ], + inactiveborder : [ 212,208,200 ], + inactivecaption : [ 255,255,255 ], + inactivecaptiontext : [ 162,161,161 ], + infobackground : [ 255,255,225 ], + infotext : [ 0,0,0 ], + menu : [ 255,255,255 ], + menutext : [ 0,0,0 ], + scrollbar : [ 212,208,200 ], + threeddarkshadow : [ 113,111,100 ], + threedface : [ 224,223,227 ], + threedhighlight : [ 255,255,255 ], + threedlightshadow : [ 241,239,226 ], + threedshadow : [ 157,157,161 ], + window : [ 255,255,255 ], + windowframe : [ 0,0,0 ], + windowtext : [ 0,0,0 ] +}, qx.Super.prototype._colors); + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ColorManager.getInstance().registerColorTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsRoyale.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsRoyale.js new file mode 100644 index 0000000000..b27863116d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/color/WindowsRoyale.js @@ -0,0 +1,100 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(theme_color) + +************************************************************************ */ + +/** + * Windows royale color theme + */ +qx.OO.defineClass("qx.theme.color.WindowsRoyale", qx.renderer.theme.ColorTheme, +function() { + qx.renderer.theme.ColorTheme.call(this, "Windows Royale"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFINE COLORS +--------------------------------------------------------------------------- +*/ + +qx.Proto._colors = qx.lang.Object.carefullyMergeWith({ + activeborder : [ 212,208,200 ], + activecaption : [ 51,94,168 ], + appworkspace : [ 128,128,128 ], + background : [ 0,0,64 ], + buttonface : [ 235,233,237 ], + buttonhighlight : [ 255,255,255 ], + buttonshadow : [ 167,166,170 ], + buttontext : [ 0,0,0 ], + captiontext : [ 255,255,255 ], + graytext : [ 167,166,170 ], + highlight : [ 51,94,168 ], + highlighttext : [ 255,255,255 ], + inactiveborder : [ 212,208,200 ], + inactivecaption : [ 111,161,217 ], + inactivecaptiontext : [ 255,255,255 ], + infobackground : [ 255,255,225 ], + infotext : [ 0,0,0 ], + menu : [ 255,255,255 ], + menutext : [ 0,0,0 ], + scrollbar : [ 212,208,200 ], + threeddarkshadow : [ 133,135,140 ], + threedface : [ 235,233,237 ], + threedhighlight : [ 255,255,255 ], + threedlightshadow : [ 220,223,228 ], + threedshadow : [ 167,166,170 ], + window : [ 255,255,255 ], + windowframe : [ 0,0,0 ], + windowtext : [ 0,0,0 ] +}, qx.Super.prototype._colors); + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ColorManager.getInstance().registerColorTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/CrystalClear.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/CrystalClear.js new file mode 100644 index 0000000000..839d2f6c7b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/CrystalClear.js @@ -0,0 +1,76 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(theme_icon) +#resource(icontheme:icon/CrystalClear) + +************************************************************************ */ + +/** + * Crystal Clear + * Author: Everaldo (everaldo@everaldo.com) + * License: LGPL + * Home: http://www.kde-look.org/content/show.php?content=25668 + */ +qx.OO.defineClass("qx.theme.icon.CrystalClear", qx.renderer.theme.IconTheme, +function() { + qx.renderer.theme.IconTheme.call(this, "CrystalClear"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("imageUri", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "resourceUri") + "/icon/CrystalClear"); + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ImageManager.getInstance().registerIconTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/NuoveXT.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/NuoveXT.js new file mode 100644 index 0000000000..f5ea3899cb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/NuoveXT.js @@ -0,0 +1,76 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(theme_icon) +#resource(icontheme:icon/NuoveXT) + +************************************************************************ */ + +/** + * nuoveXT + * Author: Alexandre Moore (alexandre.moore@gmail.com) + * License: GPL & LGPL/EPL + * Home: http://www.kde-look.org/content/show.php?content=26449 + */ +qx.OO.defineClass("qx.theme.icon.NuoveXT", qx.renderer.theme.IconTheme, +function() { + qx.renderer.theme.IconTheme.call(this, "NuoveXT"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("imageUri", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "resourceUri") + "/icon/NuoveXT"); + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ImageManager.getInstance().registerIconTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/Nuvola.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/Nuvola.js new file mode 100644 index 0000000000..4e3b362f14 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/Nuvola.js @@ -0,0 +1,75 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(theme_icon) +#resource(icontheme:icon/Nuvola) + +************************************************************************ */ + + +/** + * Nuvola + * Author: David Vignoni (david@icon-king.com) + * License: LGPL + * Home: http://www.kde-look.org/content/show.php?content=5358 + */ +qx.OO.defineClass("qx.theme.icon.Nuvola", qx.renderer.theme.IconTheme, +function() { + qx.renderer.theme.IconTheme.call(this, "Nuvola"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("imageUri", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "resourceUri") + "/icon/Nuvola"); + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ImageManager.getInstance().registerIconTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/VistaInspirate.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/VistaInspirate.js new file mode 100644 index 0000000000..131f83ed8d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/icon/VistaInspirate.js @@ -0,0 +1,77 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(theme_icon) +#resource(icontheme:icon/VistaInspirate) + +************************************************************************ */ + +/** + * Vista-Inspirate + * Author: Alexandre Moore (alexandre.moore@gmail.com) + * License: GPL & LGPL/EPL + * Home: http://www.kde-look.org/content/show.php?content=31585 + * Comment: Based on nuoveXT by the same author + */ +qx.OO.defineClass("qx.theme.icon.VistaInspirate", qx.renderer.theme.IconTheme, +function() { + qx.renderer.theme.IconTheme.call(this, "Vista Inspirate"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("imageUri", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "resourceUri") + "/icon/VistaInspirate"); + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ImageManager.getInstance().registerIconTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/widget/Windows.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/widget/Windows.js new file mode 100644 index 0000000000..d8efdcd4c3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/theme/widget/Windows.js @@ -0,0 +1,73 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(theme_widget) +#resource(widgettheme:widget/windows) + +************************************************************************ */ + +/** + * Default qooxdoo widget theme + */ +qx.OO.defineClass("qx.theme.widget.Windows", qx.renderer.theme.WidgetTheme, +function() { + qx.renderer.theme.WidgetTheme.call(this, "Windows"); +}); + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("imageUri", qx.Settings.getValueOfClass("qx.manager.object.AliasManager", "resourceUri") + "/widget/windows"); + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; + + + + + + +/* +--------------------------------------------------------------------------- + REGISTER TO MANAGER +--------------------------------------------------------------------------- +*/ + +qx.manager.object.ImageManager.getInstance().registerWidgetTheme(qx.Class); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Range.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Range.js new file mode 100644 index 0000000000..0a26c78c1c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Range.js @@ -0,0 +1,89 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * This manager is used by all objects which needs ranges like qx.ui.form.Spinner, ... + * + * @event change {qx.event.type.Event} + */ +qx.OO.defineClass("qx.type.Range", qx.core.Target, +function() { + qx.core.Target.call(this); +}); + +/** current value of the Range object */ +qx.OO.addProperty({ name : "value", type : "number", defaultValue : 0 }); + +/** minimal value of the Range object */ +qx.OO.addProperty({ name : "min", type : "number", defaultValue : 0 }); + +/** maximal value of the Range object */ +qx.OO.addProperty({ name : "max", type : "number", defaultValue : 100 }); + +/** Step size for increments/decrements of the value property */ +qx.OO.addProperty({ name : "step", type : "number", defaultValue : 1 }); + +qx.Proto._checkValue = function(propValue) { + return Math.max(this.getMin(), Math.min(this.getMax(), Math.floor(propValue))); +} + +qx.Proto._modifyValue = function(propValue, propOldValue, propData) +{ + if (this.hasEventListeners("change")) { + this.dispatchEvent(new qx.event.type.Event("change"), true); + } + + return true; +} + +qx.Proto._checkMax = function(propValue) { + return Math.floor(propValue); +} + +qx.Proto._modifyMax = function(propValue, propOldValue, propData) +{ + this.setValue(Math.min(this.getValue(), propValue)); + + if (this.hasEventListeners("change")) { + this.dispatchEvent(new qx.event.type.Event("change"), true); + } + + return true; +} + +qx.Proto._checkMin = function(propValue) { + return Math.floor(propValue); +} + +qx.Proto._modifyMin = function(propValue, propOldValue, propData) +{ + this.setValue(Math.max(this.getValue(), propValue)); + + if (this.hasEventListeners("change")) { + this.dispatchEvent(new qx.event.type.Event("change"), true); + } + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Selection.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Selection.js new file mode 100644 index 0000000000..e4025bec42 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Selection.js @@ -0,0 +1,180 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + + +************************************************************************ */ + +/** + * Helper for qx.manager.selection.SelectionManager, contains data for selections + * + * @param vManager {Object} a class which implements a getItemHashCode(oItem) method + */ +qx.OO.defineClass("qx.type.Selection", qx.core.Object, +function(vManager) +{ + qx.core.Object.call(this); + + this._manager = vManager; + this.removeAll(); +}); + + + + + +/* +--------------------------------------------------------------------------- + USER METHODS +--------------------------------------------------------------------------- +*/ + +/** + * Add an item to the selection + * + * @param oItem {var} item to add + */ +qx.Proto.add = function(oItem) { + this._storage[this.getItemHashCode(oItem)] = oItem; +}; + + +/** + * Remove an item from the selection + * + * @param oItem {var} item to remove + */ +qx.Proto.remove = function(oItem) { + delete this._storage[this.getItemHashCode(oItem)]; +}; + + +/** + * Remove all items from the selection + */ +qx.Proto.removeAll = function() { + this._storage = {}; +}; + + +/** + * Check whether the selection contains a given item + * + * @param oItem {var} item to check for + * @return {Boolean} whether the selection contains the item + */ +qx.Proto.contains = function(oItem) { + return this.getItemHashCode(oItem) in this._storage; +}; + + +/** + * Convert selection to an array + * + * @return {Array} array representation of the selection + */ +qx.Proto.toArray = function() +{ + var res = []; + + for (var key in this._storage) { + res.push(this._storage[key]); + } + + return res; +}; + + +/** + * Return first element of the Selection + * + * @return {var} first item of the selection + */ +qx.Proto.getFirst = function() +{ + for (var key in this._storage) { + return this._storage[key]; + } +} + + +/** + * Get a string representation of the Selection. The return value can be used to compare selections. + * + * @return {String} string representation of the Selection + */ +qx.Proto.getChangeValue = function() +{ + var sb = []; + + for (var hc in this._storage) { + sb.push(hc); + } + + sb.sort(); + return sb.join(";"); +}; + + +/** + * Compute a hash code for an item using the manager + * + * @param oItem {var} the item + * @return {var} unique hash code for the item + */ +qx.Proto.getItemHashCode = function(oItem) { + return this._manager.getItemHashCode(oItem); +}; + + +/** + * Whether the selection is empty + * + * @return {Boolean} whether the selection is empty + */ +qx.Proto.isEmpty = function() { + return qx.lang.Object.isEmpty(this._storage); +}; + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Destructor + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._storage = null; + this._manager = null; + + qx.core.Object.prototype.dispose.call(this); +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Version.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Version.js new file mode 100755 index 0000000000..01ffc708db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/type/Version.js @@ -0,0 +1,185 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the qooxdoo top-level directory for details + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + ________________________________________________________________________ + + This class contains code based on the following work: + + SWFObject: Javascript Flash Player detection and embed script + http://blog.deconcept.com/swfobject/ + Version: 1.4.4 + + Copyright: + 2006 Geoff Stearns + + License: + MIT: http://www.opensource.org/licenses/mit-license.php + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + Authors: + * Geoff Stearns (geoff@deconcept.com) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Generic handling of version numbers based on a string representation of + * major, minor and revision flags. A incoming version object can be compared + * with the stored version string including checks to determine if this + * version is smaller than or identical to the one stored. + * + * This class contains code based on the following work:<br/> + * SWFObject: Javascript Flash Player detection and embed script<br/> + * http://blog.deconcept.com/swfobject/<br/> + * Version: 1.4.4 + * + * License:<br/> + * MIT: http://www.opensource.org/licenses/mit-license.php<br/> + * For more info, please see the corresponding source file. + * + * @param arrVersion {Array|String} array with three elements defining major, + * minor and revision number or an equivalent version string separated by '.' + */ +qx.OO.defineClass("qx.type.Version", qx.core.Object, +function(arrVersion) +{ + qx.core.Object.call(this); + + if (typeof arrVersion === "string") { + arrVersion = arrVersion.split("."); + } + + this._major = parseInt(arrVersion[0]) || 0; + this._minor = parseInt(arrVersion[1]) || 0; + this._rev = parseInt(arrVersion[2]) || 0; +}); + + + + +/* +--------------------------------------------------------------------------- + DATA FIELDS +--------------------------------------------------------------------------- +*/ + +qx.Proto._major = 0; +qx.Proto._minor = 0; +qx.Proto._rev = 0; + + + + + +/* +--------------------------------------------------------------------------- + USER VERSION ACCESS +--------------------------------------------------------------------------- +*/ + +/** + * Comapres the Version with another version number. + * Returns true if this version instance has a bigger version number + * + * @param fv {qx.type.Version} Version number to compare with + * @return {Boolean} whether the version instance has a bigger version numbers. + */ +qx.Proto.versionIsValid = function(fv) +{ + if (this.getMajor() < fv.getMajor()) return false; + if (this.getMajor() > fv.getMajor()) return true; + + if (this.getMinor() < fv.getMinor()) return false; + if (this.getMinor() > fv.getMinor()) return true; + + if (this.getRev() < fv.getRev()) return false; + + return true; +}; + + +/** + * Return major version number + * + * @return {String|Integer} major version number + */ +qx.Proto.getMajor = function() { + return this._major; +}; + + +/** + * Return minor version number + * + * @return {String|Integer} minor version number + */ +qx.Proto.getMinor = function() { + return this._minor; +}; + + +/** + * Return revision number + * + * @return {String|Integer} revision number + */ +qx.Proto.getRev = function() { + return this._rev; +}; + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** Destructor */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._major = this._minor = this._rev = null; + + qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Atom.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Atom.js new file mode 100644 index 0000000000..e65fff4918 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Atom.js @@ -0,0 +1,401 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#optional(qx.ui.embed.Flash) + +************************************************************************ */ + +/** + * A multi-purpose widget used by many more complex widgets. + * + * The intended purpose of qx.ui.basic.Atom is to easily align the common icon-text combination in different ways. + * This is useful for all types of buttons, menuentries, tooltips, ... + * + * @param vLabel {String} label of the atom + * @param vIcon {String?null} Icon of the atom + * @param vIconWidth {Integer?null} desired width of the icon (the icon will be scaled to this size) + * @param vIconHeight {Integer?null} desired height of the icon (the icon will be scaled to this size) + * @param vFlash {qx.ui.embed.Flash?null} optional flash animation for the Atom. Needs valid width and height values. + */ +qx.OO.defineClass("qx.ui.basic.Atom", qx.ui.layout.BoxLayout, +function(vLabel, vIcon, vIconWidth, vIconHeight, vFlash) +{ + qx.ui.layout.BoxLayout.call(this); + + if (this.getOrientation() == null) { + this.setOrientation("horizontal"); + } + + // Prohibit selection + this.setSelectable(false); + + // Disable flex support + this.getLayoutImpl().setEnableFlexSupport(false); + + // Apply constructor arguments + this.setLabel(vLabel); + + // Simple flash wrapper + if (qx.OO.isAvailable("qx.ui.embed.Flash") && vFlash != null && vIconWidth != null && vIconHeight != null && qx.ui.embed.Flash.getPlayerVersion().getMajor() > 0) + { + this._flashMode = true; + + this.setIcon(vFlash); + + // flash needs explicit dimensions! + this.setIconWidth(vIconWidth); + this.setIconHeight(vIconHeight); + } + else if (vIcon != null) + { + this.setIcon(vIcon); + + if (vIconWidth != null) { + this.setIconWidth(vIconWidth); + } + + if (vIconHeight != null) { + this.setIconHeight(vIconHeight); + } + } +}); + +qx.ui.basic.Atom.SHOW_LABEL = "label"; +qx.ui.basic.Atom.SHOW_ICON = "icon"; +qx.ui.basic.Atom.SHOW_BOTH = "both"; + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The label/caption/text of the qx.ui.basic.Atom instance +*/ +qx.OO.addProperty({ name : "label" }); + +/*! + Any URI String supported by qx.ui.basic.Image to display a icon +*/ +qx.OO.addProperty({ name : "icon", type : "string" }); + +/** + * Any URI String supported by qx.ui.basic.Image to display a disabled icon. + * <p> + * If not set the normal icon is shown transparently. + */ +qx.OO.addProperty({ name : "disabledIcon", type : "string" }); + +/*! + Configure the visibility of the sub elements/widgets. + Possible values: both, text, icon, none +*/ +qx.OO.addProperty({ name : "show", type : "string", defaultValue : "both", possibleValues : [ "both", "label", "icon", "none", null ] }); + +/*! + The position of the icon in relation to the text. + Only useful/needed if text and icon is configured and 'show' is configured as 'both' (default) +*/ +qx.OO.addProperty({ name : "iconPosition", type : "string", defaultValue : "left", possibleValues : [ "top", "right", "bottom", "left" ] }); + +/*! + The width of the icon. + If configured, this makes qx.ui.basic.Atom a little bit faster as it does not need to wait until the image loading is finished. +*/ +qx.OO.addProperty({ name : "iconWidth", type : "number" }); + +/*! + The height of the icon + If configured, this makes qx.ui.basic.Atom a little bit faster as it does not need to wait until the image loading is finished. +*/ +qx.OO.addProperty({ name : "iconHeight", type : "number" }); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "atom" }); + + + + + +/* +--------------------------------------------------------------------------- + SUB WIDGETS +--------------------------------------------------------------------------- +*/ + +qx.Proto._flashMode = false; + +qx.Proto._labelObject = null; +qx.Proto._iconObject = null; + +qx.Proto._createLabel = function() +{ + var l = this._labelObject = new qx.ui.basic.Label(this.getLabel()); + + l.setAnonymous(true); + l.setEnabled(this.getEnabled()); + l.setSelectable(false); + + this.addAt(l, this._iconObject ? 1 : 0); +} + +qx.Proto._createIcon = function() +{ + if (this._flashMode && qx.OO.isAvailable("qx.ui.embed.Flash")) + { + var i = this._iconObject = new qx.ui.embed.Flash(this.getIcon()); + } + else + { + var i = this._iconObject = new qx.ui.basic.Image(); + } + + i.setAnonymous(true); + + this._updateIcon(); + + this.addAt(i, 0); +} + +qx.Proto._updateIcon = function() { + // NOTE: We have to check whether the properties "icon" and "disabledIcon" + // exist, because some child classes remove them. + if (this._iconObject && this.getIcon && this.getDisabledIcon) { + var disabledIcon = this.getDisabledIcon(); + if (disabledIcon) { + if (this.getEnabled()) { + this._iconObject.setSource(this.getIcon()); + } else { + this._iconObject.setSource(disabledIcon); + } + this._iconObject.setEnabled(true); + } else { + this._iconObject.setSource(this.getIcon()); + this._iconObject.setEnabled(this.getEnabled()); + } + } +} + +qx.Proto.getLabelObject = function() { + return this._labelObject; +} + +qx.Proto.getIconObject = function() { + return this._iconObject; +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + this._updateIcon(); + + if (this._labelObject) { + this._labelObject.setEnabled(propValue); + } + + return qx.ui.layout.BoxLayout.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); +} + +qx.Proto._modifyIconPosition = function(propValue, propOldValue, propData) +{ + switch(propValue) + { + case "top": + case "bottom": + this.setOrientation("vertical"); + this.setReverseChildrenOrder(propValue == "bottom"); + break; + + default: + this.setOrientation("horizontal"); + this.setReverseChildrenOrder(propValue == "right"); + break; + } + + return true; +} + +qx.Proto._modifyShow = function(propValue, propOldValue, propData) +{ + this._handleIcon(); + this._handleLabel(); + + return true; +} + +qx.Proto._modifyLabel = function(propValue, propOldValue, propData) +{ + if (this._labelObject) { + this._labelObject.setHtml(propValue); + } + + this._handleLabel(); + + return true; +} + +qx.Proto._modifyIcon = function(propValue, propOldValue, propData) +{ + this._updateIcon(); + this._handleIcon(); + + return true; +} + +qx.Proto._modifyDisabledIcon = function(propValue, propOldValue, propData) +{ + this._updateIcon(); + this._handleIcon(); + + return true; +} + +qx.Proto._modifyIconWidth = function(propValue, propOldValue, propData) +{ + this._iconObject.setWidth(propValue); + return true; +} + +qx.Proto._modifyIconHeight = function(propValue, propOldValue, propData) +{ + this._iconObject.setHeight(propValue); + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._iconIsVisible = false; +qx.Proto._labelIsVisible = false; + +qx.Proto._handleLabel = function() +{ + switch(this.getShow()) + { + case qx.ui.basic.Atom.SHOW_LABEL: + case qx.ui.basic.Atom.SHOW_BOTH: + this._labelIsVisible = qx.util.Validation.isValidString(this.getLabel()) || this.getLabel() instanceof qx.locale.LocalizedString; + break; + + default: + this._labelIsVisible = false; + } + + if (this._labelIsVisible) + { + this._labelObject ? this._labelObject.setDisplay(true) : this._createLabel(); + } + else if (this._labelObject) + { + this._labelObject.setDisplay(false); + } +} + +qx.Proto._handleIcon = function() +{ + switch(this.getShow()) + { + case qx.ui.basic.Atom.SHOW_ICON: + case qx.ui.basic.Atom.SHOW_BOTH: + this._iconIsVisible = qx.util.Validation.isValidString(this.getIcon()); + break; + + default: + this._iconIsVisible = false; + } + + if (this._iconIsVisible) + { + this._iconObject ? this._iconObject.setDisplay(true) : this._createIcon(); + } + else if (this._iconObject) + { + this._iconObject.setDisplay(false); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + CLONE +--------------------------------------------------------------------------- +*/ + +// Omit recursive cloning +qx.Proto._cloneRecursive = qx.lang.Function.returnTrue; + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._iconObject) + { + this._iconObject.dispose(); + this._iconObject = null; + } + + if (this._labelObject) + { + this._labelObject.dispose(); + this._labelObject = null; + } + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/HorizontalSpacer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/HorizontalSpacer.js new file mode 100644 index 0000000000..d1c6adeb06 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/HorizontalSpacer.js @@ -0,0 +1,33 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.basic.HorizontalSpacer", qx.ui.basic.Terminator, +function() +{ + qx.ui.basic.Terminator.call(this); + + this.setWidth("1*"); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Image.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Image.js new file mode 100644 index 0000000000..95f50795b5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Image.js @@ -0,0 +1,615 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/** + * This widget represents an image. + * + * @event error {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.basic.Image", qx.ui.basic.Terminator, +function(vSource, vWidth, vHeight) +{ + qx.ui.basic.Terminator.call(this); + + // Reset Alt and Title + this.setHtmlProperty("alt", ""); + this.setHtmlProperty("title", ""); + + // Apply constructor arguments + this.setSource(vSource || "static/image/blank.gif"); + + // Dimensions + this.setWidth(vWidth !== undefined ? vWidth : "auto"); + this.setHeight(vHeight !== undefined ? vHeight : "auto"); + + // Prohibit selection + this.setSelectable(false); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The source uri of the image. +*/ +qx.OO.addProperty({ name : "source", type : "string" }); + +/*! + The assigned preloader instance of the image. +*/ +qx.OO.addProperty({ name : "preloader", type : "object" }); + +/*! + The loading status. + + True if the image is loaded correctly. False if no image is loaded + or the one that should be loaded is currently loading or not available. +*/ +qx.OO.addProperty({ name : "loaded", type : "boolean", defaultValue : false }); + +/*! + Should the image be maxified in it's own container? +*/ +qx.OO.addProperty({ name : "resizeToInner", type : "boolean", defaultValue : false }); + +/*! + Appearance of the widget +*/ +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "image" }); + + + + + +/* +--------------------------------------------------------------------------- + EVENT MAPPERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onload = function() { + this.setLoaded(true); +} + +qx.Proto._onerror = function() +{ + this.debug("Could not load: " + this.getSource()); + + this.setLoaded(false); + + if (this.hasEventListeners("error")) { + this.dispatchEvent(new qx.event.type.Event("error"), true); + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPLAYBLE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeAppear = function() +{ + var vSource = this.getSource(); + + if (qx.util.Validation.isValidString(vSource)) { + qx.manager.object.ImageManager.getInstance()._sources[vSource]++; + } + + return qx.ui.basic.Terminator.prototype._beforeAppear.call(this); +} + +qx.Proto._beforeDisappear = function() +{ + var vSource = this.getSource(); + + if (qx.util.Validation.isValidString(vSource)) + { + if (qx.manager.object.ImageManager.getInstance()._sources[vSource] <= 1) + { + delete qx.manager.object.ImageManager.getInstance()._sources[vSource]; + } + else + { + qx.manager.object.ImageManager.getInstance()._sources[vSource]--; + } + } + + return qx.ui.basic.Terminator.prototype._beforeDisappear.call(this); +} + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifySource = function(propValue, propOldValue, propData) +{ + if (propValue && typeof qx.manager.object.ImageManager.getInstance()._sources[propValue] === "undefined") { + qx.manager.object.ImageManager.getInstance()._sources[propValue] = 0; + } + + if (propOldValue) + { + if (qx.manager.object.ImageManager.getInstance()._sources[propOldValue] <= 1) + { + delete qx.manager.object.ImageManager.getInstance()._sources[propOldValue]; + } + else + { + qx.manager.object.ImageManager.getInstance()._sources[propOldValue]--; + } + } + + if (this.isCreated()) + { + if (propValue) + { + this.setPreloader(qx.manager.object.ImagePreloaderManager.getInstance().create(qx.manager.object.AliasManager.getInstance().resolvePath(propValue))); + } + else if (propOldValue) + { + this._resetContent(); + this.setPreloader(null); + } + } + + return true; +} + +qx.Proto._modifyPreloader = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + // remove event connection + propOldValue.removeEventListener("load", this._onload, this); + propOldValue.removeEventListener("error", this._onerror, this); + } + + if (propValue) + { + // Register to image manager + qx.manager.object.ImageManager.getInstance().add(this); + + // Omit here, otherwise the later setLoaded(true) + // will not be executed (prevent recursion) + + // Changed: Use forceLoaded instead of setLoaded => should be faster + this.forceLoaded(false); + + if (propValue.isErroneous()) + { + this._onerror(); + } + else if (propValue.isLoaded()) + { + this.setLoaded(true); + } + else + { + propValue.addEventListener("load", this._onload, this); + propValue.addEventListener("error", this._onerror, this); + } + } + else + { + // Remove from image manager + qx.manager.object.ImageManager.getInstance().remove(this); + + this.setLoaded(false); + } + + return true; +} + +qx.Proto._modifyLoaded = function(propValue, propOldValue, propData) +{ + if (propValue && this.isCreated()) + { + this._applyContent(); + } + else if (!propValue) + { + this._invalidatePreferredInnerWidth(); + this._invalidatePreferredInnerHeight(); + } + + return true; +} + +qx.Proto._modifyElement = function(propValue, propOldValue, propData) +{ + if (propValue) + { + if (!this._image) + { + try + { + // Create Image-Node + // Webkit has problems with "new Image". Maybe related to "new Function" with + // is also not working correctly. + if (qx.core.Client.getInstance().isWebkit()) + { + this._image = document.createElement("img"); + } + else + { + this._image = new Image; + } + + // Possible alternative for MSHTML for PNG images + // But it seems not to be faster + // this._image = document.createElement("div"); + + // this costs much performance, move setup to blank gif to error handling + // is this SSL save? + // this._image.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + + this._image.style.border = "0 none"; + this._image.style.verticalAlign = "top"; + } + catch(ex) + { + this.error("Failed while creating image #1", ex); + } + + if (!qx.core.Client.getInstance().isMshtml()) { + this._applyEnabled(); + } + } + + propValue.appendChild(this._image); + } + + // call widget implmentation + qx.ui.basic.Terminator.prototype._modifyElement.call(this, propValue, propOldValue, propData); + + if (propValue) + { + try + { + // initialisize preloader + var vSource = this.getSource(); + if (qx.util.Validation.isValidString(vSource)) + { + //this.debug("Post-Create: " + vSource); + this.setPreloader(qx.manager.object.ImagePreloaderManager.getInstance().create(qx.manager.object.AliasManager.getInstance().resolvePath(vSource))); + } + } + catch(ex) + { + this.error("Failed while creating image #2", ex); + } + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + CLIENT OPTIMIZED MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._postApply = function() +{ + if (!this.getLoaded()) { + this._updateContent(qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif")); + return; + } + + this._postApplyDimensions(); + this._updateContent(); +} + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) + { + if (this._image) { + this._applyEnabled(); + } + + return qx.ui.basic.Terminator.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); + } + + qx.Proto._updateContent = function(vSource) + { + var i = this._image; + var pl = this.getPreloader(); + + if (pl.getIsPng() && this.getEnabled()) + { + i.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + i.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + (vSource || pl.getSource()) + "',sizingMethod='scale')"; + } + else + { + i.src = vSource || pl.getSource(); + i.style.filter = this.getEnabled() ? "" : "Gray() Alpha(Opacity=30)"; + } + } + + qx.Proto._resetContent = function() + { + var i = this._image; + + i.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + i.style.filter = ""; + } + + qx.Proto._applyEnabled = qx.Proto._postApply; +} +else +{ + qx.Proto._updateContent = function(vSource) { + this._image.src = vSource || this.getPreloader().getSource(); + } + + qx.Proto._resetContent = function() { + this._image.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + } + + qx.Proto._applyEnabled = function() + { + if (this._image) + { + var o = this.getEnabled() ? "" : 0.3; + var s = this._image.style; + + s.opacity = s.KhtmlOpacity = s.MozOpacity = o; + } + } + + qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) + { + if (this._image) { + this._applyEnabled(); + } + + return qx.ui.basic.Terminator.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS: INNER +--------------------------------------------------------------------------- +*/ + +qx.Proto._computePreferredInnerWidth = function() +{ + if (this.getLoaded()) + { + return this.getPreloader().getWidth(); + } + else if (qx.util.Validation.isValidString(this.getSource())) + { + var vPreloader = qx.manager.object.ImagePreloaderManager.getInstance().get(qx.manager.object.AliasManager.getInstance().resolvePath(this.getSource())); + + if (vPreloader && vPreloader.isLoaded()) { + return vPreloader.getWidth(); + } + } + + return 0; +} + +qx.Proto._computePreferredInnerHeight = function() +{ + if (this.getLoaded()) + { + return this.getPreloader().getHeight(); + } + else if (qx.util.Validation.isValidString(this.getSource())) + { + var vPreloader = qx.manager.object.ImagePreloaderManager.getInstance().get(qx.manager.object.AliasManager.getInstance().resolvePath(this.getSource())); + + if (vPreloader && vPreloader.isLoaded()) { + return vPreloader.getHeight(); + } + } + + return 0; +} + + + + + + + +/* +--------------------------------------------------------------------------- + APPLY +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyContent = function() +{ + qx.ui.basic.Terminator.prototype._applyContent.call(this); + + // Images load asyncron, so we need to force flushing here + // to get an up-to-date view when an image is loaded. + qx.ui.core.Widget.flushGlobalQueues(); +} + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._postApplyDimensions = function() + { + try + { + var vImageStyle = this._image.style; + + if (this.getResizeToInner()) + { + vImageStyle.pixelWidth = this.getInnerWidth(); + vImageStyle.pixelHeight = this.getInnerHeight(); + } + else + { + vImageStyle.pixelWidth = this.getPreferredInnerWidth(); + vImageStyle.pixelHeight = this.getPreferredInnerHeight(); + } + } + catch(ex) + { + this.error("postApplyDimensions failed", ex); + } + } +} +else +{ + qx.Proto._postApplyDimensions = function() + { + try + { + var vImageNode = this._image; + + if (this.getResizeToInner()) + { + vImageNode.width = this.getInnerWidth(); + vImageNode.height = this.getInnerHeight(); + } + else + { + vImageNode.width = this.getPreferredInnerWidth(); + vImageNode.height = this.getPreferredInnerHeight(); + } + } + catch(ex) + { + this.error("postApplyDimensions failed", ex); + } + } +} + + + + +/* +--------------------------------------------------------------------------- + CHANGES IN DIMENSIONS +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._changeInnerWidth = function(vNew, vOld) + { + if (this.getResizeToInner()) { + this._image.style.pixelWidth = vNew; + } + } + + qx.Proto._changeInnerHeight = function(vNew, vOld) + { + if (this.getResizeToInner()) { + this._image.style.pixelHeight = vNew; + } + } +} +else +{ + qx.Proto._changeInnerWidth = function(vNew, vOld) + { + if (this.getResizeToInner()) { + this._image.width = vNew; + } + } + + qx.Proto._changeInnerHeight = function(vNew, vOld) + { + if (this.getResizeToInner()) { + this._image.height = vNew; + } + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + var vPreloader = this.getPreloader(); + if (vPreloader) + { + // remove event connection + vPreloader.removeEventListener("load", this._onload, this); + vPreloader.removeEventListener("error", this._onerror, this); + + this.forcePreloader(null); + } + + if (this._image) + { + // Remove leaking filter attribute before leaving page + this._image.style.filter = ""; + this._image = null; + } + + qx.manager.object.ImageManager.getInstance().remove(this); + + return qx.ui.basic.Terminator.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Inline.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Inline.js new file mode 100644 index 0000000000..593495c670 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Inline.js @@ -0,0 +1,39 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.basic.Inline", qx.ui.layout.CanvasLayout, +function(vId) +{ + qx.ui.layout.CanvasLayout.call(this); + + this.setStyleProperty("position", "relative"); + + if (vId != null) { + this.setInlineNodeId(vId); + } +}); + +qx.OO.addProperty({ name : "inlineNodeId", type : "string" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Label.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Label.js new file mode 100644 index 0000000000..63690a703c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Label.js @@ -0,0 +1,502 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#require(qx.renderer.font.FontCache) +#after(qx.renderer.font.FontObject) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.basic.Label", qx.ui.basic.Terminator, +function(vHtml, vMnemonic) +{ + qx.ui.basic.Terminator.call(this); + + // Apply constructor arguments + if (vHtml != null) { + this.setHtml(vHtml); + } + + if (vMnemonic != null) { + this.setMnemonic(vMnemonic); + } + + // Prohibit stretching through layout handler + this.setAllowStretchX(false); + this.setAllowStretchY(false); + + // Auto Sized + this.auto(); +}); + +qx.Class._measureNodes = {}; + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "label" }); + +/*! + Any text string which can contain HTML, too +*/ +qx.OO.addProperty({ name : "html" }); + +/*! + The alignment of the text. +*/ +qx.OO.addProperty({ name : "textAlign", type : "string", defaultValue : "left", possibleValues : [ "left", "center", "right", "justify" ] }); + +/*! + The styles which should be copied +*/ +qx.OO.addProperty({ name : "fontPropertiesProfile", type : "string", defaultValue : "default", possibleValues : [ "none", "default", "extended", "multiline", "extendedmultiline", "all" ] }); + +/*! + A single character which will be underlined inside the text. +*/ +qx.OO.addProperty({ name : "mnemonic", type : "string" }); + +/*! + The font property describes how to paint the font on the widget. +*/ +qx.OO.addProperty({ name : "font", type : "object", instance : "qx.renderer.font.Font", convert : qx.renderer.font.FontCache, allowMultipleArguments : true }); + +/*! + Wrap the text? +*/ +qx.OO.addProperty({ name : "wrap", type : "boolean", defaultValue : true }); + + + + + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + DATA +--------------------------------------------------------------------------- +*/ + +qx.ui.basic.Label.SYMBOL_ELLIPSIS = String.fromCharCode(8230); +qx.ui.basic.Label.SUPPORT_NATIVE_ELLIPSIS = qx.core.Client.getInstance().isMshtml(); + +// these are the properties what will be copied to the measuring frame. +qx.ui.basic.Label._fontProperties = +{ + "none" : [], + + "default" : ["fontFamily", "fontSize", "fontStyle", "fontWeight", "textDecoration"], + "extended" : ["fontFamily", "fontSize", "fontStyle", "fontWeight", "letterSpacing", "textDecoration", "textTransform", "whiteSpace", "wordSpacing"], + + "multiline" : ["fontFamily", "fontSize", "fontStyle", "fontWeight", "textDecoration", "lineHeight", "wordWrap"], + "extendedmultiline" : ["fontFamily", "fontSize", "fontStyle", "fontWeight", "letterSpacing", "textDecoration", "textTransform", "whiteSpace", "wordSpacing", "lineHeight", "wordBreak", "wordWrap", "quotes"], + + "all" : ["fontFamily", "fontSize", "fontStyle", "fontVariant", "fontWeight", "letterSpacing", "lineBreak", "lineHeight", "quotes", "textDecoration", "textIndent", "textShadow", "textTransform", "textUnderlinePosition", "whiteSpace", "wordBreak", "wordSpacing", "wordWrap"] +} + + +qx.ui.basic.Label.createMeasureNode = function(vId) +{ + var vNode = qx.ui.basic.Label._measureNodes[vId]; + + if (!vNode) + { + vNode = document.createElement("div"); + var vStyle = vNode.style; + + vStyle.width = vStyle.height = "auto"; + vStyle.visibility = "hidden"; + vStyle.position = "absolute"; + vStyle.zIndex = "-1"; + + document.body.appendChild(vNode); + + qx.ui.basic.Label._measureNodes[vId] = vNode; + } + + return vNode; +} + + + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._localized = false; +qx.Proto._htmlContent = ""; +qx.Proto._htmlMode = false; +qx.Proto._hasMnemonic = false; +qx.Proto._mnemonicHtml = ""; +qx.Proto._mnemonicTest = null; + +qx.Proto._modifyHtml = function(propValue, propOldValue, propData) +{ + this._localized = this.getHtml() instanceof qx.locale.LocalizedString; + this._updateHtml(); + return true; +} + +qx.Proto._updateHtml = function() +{ + if (this._localized) + { + this._htmlContent = this.getHtml().toString(); + qx.locale.Manager.getInstance().addEventListener("changeLocale", this._updateHtml, this); + } + else + { + this._htmlContent = this.getHtml() || ""; + qx.locale.Manager.getInstance().removeEventListener("changeLocale", this._updateHtml, this); + } + + this._htmlMode = qx.util.Validation.isValidString(this._htmlContent) && this._htmlContent.match(/<.*>/) ? true : false; + + if (this._isCreated) { + this._applyContent(); + } +}; + + +qx.Proto._modifyTextAlign = function(propValue, propOldValue, propData) +{ + this.setStyleProperty("textAlign", propValue); + return true; +} + +qx.Proto._modifyMnemonic = function(propValue, propOldValue, propData) +{ + this._hasMnemonic = qx.util.Validation.isValidString(propValue) && propValue.length == 1; + + this._mnemonicHtml = this._hasMnemonic ? "(<span style=\"text-decoration:underline\">" + propValue + "</span>)" : ""; + this._mnemonicTest = this._hasMnemonic ? new RegExp("^(((<([^>]|" + propValue + ")+>)|(&([^;]|" + propValue + ")+;)|[^&" + propValue + "])*)(" + propValue + ")", "i") : null; + + return true; +} + +qx.Proto._modifyFont = function(propValue, propOldValue, propData) +{ + this._invalidatePreferredInnerDimensions(); + + if (propValue) { + propValue._applyWidget(this); + } else if (propOldValue) { + propOldValue._resetWidget(this); + } + + return true; +} + +qx.Proto._modifyWrap = function(propValue, propOldValue, propData) +{ + this.setStyleProperty("whiteSpace", propValue ? "normal" : "nowrap"); + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + HELPER FOR PREFERRED DIMENSION +--------------------------------------------------------------------------- +*/ + +qx.Proto._computeObjectNeededDimensions = function() +{ + // copy styles + var vNode = this._copyStyles(); + + // prepare html + var vHtml = this._htmlContent; + + // test for mnemonic and fix content + if (this._hasMnemonic && !this._mnemonicTest.test(vHtml)) { + vHtml += this._mnemonicHtml; + } + + // apply html + vNode.innerHTML = vHtml; + + // store values + this._cachedPreferredInnerWidth = vNode.scrollWidth; + this._cachedPreferredInnerHeight = vNode.scrollHeight; +} + +qx.Proto._copyStyles = function() +{ + var vProps = this.getFontPropertiesProfile(); + var vNode = qx.ui.basic.Label.createMeasureNode(vProps); + var vUseProperties=qx.ui.basic.Label._fontProperties[vProps]; + var vUsePropertiesLength=vUseProperties.length-1; + var vProperty=vUseProperties[vUsePropertiesLength--]; + + var vStyle = vNode.style; + var vTemp; + + if (!vProperty) { + return vNode; + } + + do { + vStyle[vProperty] = qx.util.Validation.isValid(vTemp = this.getStyleProperty([vProperty])) ? vTemp : ""; + } while(vProperty=vUseProperties[vUsePropertiesLength--]); + + return vNode; +} + + + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computePreferredInnerWidth = function() +{ + this._computeObjectNeededDimensions(); + return this._cachedPreferredInnerWidth; +} + +qx.Proto._computePreferredInnerHeight = function() +{ + this._computeObjectNeededDimensions(); + return this._cachedPreferredInnerHeight; +} + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT APPLY +--------------------------------------------------------------------------- +*/ + +qx.Proto._postApply = function() +{ + var vHtml = this._htmlContent; + var vElement = this._getTargetNode(); + var vMnemonicMode = 0; + + if (qx.util.Validation.isInvalidString(vHtml)) { + vElement.innerHTML = ""; + return; + } + + if (this._hasMnemonic) { + vMnemonicMode = this._mnemonicTest.test(vHtml) ? 1 : 2; + } + + // works only with text, don't use when wrap is enabled + if (!this._htmlMode && !this.getWrap()) + { + switch(this._computedWidthType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + case qx.ui.core.Widget.TYPE_PERCENT: + + //carstenl: enabled truncation code for flex sizing, too. Appears to work except for the + // truncation code (gecko version), which I have disabled (see below). + case qx.ui.core.Widget.TYPE_FLEX: + var vNeeded = this.getPreferredInnerWidth(); + var vInner = this.getInnerWidth(); + + if (vInner < vNeeded) + { + vElement.style.overflow = "hidden"; + + if (qx.ui.basic.Label.SUPPORT_NATIVE_ELLIPSIS) + { + vElement.style.textOverflow = "ellipsis"; + vHtml += this._mnemonicHtml; + } + else + { + var vMeasureNode = this._copyStyles(); + + var vSplitString = vHtml.split(" "); + var vSplitLength = vSplitString.length; + + var vWordIterator = 0; + var vCharaterIterator = 0; + + var vPost = qx.ui.basic.Label.SYMBOL_ELLIPSIS; + + var vUseInnerText = true; + if (vMnemonicMode == 2) + { + var vPost = this._mnemonicHtml + vPost; + vUseInnerText = false; + } + + // Measure Words (if more than one) + if (vSplitLength > 1) + { + var vSplitTemp = []; + + for (vWordIterator=0; vWordIterator<vSplitLength; vWordIterator++) + { + vSplitTemp.push(vSplitString[vWordIterator]); + + var vLabelText = vSplitTemp.join(" ") + vPost; + if (vUseInnerText) { + qx.dom.Element.setTextContent(vMeasureNode, vLabelText); + } else { + vMeasureNode.innerHTML = vLabelText; + } + + if ((vMeasureNode.scrollWidth > vInner) + /* carstenl: The following code (truncate the text to fit in the available + * space, append ellipsis to indicate truncation) did not reliably + * work in my tests. Problem was that sometimes the measurer returned + * insanely high values for short texts, like "I..." requiring 738 px. + * + * I don't have time to examine this code in detail. Since all of my + * tests used flex width and the truncation code never was intended + * for this, I am disabling truncation if flex is active. + */ + && (this._computedWidthType != qx.ui.core.Widget.TYPE_FLEX)){ + break; + } + } + + // Remove last word which does not fit + vSplitTemp.pop(); + + // Building new temportary array + vSplitTemp = [ vSplitTemp.join(" ") ]; + + // Extracting remaining string + vCharaterString = vHtml.replace(vSplitTemp[0], ""); + } + else + { + var vSplitTemp = []; + vCharaterString = vHtml; + } + + var vCharaterLength = vCharaterString.length; + + // Measure Chars + for (var vCharaterIterator=0; vCharaterIterator<vCharaterLength; vCharaterIterator++) + { + vSplitTemp.push(vCharaterString.charAt(vCharaterIterator)); + + var vLabelText = vSplitTemp.join("") + vPost; + if (vUseInnerText) { + qx.dom.Element.setTextContent(vMeasureNode, vLabelText); + } else { + vMeasureNode.innerHTML = vLabelText; + } + + if (vMeasureNode.scrollWidth > vInner) { + break; + } + } + + // Remove last char which does not fit + vSplitTemp.pop(); + + // Add mnemonic and ellipsis symbol + vSplitTemp.push(vPost); + + // Building Final HTML String + vHtml = vSplitTemp.join(""); + } + + break; + } + else + { + vHtml += this._mnemonicHtml; + } + + // no break here + + default: + vElement.style.overflow = ""; + + if (qx.ui.basic.Label.SUPPORT_NATIVE_ELLIPSIS) { + vElement.style.textOverflow = ""; + } + } + } + + if (vMnemonicMode == 1) + { + // re-test: needed to make ellipsis handling correct + this._mnemonicTest.test(vHtml); + vHtml = RegExp.$1 + "<span style=\"text-decoration:underline\">" + RegExp.$7 + "</span>" + RegExp.rightContext; + } + + return this._postApplyHtml(vElement, vHtml, vMnemonicMode); +} + + +qx.Proto._postApplyHtml = function(vElement, vHtml, vMnemonicMode) +{ + if (this._htmlMode || vMnemonicMode > 0) + { + vElement.innerHTML = vHtml; + } + else + { + try { + qx.dom.Element.setTextContent(vElement, vHtml); + } catch(ex) { + vElement.innerHTML = vHtml; + } + } +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Terminator.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Terminator.js new file mode 100644 index 0000000000..5d06ba4d70 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/Terminator.js @@ -0,0 +1,189 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/*! + This widget is the last widget of the current child chain. +*/ +qx.OO.defineClass("qx.ui.basic.Terminator", qx.ui.core.Widget, +function() { + qx.ui.core.Widget.call(this); +}); + + + + + + +/* +--------------------------------------------------------------------------- + APPLY PADDING +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyPaddingX = function(vParent, vChanges, vStyle) +{ + if (vChanges.paddingLeft) { + this._applyRuntimePaddingLeft(this.getPaddingLeft()); + } + + if (vChanges.paddingRight) { + this._applyRuntimePaddingRight(this.getPaddingRight()); + } +} + +qx.Proto._applyPaddingY = function(vParent, vChanges, vStyle) +{ + if (vChanges.paddingTop) { + this._applyRuntimePaddingTop(this.getPaddingTop()); + } + + if (vChanges.paddingBottom) { + this._applyRuntimePaddingBottom(this.getPaddingBottom()); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + APPLY CONTENT +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyContent = function() +{ + // Small optimization: Only add innerPreferred jobs + // if we don't have a static width + if (this._computedWidthTypePixel) { + this._cachedPreferredInnerWidth = null; + } else { + this._invalidatePreferredInnerWidth(); + } + + // Small optimization: Only add innerPreferred jobs + // if we don't have a static height + if (this._computedHeightTypePixel) { + this._cachedPreferredInnerHeight = null; + } else { + this._invalidatePreferredInnerHeight(); + } + + // add load job + if (this._initialLayoutDone) { + this.addToJobQueue("load"); + } +} + +qx.Proto._layoutPost = function(vChanges) { + if (vChanges.initial || vChanges.load || vChanges.width || vChanges.height) { + this._postApply(); + } +} + +qx.Proto._postApply = qx.lang.Function.returnTrue; + + + + + + + +/* +--------------------------------------------------------------------------- + BOX DIMENSION HELPERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computeBoxWidthFallback = qx.Proto.getPreferredBoxWidth; +qx.Proto._computeBoxHeightFallback = qx.Proto.getPreferredBoxHeight; + +qx.Proto._computePreferredInnerWidth = qx.lang.Function.returnZero; +qx.Proto._computePreferredInnerHeight = qx.lang.Function.returnZero; + + + + + + + +/* +--------------------------------------------------------------------------- + METHODS TO GIVE THE LAYOUTERS INFORMATIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._isWidthEssential = function() +{ + if (!this._computedLeftTypeNull && !this._computedRightTypeNull) { + return true; + } + + if (!this._computedWidthTypeNull && !this._computedWidthTypeAuto) { + return true; + } + + if (!this._computedMinWidthTypeNull && !this._computedMinWidthTypeAuto) { + return true; + } + + if (!this._computedMaxWidthTypeNull && !this._computedMaxWidthTypeAuto) { + return true; + } + + if (this._borderElement) { + return true; + } + + return false; +} + +qx.Proto._isHeightEssential = function() +{ + if (!this._computedTopTypeNull && !this._computedBottomTypeNull) { + return true; + } + + if (!this._computedHeightTypeNull && !this._computedHeightTypeAuto) { + return true; + } + + if (!this._computedMinHeightTypeNull && !this._computedMinHeightTypeAuto) { + return true; + } + + if (!this._computedMaxHeightTypeNull && !this._computedMaxHeightTypeAuto) { + return true; + } + + if (this._borderElement) { + return true; + } + + return false; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/VerticalSpacer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/VerticalSpacer.js new file mode 100644 index 0000000000..32f31f2a9e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/basic/VerticalSpacer.js @@ -0,0 +1,33 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.basic.VerticalSpacer", qx.ui.basic.Terminator, +function() +{ + qx.ui.basic.Terminator.call(this); + + this.setHeight("1*"); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js new file mode 100644 index 0000000000..b46e1a5d1f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js @@ -0,0 +1,395 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + + +************************************************************************ */ + +/*! + A color popup +*/ +qx.OO.defineClass("qx.ui.component.ColorPopup", qx.ui.popup.Popup, +function(tables) +{ + qx.ui.popup.Popup.call(this); + + this.setPadding(4); + this.auto(); + this.setBorder(qx.renderer.border.BorderPresets.getInstance().outset); + this.setBackgroundColor("threedface"); + + this._tables = tables; + + this._createLayout(); + this._createAutoBtn(); + this._createBoxes(); + this._createPreview(); + this._createSelectorBtn(); + + this.addEventListener("beforeAppear", this._onBeforeAppear); +}); + +qx.OO.addProperty({ name : "value", type : "object", instance : "qx.renderer.color.Color" }); + +qx.OO.addProperty({ name : "red", type : "number", defaultValue : 0 }); +qx.OO.addProperty({ name : "green", type : "number", defaultValue : 0 }); +qx.OO.addProperty({ name : "blue", type : "number", defaultValue : 0 }); + +qx.Proto._minZIndex = 1e5; + + + + + +/* +--------------------------------------------------------------------------- + CREATOR SUBS +--------------------------------------------------------------------------- +*/ + +qx.Proto._createLayout = function() +{ + this._layout = new qx.ui.layout.VerticalBoxLayout; + this._layout.setLocation(0, 0); + this._layout.auto(); + this._layout.setSpacing(2); + + this.add(this._layout); +} + +qx.Proto._createAutoBtn = function() +{ + this._automaticBtn = new qx.ui.form.Button(this.tr("Automatic")); + this._automaticBtn.setWidth(null); + this._automaticBtn.setAllowStretchX(true); + this._automaticBtn.addEventListener("execute", this._onAutomaticBtnExecute, this); + + this._layout.add(this._automaticBtn); +} + +qx.Proto._recentTableId = "recent"; +qx.Proto._fieldWidth = 14; +qx.Proto._fieldHeight = 14; +qx.Proto._fieldNumber = 12; + +qx.Proto._createBoxes = function() +{ + this._boxes = {}; + + var tables = this._tables; + var table, box, boxLayout, field; + + for (var tableId in tables) + { + table = tables[tableId]; + + box = new qx.ui.groupbox.GroupBox(table.label); + box.setHeight("auto"); + + this._boxes[tableId] = box; + this._layout.add(box); + + boxLayout = new qx.ui.layout.HorizontalBoxLayout; + boxLayout.setLocation(0, 0); + boxLayout.setSpacing(1); + boxLayout.auto(); + box.add(boxLayout); + + for (var i=0; i<this._fieldNumber; i++) + { + field = new qx.ui.basic.Terminator; + + field.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + field.setBackgroundColor(table.values[i] || null); + field.setDimension(this._fieldWidth, this._fieldHeight); + + field.addEventListener("mousedown", this._onFieldMouseDown, this); + field.addEventListener("mouseover", this._onFieldMouseOver, this); + + boxLayout.add(field); + } + } +} + +qx.Proto._createPreview = function() +{ + this._previewBox = new qx.ui.groupbox.GroupBox(this.tr("Preview (Old/New)")); + this._previewLayout = new qx.ui.layout.HorizontalBoxLayout; + this._selectedPreview = new qx.ui.basic.Terminator; + this._currentPreview = new qx.ui.basic.Terminator; + + this._previewLayout.setHeight("auto"); + this._previewLayout.setWidth("100%"); + this._previewLayout.setSpacing(4); + this._previewLayout.add(this._selectedPreview, this._currentPreview); + + this._previewBox.setHeight("auto"); + this._previewBox.add(this._previewLayout); + + this._layout.add(this._previewBox); + + this._selectedPreview.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + this._selectedPreview.setWidth("1*"); + this._selectedPreview.setHeight(24); + + this._currentPreview.setBorder(qx.renderer.border.BorderPresets.getInstance().inset); + this._currentPreview.setWidth("1*"); + this._currentPreview.setHeight(24); +} + +qx.Proto._createSelectorBtn = function() +{ + this._selectorButton = new qx.ui.form.Button(this.tr("Open ColorSelector")); + this._selectorButton.setWidth(null); + this._selectorButton.setAllowStretchX(true); + this._selectorButton.addEventListener("execute", this._onSelectorButtonExecute, this); + + this._layout.add(this._selectorButton); +} + +qx.Proto._createColorSelector = function() +{ + if (this._colorSelector) { + return; + } + + this._colorSelectorWindow = new qx.ui.window.Window(this.tr("Color Selector")); + this._colorSelectorWindow.setMinWidth(null); + this._colorSelectorWindow.setMinHeight(null); + this._colorSelectorWindow.setResizeable(false); + this._colorSelectorWindow.auto(); + + this._colorSelector = new qx.ui.component.ColorSelector; + this._colorSelector.setBorder(null); + this._colorSelector.setLocation(0, 0); + this._colorSelector.addEventListener("dialogok", this._onColorSelectorOk, this); + this._colorSelector.addEventListener("dialogcancel", this._onColorSelectorCancel, this); + + this._colorSelectorWindow.add(this._colorSelector); + this._colorSelectorWindow.addToDocument(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyValue = function(propValue, propOldValue, propData) +{ + if (propValue === null) + { + this.setRed(null); + this.setGreen(null); + this.setBlue(null); + } + else + { + this.setRed(propValue.getRed()); + this.setGreen(propValue.getGreen()); + this.setBlue(propValue.getBlue()); + }; + + this._selectedPreview.setBackgroundColor(propValue); + this._rotatePreviousColors(); + + return true; +} + +qx.Proto._rotatePreviousColors = function() +{ + var vRecentTable = this._tables[this._recentTableId].values; + var vRecentBox = this._boxes[this._recentTableId]; + + if (!vRecentTable) { + return; + } + + var newValue = this.getValue(); + + if (!newValue) { + return; + } + + // use style compatible value (like the incoming value from the user or as RGB value string) + newValue = newValue.getStyle(); + + // Modifying incoming table + var vIndex = vRecentTable.indexOf(newValue); + + if (vIndex != -1) { + qx.lang.Array.removeAt(vRecentTable, vIndex); + } else if (vRecentTable.length == this._fieldNumber) { + vRecentTable.shift(); + } + + vRecentTable.push(newValue); + + // Sync to visible fields + var vFields = vRecentBox.getFrameObject().getFirstChild().getChildren(); + for (var i=0; i<vFields.length; i++) { + vFields[i].setBackgroundColor(vRecentTable[i] || null); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onFieldMouseDown = function(e) +{ + var vValue = this._currentPreview.getBackgroundColor(); + this.setValue(vValue); + + if (vValue) { + this.hide(); + } +} + +qx.Proto._onFieldMouseOver = function(e) { + this._currentPreview.setBackgroundColor(e.getTarget().getBackgroundColor()); +} + +qx.Proto._onAutomaticBtnExecute = function(e) { + this.setValue(null); + this.hide(); +} + +qx.Proto._onSelectorButtonExecute = function(e) +{ + this._createColorSelector(); + + this._colorSelectorWindow.setTop(qx.html.Location.getPageBoxTop(this._selectorButton.getElement()) + 10); + this._colorSelectorWindow.setLeft(qx.html.Location.getPageBoxLeft(this._selectorButton.getElement()) + 100); + + this.hide(); + + this._colorSelectorWindow.open(); +} + +qx.Proto._onColorSelectorOk = function(e) +{ + var sel = this._colorSelector; + this.setValue(qx.renderer.color.ColorCache([sel.getRed(), sel.getGreen(), sel.getBlue()])); + this._colorSelectorWindow.close(); +} + +qx.Proto._onColorSelectorCancel = function(e) { + this._colorSelectorWindow.close(); +} + +qx.Proto._onBeforeAppear = function(e) { + this._currentPreview.setBackgroundColor(null); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._tables = null; + this._boxes = null; + + if (this._layout) + { + this._layout.dispose(); + this._layout = null; + } + + if (this._automaticBtn) + { + this._automaticBtn.dispose(); + this._automaticBtn = null; + } + + if (this._previewBox) + { + this._previewBox.dispose(); + this._previewBox = null; + } + + if (this._previewLayout) + { + this._previewLayout.dispose(); + this._previewLayout = null; + } + + if (this._selectedPreview) + { + this._selectedPreview.dispose(); + this._selectedPreview = null; + } + + if (this._currentPreview) + { + this._currentPreview.dispose(); + this._currentPreview = null; + } + + if (this._selectorButton) + { + this._selectorButton.dispose(); + this._selectorButton = null; + } + + if (this._colorSelectorWindow) + { + this._colorSelectorWindow.dispose(); + this._colorSelectorWindow = null; + } + + if (this._colorSelector) + { + this._colorSelector.dispose(); + this._colorSelector = null; + } + + return qx.ui.popup.Popup.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js new file mode 100644 index 0000000000..caf1dca73b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js @@ -0,0 +1,1318 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.widgettheme/colorselector/*) +#embed(qx.icontheme/16/actions/dialog-cancel.png) +#embed(qx.icontheme/16/actions/dialog-ok.png) +#embed(qx.static/image/dotted_white.gif) + +************************************************************************ */ + +/** + * A typical color selector as known from native applications. + * + * Includes support for RGB and HSB color areas. + * + * @event dialogok {qx.event.type.Event} + * @event dialogcancel {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.component.ColorSelector", qx.ui.layout.VerticalBoxLayout, +function(vPreviousRed, vPreviousGreen, vPreviousBlue) +{ + qx.ui.layout.VerticalBoxLayout.call(this); + + // ******************************************** + // CREATE CHILDREN + // ******************************************** + + // 1. Base Structure (Vertical Split) + this._createControlBar(); + this._createButtonBar(); + + // 2. Panes (Horizontal Split) + this._createControlPane(); + this._createHueSaturationPane(); + this._createBrightnessPane(); + + // 3. Control Pane Content + this._createPresetFieldSet(); + this._createInputFieldSet(); + this._createPreviewFieldSet(); + + // 4. Input FieldSet Content + this._createHexField(); + this._createRgbSpinner(); + this._createHsbSpinner(); + + // 5. Preview FieldSet Content + this._createPreviewContent(); + + + // ******************************************** + // INIT COLORS + // ******************************************** + + if (arguments.length == 3) { + this.setPreviousColor(vPreviousRed, vPreviousGreen, vPreviousBlue); + } +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "colorselector" }); + +qx.OO.addProperty({ name : "red", type : "number", defaultValue : 255 }); +qx.OO.addProperty({ name : "green", type : "number", defaultValue : 255 }); +qx.OO.addProperty({ name : "blue", type : "number", defaultValue : 255 }); + +qx.OO.addProperty({ name : "hue", type : "number", defaultValue : 0 }); +qx.OO.addProperty({ name : "saturation", type : "number", defaultValue : 0 }); +qx.OO.addProperty({ name : "brightness", type : "number", defaultValue : 100 }); + +/* +--------------------------------------------------------------------------- + LOCALIZATION SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("labelOK", "OK"); +qx.Settings.setDefault("labelCancel", "Cancel"); +qx.Settings.setDefault("labelPresets", "Presets"); +qx.Settings.setDefault("labelDetails", "Details"); +qx.Settings.setDefault("labelPreview", "Preview (Old/New)"); +qx.Settings.setDefault("labelRGB", "RGB"); +qx.Settings.setDefault("labelHSB", "HSB"); +qx.Settings.setDefault("labelHex", "Hex"); + + + + +/* +--------------------------------------------------------------------------- + CONTEXT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._updateContext = null; + + + + + + + +/* +--------------------------------------------------------------------------- + CREATE #1: BASE STRUCTURE +--------------------------------------------------------------------------- +*/ + +qx.Proto._createControlBar = function() +{ + this._controlBar = new qx.ui.layout.HorizontalBoxLayout; + this._controlBar.setHeight("auto"); + this._controlBar.setParent(this); +} + +qx.Proto._createButtonBar = function() +{ + this._btnbar = new qx.ui.layout.HorizontalBoxLayout; + this._btnbar.setHeight("auto"); + this._btnbar.setSpacing(4); + this._btnbar.setHorizontalChildrenAlign("right"); + this._btnbar.setPadding(2, 4); + this.add(this._btnbar); + + this._btncancel = new qx.ui.form.Button(this.tr("Cancel"), "icon/16/actions/dialog-cancel.png"); + this._btnok = new qx.ui.form.Button(this.tr("OK"), "icon/16/actions/dialog-ok.png"); + + this._btncancel.addEventListener("execute", this._onButtonCancelExecute, this); + this._btnok.addEventListener("execute", this._onButtonOkExecute, this); + + this._btnbar.add(this._btncancel, this._btnok); +} + + + + + + +/* +--------------------------------------------------------------------------- + CREATE #2: PANES +--------------------------------------------------------------------------- +*/ + +qx.Proto._createControlPane = function() +{ + this._controlPane = new qx.ui.layout.VerticalBoxLayout; + this._controlPane.setWidth("auto"); + this._controlPane.setPadding(4); + this._controlPane.setPaddingBottom(7); + this._controlPane.setParent(this._controlBar); +} + +qx.Proto._createHueSaturationPane = function() +{ + this._hueSaturationPane = new qx.ui.layout.CanvasLayout; + this._hueSaturationPane.setWidth("auto"); + this._hueSaturationPane.setPadding(6, 4); + this._hueSaturationPane.setParent(this._controlBar); + + this._hueSaturationPane.addEventListener("mousewheel", this._onHueSaturationPaneMouseWheel, this); + + this._hueSaturationField = new qx.ui.basic.Image("widget/colorselector/huesaturation-field.jpg"); + this._hueSaturationField.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + this._hueSaturationField.setMargin(5); + this._hueSaturationField.setParent(this._hueSaturationPane); + + this._hueSaturationField.addEventListener("mousedown", this._onHueSaturationFieldMouseDown, this); + + this._hueSaturationHandle = new qx.ui.basic.Image("widget/colorselector/huesaturation-handle.gif"); + this._hueSaturationHandle.setLocation(0, 256); + this._hueSaturationHandle.setParent(this._hueSaturationPane); + + this._hueSaturationHandle.addEventListener("mousedown", this._onHueSaturationHandleMouseDown, this); + this._hueSaturationHandle.addEventListener("mouseup", this._onHueSaturationHandleMouseUp, this); + this._hueSaturationHandle.addEventListener("mousemove", this._onHueSaturationHandleMouseMove, this); +} + +qx.Proto._createBrightnessPane = function() +{ + this._brightnessPane = new qx.ui.layout.CanvasLayout; + this._brightnessPane.setWidth("auto"); + this._brightnessPane.setPadding(6, 4); + this._brightnessPane.setParent(this._controlBar); + + this._brightnessPane.addEventListener("mousewheel", this._onBrightnessPaneMouseWheel, this); + + this._brightnessField = new qx.ui.basic.Image("widget/colorselector/brightness-field.jpg"); + this._brightnessField.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + this._brightnessField.setMargin(5, 7); + this._brightnessField.setParent(this._brightnessPane); + + this._brightnessField.addEventListener("mousedown", this._onBrightnessFieldMouseDown, this); + + this._brightnessHandle = new qx.ui.basic.Image("widget/colorselector/brightness-handle.gif"); + this._brightnessHandle.setLocation(0, 0); + this._brightnessHandle.setParent(this._brightnessPane); + + this._brightnessHandle.addEventListener("mousedown", this._onBrightnessHandleMouseDown, this); + this._brightnessHandle.addEventListener("mouseup", this._onBrightnessHandleMouseUp, this); + this._brightnessHandle.addEventListener("mousemove", this._onBrightnessHandleMouseMove, this); +} + + + + + + + +/* +--------------------------------------------------------------------------- + CREATE #3: CONTROL PANE CONTENT +--------------------------------------------------------------------------- +*/ + +qx.Proto._createPresetFieldSet = function() +{ + this._presetFieldSet = new qx.ui.groupbox.GroupBox(this.tr("Presets")); + this._presetFieldSet.setHeight("auto"); + this._presetFieldSet.setParent(this._controlPane); + + this._presetGrid = new qx.ui.layout.GridLayout; + this._presetGrid.setHorizontalSpacing(2); + this._presetGrid.setVerticalSpacing(2); + this._presetGrid.setColumnCount(11); + this._presetGrid.setRowCount(4); + this._presetGrid.setColumnWidth(0, 18); + this._presetGrid.setColumnWidth(1, 18); + this._presetGrid.setColumnWidth(2, 18); + this._presetGrid.setColumnWidth(3, 18); + this._presetGrid.setColumnWidth(4, 18); + this._presetGrid.setColumnWidth(5, 18); + this._presetGrid.setColumnWidth(6, 18); + this._presetGrid.setColumnWidth(7, 18); + this._presetGrid.setColumnWidth(8, 18); + this._presetGrid.setColumnWidth(9, 18); + + this._presetGrid.setRowHeight(0, 16); + this._presetGrid.setRowHeight(1, 16); + this._presetFieldSet.add(this._presetGrid); + + this._presetTable = [ "maroon", "red", "orange", "yellow", "olive", "purple", "fuchsia", "lime", "green", "navy", "blue", "aqua", "teal", "black", "#333", "#666", "#999", "#BBB", "#EEE", "white" ]; + + var colorField; + + for (var i=0; i<2; i++) + { + for (var j=0; j<10; j++) + { + colorField = new qx.ui.basic.Terminator; + colorField.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + colorField.setBackgroundColor(this._presetTable[i*10+j]); + colorField.addEventListener("mousedown", this._onColorFieldClick, this); + + this._presetGrid.add(colorField, j, i); + } + } +} + +qx.Proto._createInputFieldSet = function() +{ + this._inputFieldSet = new qx.ui.groupbox.GroupBox(this.tr("Details")); + this._inputFieldSet.setHeight("auto"); + this._inputFieldSet.setParent(this._controlPane); + + this._inputLayout = new qx.ui.layout.VerticalBoxLayout; + this._inputLayout.setHeight("auto"); + this._inputLayout.setSpacing(10); + this._inputLayout.setParent(this._inputFieldSet.getFrameObject()); +} + +qx.Proto._createPreviewFieldSet = function() +{ + this._previewFieldSet = new qx.ui.groupbox.GroupBox(this.tr("Preview (Old/New)")); + this._previewFieldSet.setHeight("1*"); + this._previewFieldSet.setParent(this._controlPane); + + this._previewLayout = new qx.ui.layout.HorizontalBoxLayout; + this._previewLayout.setHeight("100%"); + this._previewLayout.setLocation(0, 0); + this._previewLayout.setRight(0); + this._previewLayout.setSpacing(10); + this._previewLayout.setParent(this._previewFieldSet.getFrameObject()); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + CREATE #4: INPUT FIELDSET CONTENT +--------------------------------------------------------------------------- +*/ + +qx.Proto._createHexField = function() +{ + this._hexLayout = new qx.ui.layout.HorizontalBoxLayout; + this._hexLayout.setHeight("auto"); + this._hexLayout.setSpacing(4); + this._hexLayout.setVerticalChildrenAlign("middle"); + this._hexLayout.setParent(this._inputLayout); + + this._hexLabel = new qx.ui.basic.Label(this.tr("Hex")); + this._hexLabel.setWidth(25); + this._hexLabel.setParent(this._hexLayout); + + this._hexHelper = new qx.ui.basic.Label("#"); + this._hexHelper.setParent(this._hexLayout); + + this._hexField = new qx.ui.form.TextField("FFFFFF"); + this._hexField.setWidth(50); + this._hexField.setFont('11px "Bitstream Vera Sans Mono", monospace'); + this._hexField.setParent(this._hexLayout); + + this._hexField.addEventListener("changeValue", this._onHexFieldChange, this); +} + +qx.Proto._createRgbSpinner = function() +{ + this._rgbSpinLayout = new qx.ui.layout.HorizontalBoxLayout; + this._rgbSpinLayout.setHeight("auto"); + this._rgbSpinLayout.setSpacing(4); + this._rgbSpinLayout.setVerticalChildrenAlign("middle"); + this._rgbSpinLayout.setParent(this._inputLayout); + + this._rgbSpinLabel = new qx.ui.basic.Label(this.tr("RGB")); + this._rgbSpinLabel.setWidth(25); + this._rgbSpinLabel.setParent(this._rgbSpinLayout); + + this._rgbSpinRed = new qx.ui.form.Spinner(0, 255, 255); + this._rgbSpinRed.setWidth(50); + + this._rgbSpinGreen = new qx.ui.form.Spinner(0, 255, 255); + this._rgbSpinGreen.setWidth(50); + + this._rgbSpinBlue = new qx.ui.form.Spinner(0, 255, 255); + this._rgbSpinBlue.setWidth(50); + + this._rgbSpinLayout.add(this._rgbSpinRed, this._rgbSpinGreen, this._rgbSpinBlue); + + this._rgbSpinRed.addEventListener("change", this._setRedFromSpinner, this); + this._rgbSpinGreen.addEventListener("change", this._setGreenFromSpinner, this); + this._rgbSpinBlue.addEventListener("change", this._setBlueFromSpinner, this); +} + +qx.Proto._createHsbSpinner = function() +{ + this._hsbSpinLayout = new qx.ui.layout.HorizontalBoxLayout; + this._hsbSpinLayout.setHeight("auto"); + this._hsbSpinLayout.setSpacing(4); + this._hsbSpinLayout.setVerticalChildrenAlign("middle"); + this._hsbSpinLayout.setParent(this._inputLayout); + + this._hsbSpinLabel = new qx.ui.basic.Label(this.tr("HSB")); + this._hsbSpinLabel.setWidth(25); + this._hsbSpinLayout.add(this._hsbSpinLabel); + + this._hsbSpinHue = new qx.ui.form.Spinner(0, 0, 360); + this._hsbSpinHue.setWidth(50); + + this._hsbSpinSaturation = new qx.ui.form.Spinner(0, 0, 100); + this._hsbSpinSaturation.setWidth(50); + + this._hsbSpinBrightness = new qx.ui.form.Spinner(0, 100, 100); + this._hsbSpinBrightness.setWidth(50); + + this._hsbSpinLayout.add(this._hsbSpinHue, this._hsbSpinSaturation, this._hsbSpinBrightness); + + this._hsbSpinHue.addEventListener("change", this._setHueFromSpinner, this); + this._hsbSpinSaturation.addEventListener("change", this._setSaturationFromSpinner, this); + this._hsbSpinBrightness.addEventListener("change", this._setBrightnessFromSpinner, this); +} + + + + + + + +/* +--------------------------------------------------------------------------- + CREATE #5: PREVIEW CONTENT +--------------------------------------------------------------------------- +*/ + +qx.Proto._createPreviewContent = function() +{ + this._oldColorPreview = new qx.ui.basic.Terminator; + this._oldColorPreview.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + this._oldColorPreview.setWidth("1*"); + this._oldColorPreview.setBackgroundImage("static/image/dotted_white.gif"); + this._oldColorPreview.setParent(this._previewLayout); + + this._newColorPreview = new qx.ui.basic.Terminator; + this._newColorPreview.setBorder(qx.renderer.border.BorderPresets.getInstance().thinInset); + this._newColorPreview.setWidth("1*"); + this._newColorPreview.setBackgroundColor("white"); + this._newColorPreview.setParent(this._previewLayout); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + RGB MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyRed = function(propValue, propOldValue, propData) +{ + if (this._updateContext === null) { + this._updateContext = "redModifier"; + } + + if (this._updateContext !== "rgbSpinner") { + this._rgbSpinRed.setValue(propValue); + } + + if (this._updateContext !== "hexField") { + this._setHexFromRgb(); + } + + switch(this._updateContext) + { + case "rgbSpinner": + case "hexField": + case "redModifier": + this._setHueFromRgb(); + } + + this._setPreviewFromRgb(); + + if (this._updateContext === "redModifier") { + this._updateContext = null; + } + + return true; +} + +qx.Proto._modifyGreen = function(propValue, propOldValue, propData) +{ + if (this._updateContext === null) { + this._updateContext = "greenModifier"; + } + + if (this._updateContext !== "rgbSpinner") { + this._rgbSpinGreen.setValue(propValue); + } + + if (this._updateContext !== "hexField") { + this._setHexFromRgb(); + } + + switch(this._updateContext) + { + case "rgbSpinner": + case "hexField": + case "greenModifier": + this._setHueFromRgb(); + } + + this._setPreviewFromRgb(); + + if (this._updateContext === "greenModifier") { + this._updateContext = null; + } + + return true; +} + +qx.Proto._modifyBlue = function(propValue, propOldValue, propData) +{ + if (this._updateContext === null) { + this._updateContext = "blueModifier"; + } + + if (this._updateContext !== "rgbSpinner") { + this._rgbSpinBlue.setValue(propValue); + } + + if (this._updateContext !== "hexField") { + this._setHexFromRgb(); + } + + switch(this._updateContext) + { + case "rgbSpinner": + case "hexField": + case "blueModifier": + this._setHueFromRgb(); + } + + this._setPreviewFromRgb(); + + if (this._updateContext === "blueModifier") { + this._updateContext = null; + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + HSB MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyHue = function(propValue, propOldValue, propData) +{ + if (this._updateContext === null) { + this._updateContext = "hueModifier"; + } + + if (this._updateContext !== "hsbSpinner") { + this._hsbSpinHue.setValue(propValue); + } + + if (this._updateContext !== "hueSaturationField") + { + if (this._hueSaturationHandle.isCreated()) + { + this._hueSaturationHandle._applyRuntimeLeft(Math.round(propValue / 1.40625) + this._hueSaturationPane.getPaddingLeft()); + } + else + { + this._hueSaturationHandle.setLeft(Math.round(propValue / 1.40625)); + } + } + + switch(this._updateContext) + { + case "hsbSpinner": + case "hueSaturationField": + case "hueModifier": + this._setRgbFromHue(); + } + + if (this._updateContext === "hueModifier") { + this._updateContext = null; + } + + return true; +} + +qx.Proto._modifySaturation = function(propValue, propOldValue, propData) +{ + if (this._updateContext === null) { + this._updateContext = "saturationModifier"; + } + + if (this._updateContext !== "hsbSpinner") { + this._hsbSpinSaturation.setValue(propValue); + } + + if (this._updateContext !== "hueSaturationField") + { + if (this._hueSaturationHandle.isCreated()) + { + this._hueSaturationHandle._applyRuntimeTop(256 - Math.round(propValue * 2.56) + this._hueSaturationPane.getPaddingTop()); + } + else + { + this._hueSaturationHandle.setTop(256 - Math.round(propValue * 2.56)); + } + } + + switch(this._updateContext) + { + case "hsbSpinner": + case "hueSaturationField": + case "saturationModifier": + this._setRgbFromHue(); + } + + if (this._updateContext === "saturationModifier") { + this._updateContext = null; + } + + return true; +} + +qx.Proto._modifyBrightness = function(propValue, propOldValue, propData) +{ + if (this._updateContext === null) { + this._updateContext = "brightnessModifier"; + } + + if (this._updateContext !== "hsbSpinner") { + this._hsbSpinBrightness.setValue(propValue); + } + + if (this._updateContext !== "brightnessField") + { + var topValue = 256 - Math.round(propValue * 2.56); + + if (this._brightnessHandle.isCreated()) + { + this._brightnessHandle._applyRuntimeTop(topValue + this._brightnessPane.getPaddingTop()); + } + else + { + this._brightnessHandle.setTop(topValue); + } + } + + switch(this._updateContext) + { + case "hsbSpinner": + case "brightnessField": + case "brightnessModifier": + this._setRgbFromHue(); + } + + if (this._updateContext === "brightnessModifier") { + this._updateContext = null; + } + + return true; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + BRIGHTNESS IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._onBrightnessHandleMouseDown = function(e) +{ + // Activate Capturing + this._brightnessHandle.setCapture(true); + + // Calculate subtract: Position of Brightness Field - Current Mouse Offset + this._brightnessSubtract = qx.html.Location.getPageOuterTop(this._brightnessField.getElement()) + (e.getPageY() - qx.html.Location.getPageBoxTop(this._brightnessHandle.getElement())); + + // Block field event handling + e.setPropagationStopped(true); +} + +qx.Proto._onBrightnessHandleMouseUp = function(e) +{ + // Disabling capturing + this._brightnessHandle.setCapture(false); +} + +qx.Proto._onBrightnessHandleMouseMove = function(e) +{ + // Update if captured currently (through previous mousedown) + if (this._brightnessHandle.getCapture()) { + this._setBrightnessOnFieldEvent(e); + } +} + +qx.Proto._onBrightnessFieldMouseDown = function(e) +{ + // Calculate substract: Half height of handler + this._brightnessSubtract = qx.html.Location.getPageOuterTop(this._brightnessField.getElement()) + Math.round(qx.html.Dimension.getBoxHeight(this._brightnessHandle.getElement()) / 2); + + // Update + this._setBrightnessOnFieldEvent(e); + + // Afterwards: Activate Capturing for handle + this._brightnessHandle.setCapture(true); +} + +qx.Proto._onBrightnessPaneMouseWheel = function(e) { + this.setBrightness(qx.lang.Number.limit(this.getBrightness() + e.getWheelDelta(), 0, 100)); +} + +qx.Proto._setBrightnessOnFieldEvent = function(e) +{ + var vValue = qx.lang.Number.limit(e.getPageY() - this._brightnessSubtract, 0, 256); + + this._updateContext = "brightnessField"; + + if (this._brightnessHandle.isCreated()) + { + this._brightnessHandle._applyRuntimeTop(vValue + this._brightnessPane.getPaddingTop()); + } + else + { + this._brightnessHandle.setTop(vValue); + } + + this.setBrightness(100-Math.round(vValue / 2.56)); + + this._updateContext = null; +} + +qx.Proto._onButtonOkExecute = function(e) { + this.createDispatchEvent("dialogok"); +} + +qx.Proto._onButtonCancelExecute = function(e) { + this.createDispatchEvent("dialogcancel"); +} + + + + + + +/* +--------------------------------------------------------------------------- + HUE/SATURATION IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._onHueSaturationHandleMouseDown = function(e) +{ + // Activate Capturing + this._hueSaturationHandle.setCapture(true); + + // Calculate subtract: Position of HueSaturation Field - Current Mouse Offset + this._hueSaturationSubtractTop = qx.html.Location.getPageOuterTop(this._hueSaturationField.getElement()) + (e.getPageY() - qx.html.Location.getPageBoxTop(this._hueSaturationHandle.getElement())); + this._hueSaturationSubtractLeft = qx.html.Location.getPageOuterLeft(this._hueSaturationField.getElement()) + (e.getPageX() - qx.html.Location.getPageBoxLeft(this._hueSaturationHandle.getElement())); + + // Block field event handling + e.setPropagationStopped(true); +} + +qx.Proto._onHueSaturationHandleMouseUp = function(e) +{ + // Disabling capturing + this._hueSaturationHandle.setCapture(false); +} + +qx.Proto._onHueSaturationHandleMouseMove = function(e) +{ + // Update if captured currently (through previous mousedown) + if (this._hueSaturationHandle.getCapture()) { + this._setHueSaturationOnFieldEvent(e); + } +} + +qx.Proto._onHueSaturationFieldMouseDown = function(e) +{ + // Calculate substract: Half width/height of handler + this._hueSaturationSubtractTop = qx.html.Location.getPageOuterTop(this._hueSaturationField.getElement()) + Math.round(qx.html.Dimension.getBoxHeight(this._hueSaturationHandle.getElement()) / 2); + this._hueSaturationSubtractLeft = qx.html.Location.getPageOuterLeft(this._hueSaturationField.getElement()) + Math.round(qx.html.Dimension.getBoxWidth(this._hueSaturationHandle.getElement()) / 2); + + // Update + this._setHueSaturationOnFieldEvent(e); + + // Afterwards: Activate Capturing for handle + this._hueSaturationHandle.setCapture(true); +} + +qx.Proto._onHueSaturationPaneMouseWheel = function(e) { + this.setSaturation(qx.lang.Number.limit(this.getSaturation() + e.getWheelDelta(), 0, 100)); +} + +qx.Proto._setHueSaturationOnFieldEvent = function(e) +{ + var vTop = qx.lang.Number.limit(e.getPageY() - this._hueSaturationSubtractTop, 0, 256); + var vLeft = qx.lang.Number.limit(e.getPageX() - this._hueSaturationSubtractLeft, 0, 256); + + if (this._hueSaturationHandle.isCreated()) + { + this._hueSaturationHandle._applyRuntimeTop(vTop + this._hueSaturationPane.getPaddingTop()); + this._hueSaturationHandle._applyRuntimeLeft(vLeft + this._hueSaturationPane.getPaddingLeft()); + } + else + { + this._hueSaturationHandle.setTop(vTop); + this._hueSaturationHandle.setLeft(vLeft); + } + + this._updateContext = "hueSaturationField"; + + this.setSaturation(100-Math.round(vTop / 2.56)); + this.setHue(Math.round(vLeft * 1.40625)); + + this._updateContext = null; +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + RGB SPINNER +--------------------------------------------------------------------------- +*/ + +qx.Proto._setRedFromSpinner = function() +{ + if (this._updateContext !== null) { + return; + } + + this._updateContext = "rgbSpinner"; + this.setRed(this._rgbSpinRed.getValue()); + this._updateContext = null; +} + +qx.Proto._setGreenFromSpinner = function() +{ + if (this._updateContext !== null) { + return; + } + + this._updateContext = "rgbSpinner"; + this.setGreen(this._rgbSpinGreen.getValue()); + this._updateContext = null; +} + +qx.Proto._setBlueFromSpinner = function() +{ + if (this._updateContext !== null) { + return; + } + + this._updateContext = "rgbSpinner"; + this.setBlue(this._rgbSpinBlue.getValue()); + this._updateContext = null; +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + HSB SPINNER +--------------------------------------------------------------------------- +*/ + +qx.Proto._setHueFromSpinner = function() +{ + if (this._updateContext !== null) { + return; + } + + this._updateContext = "hsbSpinner"; + this.setHue(this._hsbSpinHue.getValue()); + this._updateContext = null; +} + +qx.Proto._setSaturationFromSpinner = function() +{ + if (this._updateContext !== null) { + return; + } + + this._updateContext = "hsbSpinner"; + this.setSaturation(this._hsbSpinSaturation.getValue()); + this._updateContext = null; +} + +qx.Proto._setBrightnessFromSpinner = function() +{ + if (this._updateContext !== null) { + return; + } + + this._updateContext = "hsbSpinner"; + this.setBrightness(this._hsbSpinBrightness.getValue()); + this._updateContext = null; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + HEX FIELD +--------------------------------------------------------------------------- +*/ + +qx.Proto._onHexFieldChange = function(e) +{ + if (this._updateContext !== null) { + return; + } + + var vValue = this._hexField.getValue().toLowerCase(); + + var vRed = 0; + var vGreen = 0; + var vBlue = 0; + + switch(vValue.length) + { + case 3: + vRed = qx.renderer.color.Color.m_rgb[vValue.charAt(0)]; + vGreen = qx.renderer.color.Color.m_rgb[vValue.charAt(1)]; + vBlue = qx.renderer.color.Color.m_rgb[vValue.charAt(2)]; + + vRed = (vRed * 16) + vRed; + vGreen = (vGreen * 16) + vGreen; + vBlue = (vBlue * 16) + vBlue; + + break; + + case 6: + vRed = (qx.renderer.color.Color.m_rgb[vValue.charAt(0)] * 16) + qx.renderer.color.Color.m_rgb[vValue.charAt(1)]; + vGreen = (qx.renderer.color.Color.m_rgb[vValue.charAt(2)] * 16) + qx.renderer.color.Color.m_rgb[vValue.charAt(3)]; + vBlue = (qx.renderer.color.Color.m_rgb[vValue.charAt(4)] * 16) + qx.renderer.color.Color.m_rgb[vValue.charAt(5)]; + + break; + + default: + return false; + } + + this._updateContext = "hexField"; + + this.setRed(vRed); + this.setGreen(vGreen); + this.setBlue(vBlue); + + this._updateContext = null; +} + +qx.Proto._setHexFromRgb = function() { + this._hexField.setValue(qx.lang.String.pad(this.getRed().toString(16).toUpperCase(), 2) + qx.lang.String.pad(this.getGreen().toString(16).toUpperCase(), 2) + qx.lang.String.pad(this.getBlue().toString(16).toUpperCase(), 2)); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + COLOR FIELD +--------------------------------------------------------------------------- +*/ + +qx.Proto._onColorFieldClick = function(e) +{ + var vColor = e.getTarget().getBackgroundColor(); + + if (!vColor) { + return this.error("Missing backgroundColor value for field: " + e.getTarget()); + } + + this.setRed(vColor.getRed()); + this.setGreen(vColor.getGreen()); + this.setBlue(vColor.getBlue()); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + RGB/HSB SYNC +--------------------------------------------------------------------------- +*/ + +qx.Proto._setHueFromRgb = function() +{ + switch(this._updateContext) + { + case "hsbSpinner": + case "hueSaturationField": + case "brightnessField": + break; + + default: + var vHsb = qx.util.ColorUtil.rgb2hsb(this.getRed(), this.getGreen(), this.getBlue()); + + this.setHue(vHsb.hue); + this.setSaturation(vHsb.saturation); + this.setBrightness(vHsb.brightness); + } +} + +qx.Proto._setRgbFromHue = function() +{ + switch(this._updateContext) + { + case "rgbSpinner": + case "hexField": + break; + + default: + var vRgb = qx.util.ColorUtil.hsb2rgb(this.getHue(), this.getSaturation(), this.getBrightness()); + + this.setRed(vRgb.red); + this.setGreen(vRgb.green); + this.setBlue(vRgb.blue); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + PREVIEW SYNC +--------------------------------------------------------------------------- +*/ + +qx.Proto._setPreviewFromRgb = function() +{ + if (this._newColorPreview.isCreated()) + { + // faster (omit qx.renderer.color.Color instances) + this._newColorPreview._style.backgroundColor = qx.renderer.color.Color.rgb2style(this.getRed(), this.getGreen(), this.getBlue()); + } + else + { + this._newColorPreview.setBackgroundColor([this.getRed(), this.getGreen(), this.getBlue()]); + } +} + +qx.Proto.setPreviousColor = function(vRed, vGreen, vBlue) +{ + this._oldColorPreview.setBackgroundImage(null); + this._oldColorPreview.setBackgroundColor([vRed, vGreen, vBlue]); + + this.setRed(vRed); + this.setGreen(vGreen); + this.setBlue(vBlue); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._controlBar) + { + this._controlBar.dispose(); + this._controlBar = null; + } + + if (this._btnbar) + { + this._btnbar.dispose(); + this._btnbar = null; + } + + if (this._btncancel) + { + this._btncancel.dispose(); + this._btncancel = null; + } + + if (this._btnok) + { + this._btnok.dispose(); + this._btnok = null; + } + + if (this._controlPane) + { + this._controlPane.dispose(); + this._controlPane = null; + } + + if (this._hueSaturationPane) + { + this._hueSaturationPane.removeEventListener("mousewheel", this._onHueSaturationPaneMouseWheel, this); + this._hueSaturationPane.dispose(); + this._hueSaturationPane = null; + } + + if (this._hueSaturationField) + { + this._hueSaturationField.removeEventListener("mousedown", this._onHueSaturationFieldMouseDown, this); + this._hueSaturationField.dispose(); + this._hueSaturationField = null; + } + + if (this._hueSaturationHandle) + { + this._hueSaturationHandle.removeEventListener("mousedown", this._onHueSaturationHandleMouseDown, this); + this._hueSaturationHandle.removeEventListener("mouseup", this._onHueSaturationHandleMouseUp, this); + this._hueSaturationHandle.removeEventListener("mousemove", this._onHueSaturationHandleMouseMove, this); + this._hueSaturationHandle.dispose(); + this._hueSaturationHandle = null; + } + + if (this._brightnessPane) + { + this._brightnessPane.removeEventListener("mousewheel", this._onBrightnessPaneMouseWheel, this); + this._brightnessPane.dispose(); + this._brightnessPane = null; + } + + if (this._brightnessField) + { + this._brightnessField.removeEventListener("mousedown", this._onBrightnessFieldMouseDown, this); + this._brightnessField.dispose(); + this._brightnessField = null; + } + + if (this._brightnessHandle) + { + this._brightnessHandle.removeEventListener("mousedown", this._onBrightnessHandleMouseDown, this); + this._brightnessHandle.removeEventListener("mouseup", this._onBrightnessHandleMouseUp, this); + this._brightnessHandle.removeEventListener("mousemove", this._onBrightnessHandleMouseMove, this); + this._brightnessHandle.dispose(); + this._brightnessHandle = null; + } + + if (this._presetFieldSet) + { + this._presetFieldSet.dispose(); + this._presetFieldSet = null; + } + + if (this._presetGrid) + { + this._presetGrid.dispose(); + this._presetGrid = null; + } + + this._presetTable = null; + + if (this._inputFieldSet) + { + this._inputFieldSet.dispose(); + this._inputFieldSet = null; + } + + if (this._inputLayout) + { + this._inputLayout.dispose(); + this._inputLayout = null; + } + + if (this._previewFieldSet) + { + this._previewFieldSet.dispose(); + this._previewFieldSet = null; + } + + if (this._previewLayout) + { + this._previewLayout.dispose(); + this._previewLayout = null; + } + + if (this._hexLayout) + { + this._hexLayout.dispose(); + this._hexLayout = null; + } + + if (this._hexLabel) + { + this._hexLabel.dispose(); + this._hexLabel = null; + } + + if (this._hexHelper) + { + this._hexHelper.dispose(); + this._hexHelper = null; + } + + if (this._hexField) + { + this._hexField.addEventListener("changeValue", this._onHexFieldChange, this); + this._hexField.dispose(); + this._hexField = null; + } + + if (this._rgbSpinLayout) + { + this._rgbSpinLayout.dispose(); + this._rgbSpinLayout = null; + } + + if (this._rgbSpinLabel) + { + this._rgbSpinLabel.dispose(); + this._rgbSpinLabel = null; + } + + if (this._rgbSpinRed) + { + this._rgbSpinRed.removeEventListener("change", this._setRedFromSpinner, this); + this._rgbSpinRed.dispose(); + this._rgbSpinRed = null; + } + + if (this._rgbSpinGreen) + { + this._rgbSpinGreen.removeEventListener("change", this._setGreenFromSpinner, this); + this._rgbSpinGreen.dispose(); + this._rgbSpinGreen = null; + } + + if (this._rgbSpinBlue) + { + this._rgbSpinBlue.removeEventListener("change", this._setBlueFromSpinner, this); + this._rgbSpinBlue.dispose(); + this._rgbSpinBlue = null; + } + + if (this._hsbSpinLayout) + { + this._hsbSpinLayout.dispose(); + this._hsbSpinLayout = null; + } + + if (this._hsbSpinLabel) + { + this._hsbSpinLabel.dispose(); + this._hsbSpinLabel = null; + } + + if (this._hsbSpinHue) + { + this._hsbSpinHue.removeEventListener("change", this._setHueFromSpinner, this); + this._hsbSpinHue.dispose(); + this._hsbSpinHue = null; + } + + if (this._hsbSpinSaturation) + { + this._hsbSpinSaturation.removeEventListener("change", this._setSaturationFromSpinner, this); + this._hsbSpinSaturation.dispose(); + this._hsbSpinSaturation = null; + } + + if (this._hsbSpinBrightness) + { + this._hsbSpinBrightness.removeEventListener("change", this._setBrightnessFromSpinner, this); + this._hsbSpinBrightness.dispose(); + this._hsbSpinBrightness = null; + } + + if (this._oldColorPreview) + { + this._oldColorPreview.dispose(); + this._oldColorPreview = null; + } + + if (this._newColorPreview) + { + this._newColorPreview.dispose(); + this._newColorPreview = null; + } + + return qx.ui.layout.VerticalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js new file mode 100644 index 0000000000..cf32dcbbd8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js @@ -0,0 +1,510 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.util.format.DateFormat) +#embed(qx.widgettheme/datechooser/*) + +************************************************************************ */ + +/** + * Shows calendar and allows choosing a date. + * + * @param date {Date ? null} The initial date to show. If <code>null</code> + * the current day (today) is shown. + * + * @event select {qx.event.type.DataEvent} Fired when a date was selected. The + * event holds the new selected date in its data property. + */ +qx.OO.defineClass("qx.ui.component.DateChooser", qx.ui.layout.BoxLayout, +function(date) { + qx.ui.layout.BoxLayout.call(this); + + this.setOrientation("vertical"); + + // Create the navigation bar + var navBar = new qx.ui.layout.BoxLayout; + navBar.set({ width:null, height:"auto", spacing:1 }); + + var lastYearBt = new qx.ui.toolbar.Button(null, "widget/datechooser/lastYear.png"); + var lastMonthBt = new qx.ui.toolbar.Button(null, "widget/datechooser/lastMonth.png"); + var monthYearLabel = new qx.ui.basic.Label; + var nextMonthBt = new qx.ui.toolbar.Button(null, "widget/datechooser/nextMonth.png"); + var nextYearBt = new qx.ui.toolbar.Button(null, "widget/datechooser/nextYear.png"); + + lastYearBt.set({ show:'icon', toolTip:new qx.ui.popup.ToolTip(this.tr("Last year")), spacing:0 }); + lastMonthBt.set({ show:'icon', toolTip:new qx.ui.popup.ToolTip(this.tr("Last month")) }); + nextMonthBt.set({ show:'icon', toolTip:new qx.ui.popup.ToolTip(this.tr("Next month")) }); + nextYearBt.set({ show:'icon', toolTip:new qx.ui.popup.ToolTip(this.tr("Next year")) }); + + lastYearBt.setAppearance("datechooser-toolbar-button"); + lastMonthBt.setAppearance("datechooser-toolbar-button"); + nextMonthBt.setAppearance("datechooser-toolbar-button"); + nextYearBt.setAppearance("datechooser-toolbar-button"); + + lastYearBt.addEventListener("click", this._onNavButtonClicked, this); + lastMonthBt.addEventListener("click", this._onNavButtonClicked, this); + nextMonthBt.addEventListener("click", this._onNavButtonClicked, this); + nextYearBt.addEventListener("click", this._onNavButtonClicked, this); + + this._lastYearBt = lastYearBt; + this._lastMonthBt = lastMonthBt; + this._nextMonthBt = nextMonthBt; + this._nextYearBt = nextYearBt; + + monthYearLabel.setAppearance("datechooser-monthyear"); + monthYearLabel.set({ width:"1*" }); + + navBar.add(lastYearBt, lastMonthBt, monthYearLabel, nextMonthBt, nextYearBt); + this._monthYearLabel = monthYearLabel; + navBar.setHtmlAttribute("id", "navBar"); + + // Calculate the cell width and height + var testLabel = new qx.ui.basic.Label; + var testParent = new qx.ui.layout.CanvasLayout; + testParent.add(testLabel); + testLabel.setHtml("Xx"); + testLabel.set({ paddingLeft : 5, paddingRight : 5 }); + testLabel.setAppearance("datechooser-weekday"); + var cellWidth = testLabel.getBoxWidth(); + var cellHeight = testLabel.getBoxHeight(); + testLabel.dispose(); + testParent.dispose(); + + // Create the date pane + var datePane = new qx.ui.layout.GridLayout; + datePane.setAppearance("datechooser-datepane"); + datePane.set({ width:"100%", height:"auto" }); + datePane.setColumnCount(8); + datePane.setRowCount(7); + for (var i = 0; i < datePane.getColumnCount(); i++) { + datePane.setColumnWidth(i, cellWidth); + } + for (var i = 0; i < datePane.getRowCount(); i++) { + datePane.setRowHeight(i, cellHeight); + } + + // Create the weekdays + // Add an empty label as spacer for the week numbers + var label = new qx.ui.basic.Label; + label.setAppearance("datechooser-week"); + label.set({ width:"100%", height:"100%" }); + label.addState("header"); + datePane.add(label, 0, 0); + + this._weekdayLabelArr = []; + for (var i = 0; i < 7; i++) { + var label = new qx.ui.basic.Label; + label.setAppearance("datechooser-weekday"); + label.set({ width:"100%", height:"100%" }); + datePane.add(label, i + 1, 0); + this._weekdayLabelArr.push(label); + } + + // Add the days + this._dayLabelArr = []; + this._weekLabelArr = []; + for (var y = 0; y < 6; y++) { + // Add the week label + var label = new qx.ui.basic.Label; + label.setAppearance("datechooser-week"); + label.set({ width:"100%", height:"100%" }); + datePane.add(label, 0, y + 1); + this._weekLabelArr.push(label); + + // Add the day labels + for (var x = 0; x < 7; x++) { + var label = new qx.ui.basic.Label; + label.setAppearance("datechooser-day"); + label.set({ width:"100%", height:"100%" }); + label.addEventListener("mousedown", this._onDayClicked, this); + label.addEventListener("dblclick", this._onDayDblClicked, this); + datePane.add(label, x + 1, y + 1); + this._dayLabelArr.push(label); + } + } + + // Make focusable + this.setTabIndex(1); + this.addEventListener("keypress", this._onkeypress); + + // Show the right date + var shownDate = (date != null) ? date : new Date(); + this.showMonth(shownDate.getMonth(), shownDate.getFullYear()); + + // listen for locale changes + qx.locale.Manager.getInstance().addEventListener("changeLocale", this._updateDatePane, this); + + // Add the main widgets + this.add(navBar); + this.add(datePane); + +}); + + +// ***** Properties ***** + +/** The currently shown month. 0 = january, 1 = february, and so on. */ +qx.OO.addProperty({ name:"shownMonth", type:"number", defaultValue:null }); +/** The currently shown year. */ +qx.OO.addProperty({ name:"shownYear", type:"number", defaultValue:null }); +/** {Date} The currently selected date. */ +qx.OO.addProperty({ name:"date", type:"object", defaultValue:null }); + + +// property checker +qx.Proto._checkDate = function(propValue, propData) { + // Use a clone of the date internally since date instances may be changed + return (propValue == null) ? null : new Date(propValue.getTime()); +} + + +// property modifier +qx.Proto._modifyDate = function(propValue, propOldValue, propData) { + var DateChooser = qx.ui.component.DateChooser; + + if ((propValue != null) && (this.getShownMonth() != propValue.getMonth() + || this.getShownYear() != propValue.getFullYear())) + { + // The new date is in another month -> Show that month + this.showMonth(propValue.getMonth(), propValue.getFullYear()); + } else { + // The new date is in the current month -> Just change the states + var newDay = (propValue == null) ? -1 : propValue.getDate(); + for (var i = 0; i < 6 * 7; i++) { + var dayLabel = this._dayLabelArr[i]; + + if (dayLabel.hasState("otherMonth")) { + if (dayLabel.hasState("selected")) { + dayLabel.removeState("selected"); + } + } else { + var day = parseInt(dayLabel.getHtml()); + if (day == newDay) { + dayLabel.addState("selected"); + } else if (dayLabel.hasState("selected")) { + dayLabel.removeState("selected"); + } + } + } + } + + return true; +} + + +/** + * Event handler. Called when a navigation button has been clicked. + * + * @param evt {Map} the event. + */ +qx.Proto._onNavButtonClicked = function(evt) { + var year = this.getShownYear(); + var month = this.getShownMonth(); + + switch(evt.getCurrentTarget()) { + case this._lastYearBt: + year--; + break; + case this._lastMonthBt: + month--; + if (month < 0) { + month = 11; + year--; + } + break; + case this._nextMonthBt: + month++; + if (month >= 12) { + month = 0; + year++; + } + break; + case this._nextYearBt: + year++; + break; + } + + this.showMonth(month, year); +} + + +/** + * Event handler. Called when a day has been clicked. + * + * @param evt {Map} the event. + */ +qx.Proto._onDayClicked = function(evt) { + var time = evt.getCurrentTarget().dateTime; + this.setDate(new Date(time)); +} + +qx.Proto._onDayDblClicked = function() { + this.createDispatchDataEvent("select", this.getDate()); +} + +/** + * Event handler. Called when a key was pressed. + * + * @param evt {Map} the event. + */ +qx.Proto._onkeypress = function(evt) { + var dayIncrement = null; + var monthIncrement = null; + var yearIncrement = null; + if (evt.getModifiers() == 0) { + switch(evt.getKeyIdentifier()) { + case "Left": + dayIncrement = -1; + break; + case "Right": + dayIncrement = 1; + break; + case "Up": + dayIncrement = -7; + break; + case "Down": + dayIncrement = 7; + break; + case "PageUp": + monthIncrement = -1; + break; + case "PageDown": + monthIncrement = 1; + break; + case "Escape": + if (this.getDate() != null) { + this.setDate(null); + return true; + } + break; + case "Enter": + case "Space": + if (this.getDate() != null) { + this.createDispatchDataEvent("select", this.getDate()); + } + return; + } + } else if (evt.isShiftPressed()) { + switch(evt.getKeyIdentifier()) { + case "PageUp": + yearIncrement = -1; + break; + case "PageDown": + yearIncrement = 1; + break; + } + } + + if (dayIncrement != null || monthIncrement != null || yearIncrement != null) { + var date = this.getDate(); + if (date != null) { + date = new Date(date.getTime()); // TODO: Do cloning in getter + } + if (date == null) { + date = new Date(); + } else { + if (dayIncrement != null) date.setDate(date.getDate() + dayIncrement); + if (monthIncrement != null) date.setMonth(date.getMonth() + monthIncrement); + if (yearIncrement != null) date.setFullYear(date.getFullYear() + yearIncrement); + } + this.setDate(date); + } +} + + +// ***** Methods ***** + + +/** + * Shows a certain month. + * + * @param month {Integer ? null} the month to show (0 = january). If not set the month + * will remain the same. + * @param year {Integer ? null} the year to show. If not set the year will remain the + * same. + */ +qx.Proto.showMonth = function(month, year) { + if ((month != null && month != this.getShownMonth()) + || (year != null && year != this.getShownYear())) + { + if (month != null) { + this.setShownMonth(month); + } + if (year != null) { + this.setShownYear(year); + } + + this._updateDatePane(); + } +} + + +/** + * Updates the date pane. + */ +qx.Proto._updateDatePane = function() { + var DateChooser = qx.ui.component.DateChooser; + + var today = new Date(); + var todayYear = today.getFullYear(); + var todayMonth = today.getMonth(); + var todayDayOfMonth = today.getDate(); + + var selDate = this.getDate(); + var selYear = (selDate == null) ? -1 : selDate.getFullYear(); + var selMonth = (selDate == null) ? -1 : selDate.getMonth(); + var selDayOfMonth = (selDate == null) ? -1 : selDate.getDate(); + + var shownMonth = this.getShownMonth(); + var shownYear = this.getShownYear(); + + var startOfWeek = qx.locale.Date.getWeekStart(); + + // Create a help date that points to the first of the current month + var helpDate = new Date(this.getShownYear(), this.getShownMonth(), 1); + + this._monthYearLabel.setHtml((new qx.util.format.DateFormat(DateChooser.MONTH_YEAR_FORMAT)).format(helpDate)); + + // Show the day names + var firstDayOfWeek = helpDate.getDay(); + var firstSundayInMonth = (1 + 7 - firstDayOfWeek) % 7; + for (var i = 0; i < 7; i++) { + var day = (i + startOfWeek) % 7; + + var dayLabel = this._weekdayLabelArr[i]; + + helpDate.setDate(firstSundayInMonth + day); + dayLabel.setHtml(DateChooser.WEEKDAY_FORMAT.format(helpDate)); + + if (qx.locale.Date.isWeekend(day)) { + dayLabel.addState("weekend"); + } else { + dayLabel.removeState("weekend"); + } + } + + // Show the days + helpDate = new Date(shownYear, shownMonth, 1); + var nrDaysOfLastMonth = (7 + firstDayOfWeek - startOfWeek) % 7; + helpDate.setDate(helpDate.getDate() - nrDaysOfLastMonth); + for (var week = 0; week < 6; week++) { + this._weekLabelArr[week].setHtml(DateChooser.WEEK_FORMAT.format(helpDate)); + + for (var i = 0; i < 7; i++) { + var dayLabel = this._dayLabelArr[week * 7 + i]; + + var year = helpDate.getFullYear(); + var month = helpDate.getMonth(); + var dayOfMonth = helpDate.getDate(); + + var isSelectedDate = (selYear == year && selMonth == month && selDayOfMonth == dayOfMonth); + if (isSelectedDate) { + dayLabel.addState("selected"); + } else { + dayLabel.removeState("selected"); + } + + if (month != shownMonth) { + dayLabel.addState("otherMonth"); + } else { + dayLabel.removeState("otherMonth"); + } + + var isToday = (year == todayYear && month == todayMonth && dayOfMonth == todayDayOfMonth); + if (isToday) { + dayLabel.addState("today"); + } else { + dayLabel.removeState("today"); + } + + dayLabel.setHtml("" + dayOfMonth); + dayLabel.dateTime = helpDate.getTime(); + + // Go to the next day + helpDate.setDate(helpDate.getDate() + 1); + } + } +} + + +/** + * {string} The format for the date year + * label at the top center. + */ +qx.Class.MONTH_YEAR_FORMAT = qx.locale.Date.getDateTimeFormat("yyyyMMMM", "MMMM yyyy"); + +/** + * {qx.util.format.DateFormat} The format for the weekday + * labels (the headers of the date table). + */ +qx.Class.WEEKDAY_FORMAT = new qx.util.format.DateFormat("EE"); + +/** + * {qx.util.format.DateFormat} The format for the week labels. + */ +qx.Class.WEEK_FORMAT = new qx.util.format.DateFormat("ww"); + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + this._lastYearBt.removeEventListener("click", this._onNavButtonClicked, this); + this._lastMonthBt.removeEventListener("click", this._onNavButtonClicked, this); + this._nextMonthBt.removeEventListener("click", this._onNavButtonClicked, this); + this._nextYearBt.removeEventListener("click", this._onNavButtonClicked, this); + + this._lastYearBt.dispose(); + this._lastMonthBt.dispose(); + this._nextMonthBt.dispose(); + this._nextYearBt.dispose(); + + this._lastYearBt = null; + this._lastMonthBt = null; + this._nextMonthBt = null; + this._nextYearBt = null; + + this._monthYearLabel.dispose(); + this._monthYearLabel = null; + + for (var i = 0; i < this._weekdayLabelArr.length; i++) { + this._weekdayLabelArr[i].dispose(); + } + this._weekdayLabelArr = null; + + for (var i = 0; i < this._dayLabelArr.length; i++) { + this._dayLabelArr[i].dispose(); + this._dayLabelArr[i].removeEventListener("mousedown", this._onDayClicked, this); + this._dayLabelArr[i].removeEventListener("dblclick", this._onDayDblClicked, this); + } + this._dayLabelArr = null; + + for (var i = 0; i < this._weekLabelArr.length; i++) { + this._weekLabelArr[i].dispose(); + } + this._weekLabelArr = null; + + this.removeEventListener("keypress", this._onkeypress); + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooserButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooserButton.js new file mode 100644 index 0000000000..6b19884fb8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooserButton.js @@ -0,0 +1,356 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 Visionet GmbH, Germany, http://www.visionet.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Dietrich Streifert (level420) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.ui.component.DateChooser) +#require(qx.util.format.DateFormat) + +************************************************************************ */ + +/** + * A date chooser button widget which can be associated to a widget where the date value is synchronized + * whith the selected date. + * + * @param vTargetWidget {qx.ui.core.Widget} the widget which is the target for the date value selection. The target widget must have a setValue and getValue method. + * @param vChooserTitle {String} the title of the chooser window. The default value is held in property chooserTitle. + * @param vButtonLabel {String} the label of the button. The default is null. + * @param vIcon {String} the icon of the button. The default is 'icon/16/apps/accessories-date.png'. + * @param vIconWidth {String} derived from qx.ui.form.Button. + * @param vIconHeight {String} derived from qx.ui.form.Button. + * @param vFlash {String} derived from qx.ui.form.Button. + */ +qx.OO.defineClass("qx.ui.component.DateChooserButton", qx.ui.form.Button, function(vTargetWidget, vChooserTitle, vButtonLabel, vIcon, vIconWidth, vIconHeight, vFlash) +{ + if (!vIcon) { + vIcon = 'icon/16/apps/accessories-date.png'; + } + + qx.ui.form.Button.call(this, vButtonLabel, vIcon, vIconWidth, vIconHeight, vFlash); + this.set({ height : 20 }); + + // create the subwidgets + // + this._createChooser(); + this._createChooserWindow(); + + // create dateFormat instance + // + this._dateFormat = new qx.util.format.DateFormat(qx.locale.Date.getDateFormat("short")); + qx.locale.Manager.getInstance().addEventListener("changeLocale", this._changeLocale, this); + + if (vTargetWidget) { + this.setTargetWidget(vTargetWidget); + } + + if (vChooserTitle) { + this.setChooserTitle(vChooserTitle); + } + + this.addEventListener("execute", this._executeHandler, this); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** The target widget the selected Date should be synchronized with. */ +qx.OO.addProperty( +{ + name : "targetWidget", + type : "object", + instance : "qx.ui.core.Widget", + defaultValue : null +}); + +/** The title of the date chooser window. */ +qx.OO.addProperty( +{ + name : "chooserTitle", + defaultValue : qx.locale.Manager.tr("Choose a date") +}); + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +/** + * Modifier for property targetWidget. + * + * @type member + * @name _modifyTargetWidget + * @access protected + * @param propValue {var} Current value + * @param propOldValue {var} Previous value + * @param propData {var} Property configuration map + * @return {Boolean} true if modification succeeded + * @throws exception if propValue is not instance of qx.ui.core.Widget or does not have setter and getter for property value + */ +qx.Proto._modifyTargetWidget = function(propValue, propOldValue, propData) +{ + if (propValue instanceof qx.ui.core.Widget && qx.util.Validation.isValidFunction(propValue.setValue) && qx.util.Validation.isValidFunction(propValue.getValue)) { + return true; + } else { + throw new error("TargetWidget must be an instance of qx.ui.core.Widget and has setValue and getValue methods"); + } +}; + +/** + * Modifier for property chooserTitle. + * + * @type member + * @name _modifyChooserTitle + * @access protected + * @param propValue {var} Current value + * @param propOldValue {var} Previous value + * @param propData {var} Property configuration map + * @return {Boolean} true if modification succeeded + */ +qx.Proto._modifyChooserTitle = function(propValue, propOldValue, propData) +{ + this._chooserWindow.setCaption(propValue); + return true; +}; + + + + +/* +--------------------------------------------------------------------------- + SUB WIDGET CREATION +--------------------------------------------------------------------------- +*/ + +/** + * Create the popup window with for the date chooser and add the date chooser to it. + * + * @type member + * @name _createChooserWindow + * @access protected + * @return {void} + */ +qx.Proto._createChooserWindow = function() +{ + var win = this._chooserWindow = new qx.ui.window.Window(this.getChooserTitle()); + + win.addEventListener("keydown", this._chooserWindowKeydownHandler, this); + win.addEventListener("appear", this._chooserWindowAppearHandler, this); + + win.set( + { + top : 50, + left : 50, + modal : true, + minWidth : null, + minHeight : null, + resizeable : false, + allowMinimize : false, + allowMaximize : false, + showMaximize : false, + showMinimize : false + }); + + win.auto(); + win.add(this._chooser); + win.addToDocument(); +}; + +/** + * Create the date chooser + * + * @type member + * @name _createChooser + * @access protected + * @return {void} + */ +qx.Proto._createChooser = function() +{ + var cp = this._chooser = new qx.ui.component.DateChooser; + cp.auto(); + cp.setBorder(null); + + cp.addEventListener("select", this._chooserSelectHandler, this); +}; + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +/** + * Event hanlder for the execute event of the date chooser button. + * + * @type member + * @name _executeHandler + * @access protected + * @param e {Event} the received event + * @return {void} + * @throws exception if the target widget is not instance of qx.ui.core.Widget or does not have setter and getter for property value + */ +qx.Proto._executeHandler = function(e) +{ + if (qx.util.Validation.isInvalidObject(this.getTargetWidget())) { + throw new error("TargetWidget must be set which must be an instance of qx.ui.core.Widget and has setValue and getValue method."); + } + + var date = null; + + try { + date = this._dateFormat.parse(this.getTargetWidget().getValue()); + } catch(ex) {} + + // value from taget widget could not be parsed. + this._chooser.setDate(date); + this._chooserWindow.open(); +}; + + +/** + * Handle locale changes. Update the date format of the target widget. + * + * @param e {Event} the received event + */ +qx.Proto._changeLocale = function(e) { + if (qx.util.Validation.isInvalidObject(this.getTargetWidget())) { + throw new error("TargetWidget must be set which must be an instance of qx.ui.core.Widget and has setValue and getValue method."); + } + + var date = null; + + try { + date = this._dateFormat.parse(this.getTargetWidget().getValue()); + } catch(ex) {} + + + this._dateFormat = new qx.util.format.DateFormat(qx.locale.Date.getDateFormat("short")); + + if (!date) { + return; + } + + this._chooser.setDate(date); + this.getTargetWidget().setValue(this._dateFormat.format(date)); +}; + + +/** + * Event handler for keydown events of the chooser window. Closes the window on hitting the 'Escape' key. + * + * @type member + * @name _chooserWindowKeydownHandler + * @access protected + * @param e {Event} the received key event + * @return {void} + */ +qx.Proto._chooserWindowKeydownHandler = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Escape": + this._chooserWindow.close(); + this.getTargetWidget().focus(); + break; + } +}; + +/** + * Event handler for chooser window appear event. Positions the window above the target widget. + * + * @type member + * @name _chooserWindowAppearHandler + * @access protected + * @param e {Event} the received appear event + * @return {void} + */ +qx.Proto._chooserWindowAppearHandler = function(e) +{ + this._chooserWindow.positionRelativeTo(this.getTargetWidget()); + this._chooser.focus(); +}; + +/** + * Event handler for the date chooser select event. Formats the selected date as string and sets the target widgets value. + * + * @type member + * @name _chooserSelectHandler + * @access protected + * @param e {Event} the select event + * @return {void} + */ +qx.Proto._chooserSelectHandler = function(e) +{ + target = this.getTargetWidget(); + target.setValue(this._dateFormat.format(this._chooser.getDate())); + this._chooserWindow.close(); + target.focus(); +}; + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +/** + * Disposer. Removes all assigned event listeners and disposes the subwidgets. + * + * @type member + * @name dispose + * @access public + * @return {void | call} + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._dateFormat.dispose(); + this._dateFormat = null; + + this._chooser.removeEventListener("select", this._chooserSelectHandler); + this._chooser.dispose(); + this._chooser = null; + + this._chooserWindow.removeEventListener("appear", this._chooserWindowAppearHandler); + this._chooserWindow.removeEventListener("keydown", this._chooserWindowKeydownHandler); + this._chooserWindow.dispose(); + this._chooserWindow = null; + + this.removeEventListener("execute", this._executeHandler); + + return qx.ui.form.Button.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ClientDocument.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ClientDocument.js new file mode 100644 index 0000000000..e074cfb6e0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ClientDocument.js @@ -0,0 +1,452 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.html.StyleSheet) +#require(qx.event.handler.EventHandler) +#optional(qx.client.NativeWindow) +#optional(qx.ui.window.Window) +#optional(qx.manager.object.PopupManager) + +************************************************************************ */ + +/** + * This is the basic widget of all qooxdoo applications. + * + * qx.ui.core.ClientDocument is the parent of all children inside your application. It + * also handles their resizing and focus navigation. + * + * @event windowblur {qx.event.type.Event} Fired when the window looses the + * focus. (Fired by {@link qx.event.handler.EventHandler}) + * @event windowfocus {qx.event.type.Event} Fired when the window gets the + * focus. (Fired by {@link qx.event.handler.EventHandler}) + * @event windowresize {qx.event.type.Event} Fired when the window has been + * resized. (Fired by {@link qx.event.handler.EventHandler}) + */ +qx.OO.defineClass("qx.ui.core.ClientDocument", qx.ui.layout.CanvasLayout, +function() +{ + this._window = window; + this._document = window.document; + + // Init element + this.setElement(this._document.body); + + // Needed hard-coded because otherwise the client document + // would not be added initially to the state queue + this.addToStateQueue(); + + qx.ui.layout.CanvasLayout.call(this); + + // Don't use widget styles + this._styleProperties = {}; + + // Configure as focus root + this.activateFocusRoot(); + + // Cache current size + this._cachedInnerWidth = this._document.body.offsetWidth; + this._cachedInnerHeight = this._document.body.offsetHeight; + + // Add Resize Handler + this.addEventListener("windowresize", this._onwindowresize); + + // Dialog Support + this._modalWidgets = []; + this._modalNativeWindow = null; + + // Register as focus root + qx.event.handler.EventHandler.getInstance().setFocusRoot(this); + + + // Init Resize Helper + /* + if (qx.core.Client.getInstance().isGecko()) + { + var o = this; + this._resizeHelper = window.setInterval(function() { o._onresizehelper() }, 100); + } + */ +}); + +qx.OO.addProperty({ name : "globalCursor", type : "string" }); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "client-document" }); + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("enableApplicationLayout", true); +qx.Settings.setDefault("boxModelCorrection", true); + + + + + + +/* +--------------------------------------------------------------------------- + OVERWRITE WIDGET FUNCTIONS/PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyParent = qx.lang.Function.returnTrue; +qx.Proto._modifyVisible = qx.lang.Function.returnTrue; + +qx.Proto._modifyElement = function(propValue, propOldValue, propData) +{ + this._isCreated = qx.util.Validation.isValidElement(propValue); + + if (propOldValue) + { + propOldValue.qx_Widget = null; + } + + if (propValue) + { + // add reference to widget instance + propValue.qx_Widget = this; + + // link element and style reference + this._element = propValue; + this._style = propValue.style; + } + else + { + this._element = null; + this._style = null; + } + + return true; +} + +qx.Proto.getTopLevelWidget = qx.lang.Function.returnThis; +qx.Proto.getWindowElement = function() { return this._window; } +qx.Proto.getDocumentElement = function() { return this._document; } + +qx.Proto.getParent = qx.Proto.getToolTip = qx.lang.Function.returnNull; +qx.Proto.isMaterialized = qx.Proto.isSeeable = qx.lang.Function.returnTrue; + +qx.Proto._isDisplayable = true; +qx.Proto._hasParent = false; +qx.Proto._initialLayoutDone = true; + + + + + + + + + +/* +--------------------------------------------------------------------------- + BLOCKER AND DIALOG SUPPORT +--------------------------------------------------------------------------- +*/ + +/** + * Returns the blocker widget if already created; otherwise create it first + * + * @return {ClientDocumentBlocker} the blocker widget. + */ +qx.Proto._getBlocker = function() +{ + if (!this._blocker) + { + // Create blocker instance + this._blocker = new qx.ui.core.ClientDocumentBlocker; + + // Add blocker events + this._blocker.addEventListener("mousedown", this.blockHelper, this); + this._blocker.addEventListener("mouseup", this.blockHelper, this); + + // Add blocker to client document + this.add(this._blocker); + } + + return this._blocker; +}; + +qx.Proto.blockHelper = function(e) +{ + if (this._modalNativeWindow) + { + try + { + this._modalNativeWindow._window.focus(); + } + catch(ex) + { + this.debug("Window seems to be closed already! => Releasing Blocker: (" + e.getType() + ")", ex); + this.release(this._modalNativeWindow); + } + } +} + +qx.Proto.block = function(vActiveChild) +{ + // this.debug("BLOCK: " + vActiveChild.toHashCode()); + + this._getBlocker().show(); + + if (qx.OO.isAvailable("qx.ui.window.Window") && vActiveChild instanceof qx.ui.window.Window) + { + this._modalWidgets.push(vActiveChild); + + var vOrigIndex = vActiveChild.getZIndex(); + this._getBlocker().setZIndex(vOrigIndex); + vActiveChild.setZIndex(vOrigIndex+1); + } + else if (qx.OO.isAvailable("qx.client.NativeWindow") && vActiveChild instanceof qx.client.NativeWindow) + { + this._modalNativeWindow = vActiveChild; + this._getBlocker().setZIndex(1e7); + } +} + +qx.Proto.release = function(vActiveChild) +{ + // this.debug("RELEASE: " + vActiveChild.toHashCode()); + + if (vActiveChild) + { + if (qx.OO.isAvailable("qx.client.NativeWindow") && vActiveChild instanceof qx.client.NativeWindow) + { + this._modalNativeWindow = null; + } + else + { + qx.lang.Array.remove(this._modalWidgets, vActiveChild); + } + } + + var l = this._modalWidgets.length; + if (l == 0) + { + this._getBlocker().hide(); + } + else + { + var oldActiveChild = this._modalWidgets[l-1]; + + var o = oldActiveChild.getZIndex(); + this._getBlocker().setZIndex(o); + oldActiveChild.setZIndex(o+1); + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + CSS API +--------------------------------------------------------------------------- +*/ + +qx.Proto.createStyleElement = function(vCssText) { + return qx.html.StyleSheet.createElement(vCssText); +} + +qx.Proto.addCssRule = function(vSheet, vSelector, vStyle) { + return qx.html.StyleSheet.addRule(vSheet, vSelector, vStyle); +} + +qx.Proto.removeCssRule = function(vSheet, vSelector) { + return qx.html.StyleSheet.removeRule(vSheet, vSelector); +} + +qx.Proto.removeAllCssRules = function(vSheet) { + return qx.html.StyleSheet.removeAllRules(vSheet); +} + + + + + + +/* +--------------------------------------------------------------------------- + CSS FIX +--------------------------------------------------------------------------- +*/ +if (qx.Settings.getValueOfClass("qx.ui.core.ClientDocument", "boxModelCorrection")) { + qx.html.StyleSheet.createElement("html,body{margin:0;border:0;padding:0;}" + + " html{border:0 none;} *{" + qx.core.Client.getInstance().getEngineBoxSizingAttribute() + + ":border-box;} img{" + qx.core.Client.getInstance().getEngineBoxSizingAttribute() + + ":content-box;}"); +} +if (qx.Settings.getValueOfClass("qx.ui.core.ClientDocument", "enableApplicationLayout")) { + qx.html.StyleSheet.createElement("html,body{width:100%;height:100%;overflow:hidden;}"); +} + + + + + +/* +--------------------------------------------------------------------------- + GLOBAL CURSOR SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyGlobalCursor = function(propValue, propOldValue, propData) +{ + if (!this._globalCursorStyleSheet) { + this._globalCursorStyleSheet = this.createStyleElement(); + } + + // Selector based remove does not work with the "*" selector in mshtml + // this.removeCssRule(this._globalCursorStyleSheet, "*"); + + this.removeAllCssRules(this._globalCursorStyleSheet); + + if (propValue) { + this.addCssRule(this._globalCursorStyleSheet, "*", "cursor:" + propValue + " !important"); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + WINDOW RESIZE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._onwindowresize = function(e) +{ + // Hide popups, tooltips, ... + if (qx.OO.isAvailable("qx.manager.object.PopupManager")) { + qx.manager.object.PopupManager.getInstance().update(); + } + + // Update children + this._recomputeInnerWidth(); + this._recomputeInnerHeight(); + + // Flush queues + qx.ui.core.Widget.flushGlobalQueues(); +} + +// This was an idea to allow mozilla more realtime document resize updates +// but it seems so, that mozilla stops javascript execution while the user +// resize windows. Bad. + +/* +qx.Proto._onwindowresizehelper = function() +{ + // Test for changes + var t1 = this._recomputeInnerWidth(); + var t2 = this._recomputeInnerHeight(); + + // Flush queues + if (t1 || t2) { + qx.ui.core.Widget.flushGlobalQueues(); + } +} +*/ + +qx.Proto._computeInnerWidth = function() { + return this._document.body.offsetWidth; +} + +qx.Proto._computeInnerHeight = function() { + return this._document.body.offsetHeight; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + delete this._document; + delete this._modalWidgets; + delete this._modalNativeWindow; + + // Remove Resize Handler + this.removeEventListener("windowresize", this._onwindowresize); + + this._globalCursorStyleSheet = null; + + if (this._blocker) + { + this._blocker.removeEventListener("mousedown", this.blockHelper, this); + this._blocker.removeEventListener("mouseup", this.blockHelper, this); + + this._blocker.dispose(); + this._blocker = null; + } + + /* + if (this._resizeHelper) + { + window.clearInterval(this._resizeHelper); + this._resizeHelper = null; + } + */ + + return qx.ui.layout.CanvasLayout.prototype.dispose.call(this); +} + + + + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ClientDocumentBlocker.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ClientDocumentBlocker.js new file mode 100644 index 0000000000..a49b894009 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ClientDocumentBlocker.js @@ -0,0 +1,41 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) + +************************************************************************ */ + +/*! + qx.ui.core.ClientDocumentBlocker blocks the inputs from the user. + This will be used internally to allow better modal dialogs for example. +*/ +qx.OO.defineClass("qx.ui.core.ClientDocumentBlocker", qx.ui.basic.Terminator, +function() +{ + qx.ui.basic.Terminator.call(this); + + this.setEdge(0); + this.setZIndex(1e8); + this.setDisplay(false); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "blocker" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/Parent.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/Parent.js new file mode 100644 index 0000000000..649971b448 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/Parent.js @@ -0,0 +1,1255 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#optional(qx.event.handler.FocusHandler) +#optional(qx.manager.object.ToolTipManager) +#optional(qx.manager.object.PopupManager) +#optional(qx.html.ElementFromPoint) + +************************************************************************ */ + +/** + * Abstract base class for all widget which have child widgets (e.g. layout manager) + * + * Don't instantiate this class directly. + */ +qx.OO.defineClass("qx.ui.core.Parent", qx.ui.core.Widget, +function() +{ + if (this.classname == qx.ui.core.Parent.ABSTRACT_CLASS) { + throw new Error("Please omit the usage of qx.ui.core.Parent directly. Choose between any widget which inherits from qx.ui.core.Parent and so comes with a layout implementation!"); + } + + qx.ui.core.Widget.call(this); + + // Contains all children + this._children = []; + + // Create instanceof layout implementation + this._layoutImpl = this._createLayoutImpl(); +}); + +qx.ui.core.Parent.ABSTRACT_CLASS = "qx.ui.core.Parent"; + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** Individual focus handler for all child elements. */ +qx.OO.addProperty({ name : "focusHandler", type : "object", instance : "qx.event.handler.FocusHandler" }); + +/** The current active child. */ +qx.OO.addProperty({ name : "activeChild", type : "object", instance : "qx.ui.core.Widget" }); + +/** The current focused child. */ +qx.OO.addProperty({ name : "focusedChild", type : "object", instance : "qx.ui.core.Widget" }); + + + + + +/* +--------------------------------------------------------------------------- + CACHED PRIVATE PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** all visible child widgets */ +qx.OO.addCachedProperty({ name : "visibleChildren", defaultValue : null }); + + + + + + +/* +--------------------------------------------------------------------------- + FOCUS HANDLING +--------------------------------------------------------------------------- +*/ + +/** + * Wether the widget has its own focus handler or uses one of its parent's + * focus handler. + * + * @return {Boolean} wether the widget has its own focus handler + */ +qx.Proto.isFocusRoot = function() { + return this.getFocusHandler() != null; +} + + +/** + * Return the responsible focus handler + * + * @return {qx.event.handler.FocusHandler} + */ +qx.Proto.getFocusRoot = function() +{ + if (this.isFocusRoot()) { + return this; + } + + if(this._hasParent) { + return this.getParent().getFocusRoot(); + } + + return null; +} + + +/** + * Let the widget use its own focus handler + */ +qx.Proto.activateFocusRoot = function() { + this.setFocusHandler(new qx.event.handler.FocusHandler(this)); +} + + +/** + * Delegate keyevent to the focus handler + */ +qx.Proto._onfocuskeyevent = function(e) { + this.getFocusHandler()._onkeyevent(this, e); +} + +qx.Proto._modifyFocusHandler = function(propValue, propOldValue, propData) +{ + if (propValue) + { + // Add Key Handler + this.addEventListener("keydown", this._onfocuskeyevent); + this.addEventListener("keypress", this._onfocuskeyevent); + + // Activate focus handling (but keep already configured tabIndex) + if (this.getTabIndex() < 1) { + this.setTabIndex(1); + } + + // But hide the focus outline + this.setHideFocus(true); + + // Make myself the default + this.setActiveChild(this); + } + else + { + // Remove Key Handler + this.removeEventListener("keydown", this._onfocuskeyevent); + this.removeEventListener("keypress", this._onfocuskeyevent); + + // Deactivate focus handling + this.setTabIndex(-1); + + // Don't hide focus outline + this.setHideFocus(false); + } + + return true; +} + +qx.Proto._modifyFocusedChild = function(propValue, propOldValue, propData) +{ + // this.debug("FocusedChild: " + propValue); + + var vFocusValid = propValue != null; + var vBlurValid = propOldValue != null; + + if (qx.OO.isAvailable("qx.manager.object.PopupManager") && vFocusValid) + { + var vMgr = qx.manager.object.PopupManager.getInstance(); + if (vMgr) { + vMgr.update(propValue); + } + } + + if (vBlurValid) + { + // Dispatch FocusOut + if (propOldValue.hasEventListeners("focusout")) + { + var vEventObject = new qx.event.type.FocusEvent("focusout", propOldValue); + + if (vFocusValid) { + vEventObject.setRelatedTarget(propValue); + } + + propOldValue.dispatchEvent(vEventObject); + vEventObject.dispose(); + } + } + + if (vFocusValid) + { + if (propValue.hasEventListeners("focusin")) + { + // Dispatch FocusIn + var vEventObject = new qx.event.type.FocusEvent("focusin", propValue); + + if (vBlurValid) { + vEventObject.setRelatedTarget(propOldValue); + } + + propValue.dispatchEvent(vEventObject); + vEventObject.dispose(); + } + } + + if (vBlurValid) + { + if (this.getActiveChild() == propOldValue && !vFocusValid) { + this.setActiveChild(null); + } + + propOldValue.setFocused(false); + + // Dispatch Blur + var vEventObject = new qx.event.type.FocusEvent("blur", propOldValue); + + if (vFocusValid) { + vEventObject.setRelatedTarget(propValue); + } + + propOldValue.dispatchEvent(vEventObject); + + if (qx.OO.isAvailable("qx.manager.object.ToolTipManager")) + { + var vMgr = qx.manager.object.ToolTipManager.getInstance(); + if (vMgr) { + vMgr.handleBlur(vEventObject); + } + } + + vEventObject.dispose(); + } + + if (vFocusValid) + { + this.setActiveChild(propValue); + propValue.setFocused(true); + qx.event.handler.EventHandler.getInstance().setFocusRoot(this); + + // Dispatch Focus + var vEventObject = new qx.event.type.FocusEvent("focus", propValue); + + if (vBlurValid) { + vEventObject.setRelatedTarget(propOldValue); + } + + propValue.dispatchEvent(vEventObject); + + if (qx.OO.isAvailable("qx.manager.object.ToolTipManager")) + { + var vMgr = qx.manager.object.ToolTipManager.getInstance(); + if (vMgr) { + vMgr.handleFocus(vEventObject); + } + } + + vEventObject.dispose(); + } + + // Flush Queues + // Do we really need this? + // qx.ui.core.Widget.flushGlobalQueues(); + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._layoutImpl = null; + + +/** + * abstract method. Create layout implementation. + * + * This method must be overwritten by all subclasses + * + * return {qx.renderer.layout.LayoutImpl} + */ +qx.Proto._createLayoutImpl = function() { + return null; +} + +/** + * Return the layout implementation. + * + * return {qx.renderer.layout.LayoutImpl} + */ +qx.Proto.getLayoutImpl = function() { + return this._layoutImpl; +} + + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: MANAGE ALL +--------------------------------------------------------------------------- +*/ + +/** + * Return the array of all children + * + * @return {qx.ui.core.Widget[]} all children + */ +qx.Proto.getChildren = function() { + return this._children; +} + +/** + * Get number of children + * + * @return {Integer} number of children + */ +qx.Proto.getChildrenLength = function() { + return this.getChildren().length; +} + +/** + * Check if the widget has children + * + * @retun {boolean} wether the widget has children + */ +qx.Proto.hasChildren = function() { + return this.getChildrenLength() > 0; +} + +/** + * Check if there are any childrens inside + * + * @return {Boolean} wether the number of children is 0 + */ +qx.Proto.isEmpty = function() { + return this.getChildrenLength() == 0; +} + +/** + * Get the index of a child widget. + * + * @param vChild {qx.ui.core.Widget} + * @return {Integer} index of the child widget + */ +qx.Proto.indexOf = function(vChild) { + return this.getChildren().indexOf(vChild); +} + +/** + * Check if the given widget is a child + * + * @param vWidget {qx.ui.core.Widget} The widget which should be checked. + */ +qx.Proto.contains = function(vWidget) +{ + switch(vWidget) + { + case null: + return false; + + case this: + return true; + + default: + // try the next parent of the widget (recursive until found) + return this.contains(vWidget.getParent()); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: MANAGE VISIBLE ONES + + uses a cached private property +--------------------------------------------------------------------------- +*/ + +/** + * Return the array of all visible children + * (which are configured as visible=true) + * + * @return {qx.ui.core.Widget[]} all visible children + */ +qx.Proto._computeVisibleChildren = function() +{ + var vVisible = []; + var vChildren = this.getChildren(); + var vLength = vChildren.length; + + for (var i=0; i<vLength; i++) + { + var vChild = vChildren[i]; + if (vChild._isDisplayable) { + vVisible.push(vChild); + } + } + + return vVisible; +} + +/*! + Get length of visible children +*/ +qx.Proto.getVisibleChildrenLength = function() { + return this.getVisibleChildren().length; +} + +/*! + Check if the widget has any visible children +*/ +qx.Proto.hasVisibleChildren = function() { + return this.getVisibleChildrenLength() > 0; +} + +/*! + Check if there are any visible childrens inside +*/ +qx.Proto.isVisibleEmpty = function() { + return this.getVisibleChildrenLength() == 0; +} + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: ADD +--------------------------------------------------------------------------- +*/ + +/*! + Add/Append another widget. Allows to add multiple at + one, a parameter could be a widget. +*/ +qx.Proto.add = function() +{ + var vWidget; + + for (var i=0, l=arguments.length; i<l; i++) + { + vWidget = arguments[i]; + + if (!(vWidget instanceof qx.ui.core.Parent) && !(vWidget instanceof qx.ui.basic.Terminator)) + { + throw new Error("Invalid Widget: " + vWidget); + } + else + { + vWidget.setParent(this); + } + } + + return this; +} + +qx.Proto.addAt = function(vChild, vIndex) +{ + if (vIndex == null || vIndex < 0) { + throw new Error("Not a valid index for addAt(): " + vIndex); + } + + if (vChild.getParent() == this) + { + var vChildren = this.getChildren(); + var vOldIndex = vChildren.indexOf(vChild); + + if (vOldIndex != vIndex) + { + if (vOldIndex != -1) { + qx.lang.Array.removeAt(vChildren, vOldIndex); + } + + qx.lang.Array.insertAt(vChildren, vChild, vIndex); + + if (this._initialLayoutDone) + { + this._invalidateVisibleChildren(); + this.getLayoutImpl().updateChildrenOnMoveChild(vChild, vIndex, vOldIndex); + } + } + } + else + { + vChild._insertIndex = vIndex; + vChild.setParent(this); + } +} + +qx.Proto.addAtBegin = function(vChild) { + return this.addAt(vChild, 0); +} + +qx.Proto.addAtEnd = function(vChild) +{ + // we need to fix here, when the child is already inside myself, but + // want to change its position + var vLength = this.getChildrenLength(); + return this.addAt(vChild, vChild.getParent() == this ? vLength - 1 : vLength); +} + +/*! + Add a widget before another already inserted child +*/ +qx.Proto.addBefore = function(vChild, vBefore) +{ + var vChildren = this.getChildren(); + var vTargetIndex = vChildren.indexOf(vBefore); + + if (vTargetIndex == -1) { + throw new Error("Child to add before: " + vBefore + " is not inside this parent."); + } + + var vSourceIndex = vChildren.indexOf(vChild); + + if (vSourceIndex == -1 || vSourceIndex > vTargetIndex) { + vTargetIndex++; + } + + return this.addAt(vChild, Math.max(0, vTargetIndex-1)); +} + +/*! + Add a widget after another already inserted child +*/ +qx.Proto.addAfter = function(vChild, vAfter) +{ + var vChildren = this.getChildren(); + var vTargetIndex = vChildren.indexOf(vAfter); + + if (vTargetIndex == -1) { + throw new Error("Child to add after: " + vAfter + " is not inside this parent."); + } + + var vSourceIndex = vChildren.indexOf(vChild); + + if (vSourceIndex != -1 && vSourceIndex < vTargetIndex) { + vTargetIndex--; + } + + return this.addAt(vChild, Math.min(vChildren.length, vTargetIndex+1)); +} + + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: REMOVE +--------------------------------------------------------------------------- +*/ + +/*! + Remove one or multiple childrens. +*/ +qx.Proto.remove = function() +{ + var vWidget; + + for (var i=0, l=arguments.length; i<l; i++) + { + vWidget = arguments[i]; + + if (!(vWidget instanceof qx.ui.core.Parent) && !(vWidget instanceof qx.ui.basic.Terminator)) + { + throw new Error("Invalid Widget: " + vWidget); + } + else if (vWidget.getParent() == this) + { + vWidget.setParent(null); + } + } +} + +qx.Proto.removeAt = function(vIndex) +{ + var vChild = this.getChildren()[vIndex]; + + if (vChild) + { + delete vChild._insertIndex; + + vChild.setParent(null); + } +} + +/*! + Remove all childrens. +*/ +qx.Proto.removeAll = function() +{ + var cs = this.getChildren(); + var co = cs[0]; + + while (co) + { + this.remove(co); + co = cs[0]; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: FIRST CHILD +--------------------------------------------------------------------------- +*/ + +qx.Proto.getFirstChild = function() { + return qx.lang.Array.getFirst(this.getChildren()); +} + +qx.Proto.getFirstVisibleChild = function() { + return qx.lang.Array.getFirst(this.getVisibleChildren()); +} + +qx.Proto.getFirstActiveChild = function(vIgnoreClasses) { + return qx.ui.core.Widget.getActiveSiblingHelper(null, this, 1, vIgnoreClasses, "first"); +} + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: LAST CHILD +--------------------------------------------------------------------------- +*/ + +qx.Proto.getLastChild = function() { + return qx.lang.Array.getLast(this.getChildren()); +} + +qx.Proto.getLastVisibleChild = function() { + return qx.lang.Array.getLast(this.getVisibleChildren()); +} + +qx.Proto.getLastActiveChild = function(vIgnoreClasses) { + return qx.ui.core.Widget.getActiveSiblingHelper(null, this, -1, vIgnoreClasses, "last"); +} + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT: LOOP UTILS +--------------------------------------------------------------------------- +*/ + +qx.Proto.forEachChild = function(vFunc) +{ + var ch=this.getChildren(), chc, i=-1; + while(chc=ch[++i]) { + vFunc.call(chc, i); + } +} + +qx.Proto.forEachVisibleChild = function(vFunc) +{ + var ch=this.getVisibleChildren(), chc, i=-1; + while(chc=ch[++i]) { + vFunc.call(chc, i); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + APPEAR/DISAPPEAR MESSAGES FOR CHILDREN +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeAppear = function() +{ + qx.ui.core.Widget.prototype._beforeAppear.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._beforeAppear(); + } + }); +} + +qx.Proto._afterAppear = function() +{ + qx.ui.core.Widget.prototype._afterAppear.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._afterAppear(); + } + }); +} + +qx.Proto._beforeDisappear = function() +{ + qx.ui.core.Widget.prototype._beforeDisappear.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._beforeDisappear(); + } + }); +} + +qx.Proto._afterDisappear = function() +{ + qx.ui.core.Widget.prototype._afterDisappear.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._afterDisappear(); + } + }); +} + + + + + + + +/* +--------------------------------------------------------------------------- + INSERTDOM/REMOVEDOM MESSAGES FOR CHILDREN +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeInsertDom = function() +{ + qx.ui.core.Widget.prototype._beforeInsertDom.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._beforeInsertDom(); + } + }); +} + +qx.Proto._afterInsertDom = function() +{ + qx.ui.core.Widget.prototype._afterInsertDom.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._afterInsertDom(); + } + }); +} + +qx.Proto._beforeRemoveDom = function() +{ + qx.ui.core.Widget.prototype._beforeRemoveDom.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._beforeRemoveDom(); + } + }); +} + +qx.Proto._afterRemoveDom = function() +{ + qx.ui.core.Widget.prototype._afterRemoveDom.call(this); + + this.forEachVisibleChild(function() { + if (this.isAppearRelevant()) { + this._afterRemoveDom(); + } + }); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPLAYBLE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._handleDisplayableCustom = function(vDisplayable, vParent, vHint) +{ + this.forEachChild(function() { + this._handleDisplayable(); + }); +} + + + + + + + +/* +--------------------------------------------------------------------------- + STATE QUEUE +--------------------------------------------------------------------------- +*/ + +qx.Proto._addChildrenToStateQueue = function() +{ + this.forEachVisibleChild(function() { + this.addToStateQueue(); + }); +} + +qx.Proto.recursiveAddToStateQueue = function() +{ + this.addToStateQueue(); + + this.forEachVisibleChild(function() { + this.recursiveAddToStateQueue(); + }); +} + +qx.Proto._recursiveAppearanceThemeUpdate = function(vNewAppearanceTheme, vOldAppearanceTheme) +{ + qx.ui.core.Widget.prototype._recursiveAppearanceThemeUpdate.call(this, vNewAppearanceTheme, vOldAppearanceTheme); + + this.forEachVisibleChild(function() { + this._recursiveAppearanceThemeUpdate(vNewAppearanceTheme, vOldAppearanceTheme); + }); +} + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN QUEUE +--------------------------------------------------------------------------- +*/ + +qx.Proto._addChildToChildrenQueue = function(vChild) +{ + if (!vChild._isInParentChildrenQueue && !vChild._isDisplayable) { + this.warn("Ignoring invisible child: " + vChild); + } + + if (!vChild._isInParentChildrenQueue && vChild._isDisplayable) + { + qx.ui.core.Widget.addToGlobalLayoutQueue(this); + + if (!this._childrenQueue) { + this._childrenQueue = {}; + } + + this._childrenQueue[vChild.toHashCode()] = vChild; + } +} + +qx.Proto._removeChildFromChildrenQueue = function(vChild) +{ + if (this._childrenQueue && vChild._isInParentChildrenQueue) + { + delete this._childrenQueue[vChild.toHashCode()]; + + if (qx.lang.Object.isEmpty(this._childrenQueue)) { + qx.ui.core.Widget.removeFromGlobalLayoutQueue(this); + } + } +} + +qx.Proto._flushChildrenQueue = function() +{ + if (!qx.lang.Object.isEmpty(this._childrenQueue)) + { + this.getLayoutImpl().flushChildrenQueue(this._childrenQueue); + delete this._childrenQueue; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT QUEUE +--------------------------------------------------------------------------- +*/ + +qx.Proto._addChildrenToLayoutQueue = function(p) +{ + this.forEachChild(function() { + this.addToLayoutChanges(p); + }); +} + +qx.Proto._layoutChild = function(vChild) +{ + if (!vChild._isDisplayable) + { + this.warn("Want to render an invisible child: " + vChild + " -> omitting!"); + return; + } + + // APPLY LAYOUT + var vChanges = vChild._layoutChanges; + + // this.debug("Layouting " + vChild + ": " + qx.lang.Object.getKeysAsString(vChanges)); + + try + { + if (vChanges.borderX) { + this._applyBorderX(vChild, vChanges); + } + + if (vChanges.borderY) { + this._applyBorderY(vChild, vChanges); + } + } + catch(ex) + { + this.error("Could not apply border to child " + vChild, ex); + } + + try + { + if (vChanges.paddingLeft || vChanges.paddingRight) { + vChild._applyPaddingX(this, vChanges); + } + + if (vChanges.paddingTop || vChanges.paddingBottom) { + vChild._applyPaddingY(this, vChanges); + } + } + catch(ex) + { + this.error("Could not apply padding to child " + vChild, ex); + } + + + // WRAP TO LAYOUT ENGINE + try + { + this.getLayoutImpl().layoutChild(vChild, vChanges); + } + catch(ex) + { + this.error("Could not layout child " + vChild + " through layout handler", ex); + } + + + // POST LAYOUT + try + { + vChild._layoutPost(vChanges); + } + catch(ex) + { + this.error("Could not post layout child " + vChild, ex); + } + + + // DISPLAY DOM NODE + try + { + // insert dom node (if initial flag enabled) + if (vChanges.initial) + { + vChild._initialLayoutDone = true; + qx.ui.core.Widget.addToGlobalDisplayQueue(vChild); + } + } + catch(ex) + { + this.error("Could not handle display updates from layout flush for child " + vChild, ex); + } + + + // CLEANUP + vChild._layoutChanges = {}; + + delete vChild._isInParentLayoutQueue; + delete this._childrenQueue[vChild.toHashCode()]; +} + +qx.Proto._layoutPost = qx.lang.Function.returnTrue; + +/*! + Fix Operas Rendering Bugs +*/ +if (qx.core.Client.getInstance().isOpera()) +{ + qx.Proto._layoutChildOrig = qx.Proto._layoutChild; + + qx.Proto._layoutChild = function(vChild) + { + if (!vChild._initialLayoutDone || !vChild._layoutChanges.borderX || !vChild._layoutChanges.borderY) { + return this._layoutChildOrig(vChild); + } + + var vStyle = vChild.getElement().style; + + var vOldDisplay = vStyle.display; + vStyle.display = "none"; + var vRet = this._layoutChildOrig(vChild); + vStyle.display = vOldDisplay; + + return vRet; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DIMENSION CACHE +--------------------------------------------------------------------------- +*/ + +qx.Proto._computePreferredInnerWidth = function() { + return this.getLayoutImpl().computeChildrenNeededWidth(); +} + +qx.Proto._computePreferredInnerHeight = function() { + return this.getLayoutImpl().computeChildrenNeededHeight(); +} + +qx.Proto._changeInnerWidth = function(vNew, vOld) +{ + var vLayout = this.getLayoutImpl(); + + if (vLayout.invalidateChildrenFlexWidth) { + vLayout.invalidateChildrenFlexWidth(); + } + + this.forEachVisibleChild(function() + { + if (vLayout.updateChildOnInnerWidthChange(this) && this._recomputeBoxWidth()) + { + this._recomputeOuterWidth(); + this._recomputeInnerWidth(); + } + }); +} + +qx.Proto._changeInnerHeight = function(vNew, vOld) +{ + var vLayout = this.getLayoutImpl(); + + if (vLayout.invalidateChildrenFlexHeight) { + vLayout.invalidateChildrenFlexHeight(); + } + + this.forEachVisibleChild(function() + { + if (vLayout.updateChildOnInnerHeightChange(this) && this._recomputeBoxHeight()) + { + this._recomputeOuterHeight(); + this._recomputeInnerHeight(); + } + }); +} + +qx.Proto.getInnerWidthForChild = function(vChild) { + return this.getInnerWidth(); +} + +qx.Proto.getInnerHeightForChild = function(vChild) { + return this.getInnerHeight(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + WIDGET FROM POINT SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getWidgetFromPointHelper = function(x, y) +{ + var ch = this.getChildren(); + + for (var chl=ch.length, i=0; i<chl; i++) { + if (qx.html.ElementFromPoint.getElementAbsolutePointChecker(ch[i].getElement(), x, y)) { + return ch[i].getWidgetFromPointHelper(x, y); + } + } + + return this; +} + + + + + + + +/* +--------------------------------------------------------------------------- + CLONE +--------------------------------------------------------------------------- +*/ + +qx.Proto._cloneRecursive = function(cloneInstance) +{ + var ch = this.getChildren(); + var chl = ch.length; + var cloneChild; + + for (var i=0; i<chl; i++) + { + cloneChild = ch[i].clone(true); + cloneInstance.add(cloneChild); + } +} + + + + + +/* +--------------------------------------------------------------------------- + REMAPPING +--------------------------------------------------------------------------- +*/ + +qx.Proto._remappingChildTable = [ "add", "remove", "addAt", "addAtBegin", "addAtEnd", "removeAt", "addBefore", "addAfter", "removeAll" ]; +qx.Proto._remapStart = "return this._remappingChildTarget."; +qx.Proto._remapStop = ".apply(this._remappingChildTarget, arguments)"; + +qx.Proto.remapChildrenHandlingTo = function(vTarget) +{ + var t = this._remappingChildTable; + + this._remappingChildTarget = vTarget; + + for (var i=0, l=t.length, s; i<l; i++) { + s = t[i]; this[s] = new Function(qx.ui.core.Parent.prototype._remapStart + s + qx.ui.core.Parent.prototype._remapStop); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._layoutImpl) + { + this._layoutImpl.dispose(); + this._layoutImpl = null; + } + + for (var i in this._childrenQueue) { + delete this._childrenQueue[i]; + } + + this._childrenQueue = null; + this._remappingChildTable = null; + this._remappingChildTarget = null; + + if (this._children) + { + var chl = this._children.length; + + for (var i=chl-1; i>=0; i--) + { + this._children[i].dispose(); + this._children[i] = null; + } + + this._children = null; + } + + delete this._cachedVisibleChildren; + + // Remove Key Handler + if (this.getFocusHandler()) + { + this.removeEventListener("keydown", this._onfocuskeyevent); + this.removeEventListener("keypress", this._onfocuskeyevent); + + this.forceFocusHandler(null); + } + + return qx.ui.core.Widget.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ScrollBar.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ScrollBar.js new file mode 100644 index 0000000000..51337b36a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/ScrollBar.js @@ -0,0 +1,262 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * A scroll bar. + * + * @param horizontal {Boolean ? false} whether the scroll bar should be + * horizontal. If false it will be vertical. + */ +qx.OO.defineClass("qx.ui.core.ScrollBar", qx.ui.layout.BoxLayout, +function(horizontal) { + qx.ui.layout.BoxLayout.call(this, horizontal ? "horizontal" : "vertical"); + + this._horizontal = (horizontal == true); + + this._scrollBar = new qx.ui.layout.CanvasLayout; + if (qx.core.Client.getInstance().isGecko()) { + // NOTE: We have to force not using position:absolute, because this causes + // strange looking scrollbars in some cases (e.g. in Firefox under + // Linux the horizontal scrollbar is too high) + this._scrollBar.setStyleProperty("position", ""); + } + this._scrollBar.setOverflow(horizontal ? "scrollX" : "scrollY"); + this._scrollBar.enableInlineEvent("scroll"); + this._scrollBar.addEventListener("scroll", this._onscroll, this); + + this._scrollContent = new qx.ui.basic.Terminator; + if (qx.core.Client.getInstance().isGecko()) { + this._scrollContent.setStyleProperty("position", ""); + } + this._scrollBar.add(this._scrollContent); + + if (this._horizontal) { + this._scrollContent.setHeight(5); + this._scrollBar.setWidth("100%"); + this._scrollBar.setHeight(this._getScrollBarWidth()); + + // IE needs that the scrollbar element has a width of +1 + if (qx.core.Client.getInstance().isMshtml()) { + this.setHeight(this._getScrollBarWidth()); + this.setOverflow("hidden"); + this._scrollBar.setHeight(this._getScrollBarWidth() + 1); + this._scrollBar.setTop(-1); + } + } else { + this._scrollContent.setWidth(5); + this._scrollBar.setHeight("100%"); + this._scrollBar.setWidth(this._getScrollBarWidth()); + + // IE needs that the scrollbar element has a width of +1 + if (qx.core.Client.getInstance().isMshtml()) { + this.setWidth(this._getScrollBarWidth()); + this.setOverflow("hidden"); + this._scrollBar.setWidth(this._getScrollBarWidth() + 1); + this._scrollBar.setLeft(-1); + } + } + + this.add(this._scrollBar); + + this.setMaximum(0); +}); + +/** + * The current value of the scroll bar. This value is between 0 and + * (maxium - size), where size is the width of a horizontal resp. the height of + * a vertical scroll bar in pixels. + * + * @see #maximum + */ +qx.OO.addProperty({ name:"value", type:"number", defaultValue:0, allowNull:false }); + +/** + * The maximum value of the scroll bar. Note that the size of the scroll bar is + * substracted. + * + * @see #value + */ +qx.OO.addProperty({ name:"maximum", type:"number", allowNull:false }); + +/** + * Whether to merge consecutive scroll event. If true, events will be collected + * until the user stops scrolling, so the scroll bar itself will move smoothly + * and the scrolled content will update asynchroniously. + */ +qx.OO.addProperty({ name:"mergeEvents", type:"boolean", defaultValue:false, allowNull:false }); + + +// property checker +qx.Proto._checkValue = function(propValue, propData) { + var innerSize = !this.getElement() ? 0 : + (this._horizontal ? this.getInnerWidth() : this.getInnerHeight()); + + // NOTE: We can't use Number.limit here because our maximum may get negative + // (when the scrollbar isn't needed). In this case Number.limit returns + // this negative maximum instead of 0. But we need that the minimum is + // stronger than the maximum. + // -> We use Math.max and Math.min + return Math.max(0, Math.min(this.getMaximum() - innerSize, propValue)); +} + + +// property modifier +qx.Proto._modifyValue = function(propValue, propOldValue, propData) { + if (! this._internalValueChange && this._isCreated) { + this._positionKnob(propValue); + } + return true; +} + + +// property modifier +qx.Proto._modifyMaximum = function(propValue, propOldValue, propData) { + if (this._horizontal) { + this._scrollContent.setWidth(propValue); + } else { + this._scrollContent.setHeight(propValue); + } + + // recheck the value + this.setValue(this._checkValue(this.getValue())); + + return true; +} + + +// property modifier +qx.Proto._modifyVisibility = function(propValue, propOldValue, propData) { + if (! propValue) { + this._positionKnob(0); + } else { + this._positionKnob(this.getValue()); + } + + return qx.ui.layout.BoxLayout.prototype._modifyVisibility.call(this, propValue, propOldValue, propData); +}; + + +// overridden +qx.Proto._computePreferredInnerWidth = function() { + return this._horizontal ? 0 : this._getScrollBarWidth(); +} + + +// overridden +qx.Proto._computePreferredInnerHeight = function() { + return this._horizontal ? this._getScrollBarWidth() : 0; +} + + +/** + * Gets the width of vertical scroll bar. + * + * @return {Integer} the width in pixels. + */ +qx.Proto._getScrollBarWidth = function() { + // Auto-detect the scrollbar width + if (qx.ui.core.ScrollBar._scrollBarWidth == null) { + var dummy = document.createElement("div"); + dummy.style.width = "100px"; + dummy.style.height = "100px"; + dummy.style.overflow = "scroll"; + dummy.style.visibility = "hidden"; + document.body.appendChild(dummy); + qx.ui.core.ScrollBar._scrollBarWidth = dummy.offsetWidth - dummy.clientWidth; + document.body.removeChild(dummy); + } + return qx.ui.core.ScrollBar._scrollBarWidth; +} + + +/** + * Event handler. Called when the user scrolled. + * + * @param evt {Map} the event. + */ +qx.Proto._onscroll = function(evt) { + var value = this._horizontal ? this._scrollBar.getScrollLeft() : this._scrollBar.getScrollTop(); + if (this.getMergeEvents()) { + this._lastScrollEventValue = value; + window.clearTimeout(this._setValueTimerId); + var self = this; + this._setValueTimerId = window.setTimeout(function() { + self._internalValueChange = true; + self.setValue(self._lastScrollEventValue); + self._internalValueChange = false; + qx.ui.core.Widget.flushGlobalQueues(); + }, qx.ui.core.ScrollBar.EVENT_DELAY); + } else { + this._internalValueChange = true; + this.setValue(value); + this._internalValueChange = false; + qx.ui.core.Widget.flushGlobalQueues(); + } +} + + +/** + * Positions the scroll bar knob at a certain value. + * + * @param value {Integer} The value where to postion the scroll bar. + */ +qx.Proto._positionKnob = function(value) { + if (this._horizontal) { + this._scrollBar.setScrollLeft(value); + } else { + this._scrollBar.setScrollTop(value); + } +} + + +// overridden +qx.Proto._afterAppear = function() { + qx.ui.layout.BoxLayout.prototype._afterAppear.call(this); + + //this.debug("Setting to value: " + this.getValue()); + this._positionKnob(this.getValue()); +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return; + } + + if (this._scrollContent) { + this._scrollContent.dispose(); + this._scrollContent = null; + } + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} + + +/** + * The delay when to update the scroll bar value after a scroll event if + * {@link #mergeEvents} is true (in milliseconds). All scroll events that arrive + * in shorter time will be merged. + */ +qx.Class.EVENT_DELAY = 250; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/Widget.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/Widget.js new file mode 100644 index 0000000000..4ee1b97b55 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/core/Widget.js @@ -0,0 +1,5726 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.renderer.color.ColorCache) +#require(qx.renderer.border.BorderCache) +#require(qx.manager.object.AppearanceManager) +#after(qx.component.init.InterfaceInitComponent) +#optional(qx.ui.core.Parent) +#optional(qx.ui.form.Button) +#optional(qx.client.Timer) +#optional(qx.client.Command) +#optional(qx.ui.popup.ToolTip) +#optional(qx.ui.menu.Menu) +#optional(qx.ui.basic.Inline) + +************************************************************************ */ + +/** + * This is the main widget, all visible objects in the application extend this. + * + * @event beforeAppear {qx.event.type.Event} + * @event appear {qx.event.type.Event} + * @event beforeDisappear {qx.event.type.Event} + * @event disappear {qx.event.type.Event} + * @event beforeInsertDom {qx.event.type.Event} + * @event insertDom {qx.event.type.Event} + * @event beforeRemoveDom {qx.event.type.Event} + * @event removeDom {qx.event.type.Event} + * @event create {qx.event.type.Event} + * @event execute {qx.event.type.Event} + * @event FADE_FINISHED {qx.event.type.DataEvent} + * @event mouseover {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event mousemove {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event mouseout {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event mousedown {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event mouseup {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event mousewheel {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event click {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event dblclick {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event contextmenu {qx.event.type.MouseEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event keydown {qx.event.type.KeyEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event keypress {qx.event.type.KeyEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event keyinput {qx.event.type.KeyEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event keyup {qx.event.type.KeyEvent} (Fired by {@link qx.event.handler.EventHandler}) + * @event focusout {qx.event.type.FocusEvent} (Fired by {@link qx.ui.core.Parent}) + * @event focusin {qx.event.type.FocusEvent} (Fired by {@link qx.ui.core.Parent}) + * @event blur {qx.event.type.FocusEvent} (Fired by {@link qx.ui.core.Parent}) + * @event focus {qx.event.type.FocusEvent} (Fired by {@link qx.ui.core.Parent}) + * @event dragdrop {qx.event.type.DragEvent} (Fired by {@link qx.event.handler.DragAndDropHandler}) + * @event dragout {qx.event.type.DragEvent} (Fired by {@link qx.event.handler.DragAndDropHandler}) + * @event dragover {qx.event.type.DragEvent} (Fired by {@link qx.event.handler.DragAndDropHandler}) + * @event dragmove {qx.event.type.DragEvent} (Fired by {@link qx.event.handler.DragAndDropHandler}) + * @event dragstart {qx.event.type.DragEvent} (Fired by {@link qx.event.handler.DragAndDropHandler}) + * @event dragend {qx.event.type.DragEvent} (Fired by {@link qx.event.handler.DragAndDropHandler}) + */ +qx.OO.defineClass("qx.ui.core.Widget", qx.core.Target, +function() +{ + if (this.classname == qx.ui.core.Widget.ABSTRACT_CLASS) { + throw new Error("Please omit the usage of qx.ui.core.Widget directly. Choose between qx.ui.core.Parent and qx.ui.basic.Terminator instead!"); + } + + qx.core.Target.call(this, true); + + + // ************************************************************************ + // HTML MAPPING DATA STRUCTURES + // ************************************************************************ + // Allows the user to setup styles and attributes without a + // need to have the target element created already. + /* + this._htmlProperties = { className : this.classname } + this._htmlAttributes = { qxhashcode : this._hashCode } + */ + this._styleProperties = { position : "absolute" } + + + // ************************************************************************ + // LAYOUT CHANGES + // ************************************************************************ + this._layoutChanges = {}; + + + // ************************************************************************ + // APPEARANCE + // ************************************************************************ + this._states = {}; + this._applyInitialAppearance(); +}); + +qx.Class.ABSTRACT_CLASS = "qx.ui.core.Widget"; + +// Will be calculated later (TODO: Move to qx.Dom?) +qx.Class.SCROLLBAR_SIZE = 16; + + + + + +/* +--------------------------------------------------------------------------- + DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +qx.Settings.setDefault("enableQueueDebug", false); + + + + + + +/* +--------------------------------------------------------------------------- + BASIC PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The parent widget (the real object, no ID or something) +*/ +qx.OO.addProperty({ name : "parent", type : "object", instance : "qx.ui.core.Parent", defaultValue : null }); + +/*! + The element node (if the widget is created, otherwise null) +*/ +qx.OO.addProperty({ name : "element" }); + +/*! + Simple and fast switch of the visibility of a widget. +*/ +qx.OO.addProperty({ name : "visibility", type : "boolean", defaultValue : true }); + +/*! + If the widget should be displayed. Use this property instead of visibility if the change + in visibility should have effects on the parent widget. +*/ +qx.OO.addProperty({ name : "display", type : "boolean", defaultValue : true }); + +/*! + If you switch this to true, the widget doesn't handle + events directly. It will redirect them to the parent + widget. +*/ +qx.OO.addProperty({ name : "anonymous", type : "boolean", defaultValue : false, getAlias : "isAnonymous" }); + +/*! + The tagname of the element which should automatically be created +*/ +qx.OO.addProperty({ name : "tagName", type : "string", defaultValue : "div" }); + +/*! + This is used by many layout managers to control the individual horizontal alignment of this widget inside this parent. + + This should be used with caution since in some cases + this might give unrespected results. +*/ +qx.OO.addProperty({ name : "horizontalAlign", type : "string" }); + +/*! + This is used by many layout managers to control the individual vertical alignment of this widget inside this parent. + + This should be used with caution since in some cases + this might give unrespected results. +*/ +qx.OO.addProperty({ name : "verticalAlign", type : "string" }); + +/*! + Should this widget be stretched on the x-axis if the layout handler will do this? + Used by some layout handlers (qx.ui.layout.BoxLayout, ...). +*/ +qx.OO.addProperty({ name : "allowStretchX", type : "boolean", defaultValue : true }); + +/*! + Should this widget be stretched on the y-axis if the layout handler will do this? + Used by some layout handlers (qx.ui.layout.BoxLayout, ...). +*/ +qx.OO.addProperty({ name : "allowStretchY", type : "boolean", defaultValue : true }); + + + + + + +/* +--------------------------------------------------------------------------- + STYLE PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Mapping to native style property z-index. + + This should be used with caution since in some cases + this might give unrespected results. +*/ +qx.OO.addProperty({ name : "zIndex", type : "number" }); + +/*! + The backgroundColor style property of the rendered widget. + As input are allowed any instance of qx.renderer.color.Color or a string which defines the color itself. +*/ +qx.OO.addProperty({ name : "backgroundColor", type : "object", instance : "qx.renderer.color.Color", convert : qx.renderer.color.ColorCache, allowMultipleArguments : true }); + +/*! + The color style property of the rendered widget. + As input are allowed any instance of qx.renderer.color.Color or a string which defines the color itself. +*/ +qx.OO.addProperty({ name : "color", type : "object", instance : "qx.renderer.color.Color", convert : qx.renderer.color.ColorCache, allowMultipleArguments : true }); + +/*! + The border property describes how to paint the border on the widget. + + This should be used with caution since in some cases (mostly complex widgets) + this might give unrespected results. +*/ +qx.OO.addProperty({ name : "border", type : "object", instance : "qx.renderer.border.Border", convert : qx.renderer.border.BorderCache, allowMultipleArguments : true }); + +/*! + Mapping to native style property opacity. + + The uniform opacity setting to be applied across an entire object. Behaves like the new CSS-3 Property. + Any values outside the range 0.0 (fully transparent) to 1.0 (fully opaque) will be clamped to this range. +*/ +qx.OO.addProperty({ name : "opacity", type : "number" }); + +/*! + Mapping to native style property cursor. + + The name of the cursor to show when the mouse pointer is over the widget. + This is any valid CSS2 cursor name defined by W3C. + + The following values are possible: + <ul><li>default</li> + <li>crosshair</li> + <li>pointer (hand is the ie name and will mapped to pointer in non-ie).</li> + <li>move</li> + <li>n-resize</li> + <li>ne-resize</li> + <li>e-resize</li> + <li>se-resize</li> + <li>s-resize</li> + <li>sw-resize</li> + <li>w-resize</li> + <li>nw-resize</li> + <li>text</li> + <li>wait</li> + <li>help </li> + <li>url([file]) = self defined cursor, file should be an ANI- or CUR-type</li> + </ul> +*/ +qx.OO.addProperty({ name : "cursor", type : "string" }); + +/*! + Mapping to native style property background-image. + + The URI of the image file to use as background image. +*/ +qx.OO.addProperty({ name : "backgroundImage", type : "string" }); + +/** + * Describes how to handle content that is too large to fit inside the widget. + * + * Overflow modes: + * <table> + * <tr><th>hidden</th><td>The content is clipped</td></tr> + * <tr><th>auto</th><td>Scroll bars are shown as needed</td></tr> + * <tr><th>scroll</th><td>Scroll bars are always shown. Even if there is enough room for the content inside the widget.</td></tr> + * <tr><th>scrollX</th><td>Scroll bars for the X-Axis are always shown. Even if there is enough room for the content inside the widget.</td></tr> + * <tr><th>scrollY</th><td>Scroll bars for the Y-Axis are always shown. Even if there is enough room for the content inside the widget.</td></tr> + * </table> + */ +qx.OO.addProperty({ name : "overflow", type : "string", addToQueue : true }); + +/*! + Clipping of the widget (left) +*/ +qx.OO.addProperty({ name : "clipLeft", type : "number", impl : "clip" }); + +/*! + Clipping of the widget (top) +*/ +qx.OO.addProperty({ name : "clipTop", type : "number", impl : "clip" }); + +/*! + Clipping of the widget (width) +*/ +qx.OO.addProperty({ name : "clipWidth", type : "number", impl : "clip" }); + +/*! + Clipping of the widget (height) +*/ +qx.OO.addProperty({ name : "clipHeight", type : "number", impl : "clip" }); + + + + + + + +/* +--------------------------------------------------------------------------- + MANAGMENT PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Set this to a positive value makes the widget able to get the focus. + It even is reachable through the usage of the tab-key. + + Widgets with the same tabIndex are handled through there position + in the document. +*/ +qx.OO.addProperty({ name : "tabIndex", type : "number", defaultValue : -1 }); + +/*! + If the focus outline should be hidden. +*/ +qx.OO.addProperty({ name : "hideFocus", type : "boolean", defaultValue : false }); + +/*! + Use DOM focussing (focus() and blur() methods of DOM nodes) +*/ +qx.OO.addProperty({ name : "enableElementFocus", type : "boolean", defaultValue : true }); + +/*! + Handle focus state of this widget. + + someWidget.setFocused(true) set the current focus to this widget. + someWidget.setFocused(false) remove the current focus and leave it blank. + + Normally you didn't need to set this directly. +*/ +qx.OO.addProperty({ name : "focused", type : "boolean", defaultValue : false }); + +/*! + Toggle the possibility to select the element of this widget. +*/ +qx.OO.addProperty({ name : "selectable", type : "boolean", defaultValue : true, getAlias : "isSelectable" }); + +/*! + Contains the tooltip object connected to the widget. +*/ +qx.OO.addProperty({ name : "toolTip", type : "object", instance : "qx.ui.popup.ToolTip" }); + +/*! + Contains the context menu object connected to the widget. (Need real implementation) +*/ +qx.OO.addProperty({ name : "contextMenu", type : "object", instance : "qx.ui.menu.Menu" }); + +/*! + Capture all events and map them to this widget +*/ +qx.OO.addProperty({ name : "capture", type : "boolean", defaultValue : false }); + +/*! + Contains the support drop types for drag and drop support +*/ +qx.OO.addProperty({ name : "dropDataTypes" }); + +/*! + A command called if the widget should be excecuted (a placeholder for buttons, ...) +*/ +qx.OO.addProperty({ name : "command", type : "object", instance : "qx.client.Command" }); + +/*! + Appearance of the widget +*/ +qx.OO.addProperty({ name : "appearance", type : "string" }); + + + + + + +/* +--------------------------------------------------------------------------- + MARGIN/PADDING PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Margin of the widget (top) +*/ +qx.OO.addProperty({ name : "marginTop", type : "number", addToQueue : true, impl : "marginY" }); + +/*! + Margin of the widget (right) +*/ +qx.OO.addProperty({ name : "marginRight", type : "number", addToQueue : true, impl : "marginX" }); + +/*! + Margin of the widget (bottom) +*/ +qx.OO.addProperty({ name : "marginBottom", type : "number", addToQueue : true, impl : "marginY" }); + +/*! + Margin of the widget (left) +*/ +qx.OO.addProperty({ name : "marginLeft", type : "number", addToQueue : true, impl : "marginX" }); + + +/*! + Padding of the widget (top) +*/ +qx.OO.addProperty({ name : "paddingTop", type : "number", addToQueue : true, impl : "paddingY" }); + +/*! + Padding of the widget (right) +*/ +qx.OO.addProperty({ name : "paddingRight", type : "number", addToQueue : true, impl : "paddingX" }); + +/*! + Padding of the widget (bottom) +*/ +qx.OO.addProperty({ name : "paddingBottom", type : "number", addToQueue : true, impl : "paddingY" }); + +/*! + Padding of the widget (left) +*/ +qx.OO.addProperty({ name : "paddingLeft", type : "number", addToQueue : true, impl : "paddingX" }); + + + + + + + +/* +--------------------------------------------------------------------------- + HORIZONAL DIMENSION PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The distance from the outer left border to the parent left area edge. + + You could only set two of the three horizonal dimension properties (boxLeft, boxRight, boxWidth) + at the same time. This will be omitted during the setup of the new third value. To reset a value + you didn't want anymore, set it to null. +*/ +qx.OO.addProperty({ name : "left", addToQueue : true, unitDetection : "pixelPercent" }); + +/*! + The distance from the outer right border to the parent right area edge. + + You could only set two of the three horizonal dimension properties (boxLeft, boxRight, boxWidth) + at the same time. This will be omitted during the setup of the new third value. To reset a value + you didn't want anymore, set it to null. +*/ +qx.OO.addProperty({ name : "right", addToQueue : true, unitDetection : "pixelPercent" }); + +/*! + The width of the box (including padding and border). + + You could only set two of the three horizonal dimension properties (boxLeft, boxRight, boxWidth) + at the same time. This will be omitted during the setup of the new third value. To reset a value + you didn't want anymore, set it to null. +*/ +qx.OO.addProperty({ name : "width", addToQueue : true, unitDetection : "pixelPercentAutoFlex" }); + +/*! + The minimum width of the box (including padding and border). + + Set this to omit the shrinking of the box width under this value. +*/ +qx.OO.addProperty({ name : "minWidth", addToQueue : true, unitDetection : "pixelPercentAuto" }); + +/*! + The maximum width of the box (including padding and border). + + Set this to omit the expanding of the box width above this value. +*/ +qx.OO.addProperty({ name : "maxWidth", addToQueue : true, unitDetection : "pixelPercentAuto" }); + + + + + + + +/* +--------------------------------------------------------------------------- + VERTICAL DIMENSION PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The distance from the outer top border to the parent top area edge. + + You could only set two of the three vertical dimension properties (boxTop, boxBottom, boxHeight) + at the same time. This will be omitted during the setup of the new third value. To reset a value + you didn't want anymore, set it to null. +*/ +qx.OO.addProperty({ name : "top", addToQueue : true, unitDetection : "pixelPercent" }); + +/*! + The distance from the outer bottom border to the parent bottom area edge. + + You could only set two of the three vertical dimension properties (boxTop, boxBottom, boxHeight) + at the same time. This will be omitted during the setup of the new third value. To reset a value + you didn't want anymore, set it to null. +*/ +qx.OO.addProperty({ name : "bottom", addToQueue : true, unitDetection : "pixelPercent" }); + +/*! + The height of the box (including padding and border). + + You could only set two of the three vertical dimension properties (boxTop, boxBottom, boxHeight) + at the same time. This will be omitted during the setup of the new third value. To reset a value + you didn't want anymore, set it to null. +*/ +qx.OO.addProperty({ name : "height", addToQueue : true, unitDetection : "pixelPercentAutoFlex" }); + +/*! + The minimum height of the box (including padding and border). + + Set this to omit the shrinking of the box height under this value. +*/ +qx.OO.addProperty({ name : "minHeight", addToQueue : true, unitDetection : "pixelPercentAuto" }); + +/*! + The maximum height of the box (including padding and border). + + Set this to omit the expanding of the box height above this value. +*/ +qx.OO.addProperty({ name : "maxHeight", addToQueue : true, unitDetection : "pixelPercentAuto" }); + + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTY GROUPS +--------------------------------------------------------------------------- +*/ + +qx.OO.addPropertyGroup({ name : "location", members : [ "left", "top" ]}); +qx.OO.addPropertyGroup({ name : "dimension", members : [ "width", "height" ]}); + +qx.OO.addPropertyGroup({ name : "space", members : [ "left", "width", "top", "height" ]}); +qx.OO.addPropertyGroup({ name : "edge", members : [ "top", "right", "bottom", "left" ], mode : "shorthand" }); + +qx.OO.addPropertyGroup({ name : "padding", members : [ "paddingTop", "paddingRight", "paddingBottom", "paddingLeft" ], mode: "shorthand" }); +qx.OO.addPropertyGroup({ name : "margin", members : [ "marginTop", "marginRight", "marginBottom", "marginLeft" ], mode: "shorthand" }); + +qx.OO.addPropertyGroup({ name : "heights", members : [ "minHeight", "height", "maxHeight" ]}); +qx.OO.addPropertyGroup({ name : "widths", members : [ "minWidth", "width", "maxWidth" ]}); + +qx.OO.addPropertyGroup({ name : "align", members : [ "horizontalAlign", "verticalAlign" ]}); +qx.OO.addPropertyGroup({ name : "stretch", members : [ "stretchX", "stretchY" ]}); + +qx.OO.addPropertyGroup({ name : "clipLocation", members : [ "clipLeft", "clipTop" ]}); +qx.OO.addPropertyGroup({ name : "clipDimension", members : [ "clipWidth", "clipHeight" ]}); +qx.OO.addPropertyGroup({ name : "clip", members : [ "clipLeft", "clipTop", "clipWidth", "clipHeight" ]}); + + + + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + ALL QUEUES +--------------------------------------------------------------------------- +*/ + +/** + * Flush all global queues + */ +qx.ui.core.Widget.flushGlobalQueues = function() {}; + +if (qx.Settings.getValueOfClass("qx.ui.core.Widget", "enableQueueDebug")) +{ + qx.ui.core.Widget.flushGlobalQueues = function() + { + if (qx.ui.core.Widget._inFlushGlobalQueues || !qx.core.Init.getInstance().getComponent().isUiReady()) { + return; + } + + if (!(qx.ui.core.Widget._globalWidgetQueue.length > 0 || qx.ui.core.Widget._globalElementQueue.length > 0 || + qx.ui.core.Widget._globalStateQueue.length > 0 || qx.ui.core.Widget._globalJobQueue.length > 0 || + qx.ui.core.Widget._globalLayoutQueue.length > 0 || qx.ui.core.Widget._fastGlobalDisplayQueue.length > 0 || + !qx.lang.Object.isEmpty(qx.ui.core.Widget._lazyGlobalDisplayQueue))) { + return; + } + + var globalWidgetQueueLength = qx.ui.core.Widget._globalWidgetQueue.length; + var globalElementQueueLength = qx.ui.core.Widget._globalElementQueue.length; + var globalStateQueueLength = qx.ui.core.Widget._globalStateQueue.length; + var globalJobQueueLength = qx.ui.core.Widget._globalJobQueue.length; + var globalLayoutQueueLength = qx.ui.core.Widget._globalLayoutQueue.length; + var fastGlobalDisplayQueueLength = qx.ui.core.Widget._fastGlobalDisplayQueue.length; + var lazyGlobalDisplayQueueLength = qx.ui.core.Widget._lazyGlobalDisplayQueue ? qx.ui.core.Widget._lazyGlobalDisplayQueue.length : 0; + + // Also used for inline event handling to seperate 'real' events + qx.ui.core.Widget._inFlushGlobalQueues = true; + + var vStart; + + vStart = (new Date).valueOf(); + qx.ui.core.Widget.flushGlobalWidgetQueue(); + var vWidgetDuration = (new Date).valueOf() - vStart; + + vStart = (new Date).valueOf(); + qx.ui.core.Widget.flushGlobalStateQueue(); + var vStateDuration = (new Date).valueOf() - vStart; + + vStart = (new Date).valueOf(); + qx.ui.core.Widget.flushGlobalElementQueue(); + var vElementDuration = (new Date).valueOf() - vStart; + + vStart = (new Date).valueOf(); + qx.ui.core.Widget.flushGlobalJobQueue(); + var vJobDuration = (new Date).valueOf() - vStart; + + vStart = (new Date).valueOf(); + qx.ui.core.Widget.flushGlobalLayoutQueue(); + var vLayoutDuration = (new Date).valueOf() - vStart; + + vStart = (new Date).valueOf(); + qx.ui.core.Widget.flushGlobalDisplayQueue(); + var vDisplayDuration = (new Date).valueOf() - vStart; + + var vSum = vWidgetDuration + vStateDuration + vElementDuration + vJobDuration + vLayoutDuration + vDisplayDuration; + + if (vSum > 0) + { + var logger = qx.log.Logger.getClassLogger(qx.ui.core.Widget); + logger.debug("Flush Global Queues"); + logger.debug("Widgets: " + vWidgetDuration + "ms (" + globalWidgetQueueLength + ")"); + logger.debug("State: " + vStateDuration + "ms (" + globalStateQueueLength + ")"); + logger.debug("Element: " + vElementDuration + "ms (" + globalElementQueueLength + ")"); + logger.debug("Job: " + vJobDuration + "ms (" + globalJobQueueLength + ")"); + logger.debug("Layout: " + vLayoutDuration + "ms (" + globalLayoutQueueLength + ")"); + logger.debug("Display: " + vDisplayDuration + "ms (fast:" + fastGlobalDisplayQueueLength + ",lazy:" + lazyGlobalDisplayQueueLength + ")"); + + window.status = "Flush: Widget:" + vWidgetDuration + " State:" + vStateDuration + " Element:" + vElementDuration + " Job:" + vJobDuration + " Layout:" + vLayoutDuration + " Display:" + vDisplayDuration; + } + + delete qx.ui.core.Widget._inFlushGlobalQueues; + } +} +else +{ + qx.ui.core.Widget.flushGlobalQueues = function() + { + if (qx.ui.core.Widget._inFlushGlobalQueues || !qx.core.Init.getInstance().getComponent().isUiReady()) { + return; + } + + // Also used for inline event handling to seperate 'real' events + qx.ui.core.Widget._inFlushGlobalQueues = true; + + qx.ui.core.Widget.flushGlobalWidgetQueue(); + qx.ui.core.Widget.flushGlobalStateQueue(); + qx.ui.core.Widget.flushGlobalElementQueue(); + qx.ui.core.Widget.flushGlobalJobQueue(); + qx.ui.core.Widget.flushGlobalLayoutQueue(); + qx.ui.core.Widget.flushGlobalDisplayQueue(); + + delete qx.ui.core.Widget._inFlushGlobalQueues; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + WIDGET QUEUE + + Allows widgets to register to the widget queue to do multiple things + before the other queues will be flushed +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget._globalWidgetQueue = []; + +qx.ui.core.Widget.addToGlobalWidgetQueue = function(vWidget) +{ + if (!vWidget._isInGlobalWidgetQueue && vWidget._isDisplayable) + { + qx.ui.core.Widget._globalWidgetQueue.push(vWidget); + vWidget._isInGlobalWidgetQueue = true; + } +} + +qx.ui.core.Widget.removeFromGlobalWidgetQueue = function(vWidget) +{ + if (vWidget._isInGlobalWidgetQueue) + { + qx.lang.Array.remove(qx.ui.core.Widget._globalWidgetQueue, vWidget); + delete vWidget._isInGlobalWidgetQueue; + } +} + +qx.ui.core.Widget.flushGlobalWidgetQueue = function() +{ + var vQueue=qx.ui.core.Widget._globalWidgetQueue, vLength, vWidget; + + while ((vLength=vQueue.length) > 0) + { + for (var i=0; i<vLength; i++) + { + vWidget = vQueue[i]; + + vWidget.flushWidgetQueue(); + delete vWidget._isInGlobalWidgetQueue; + } + + vQueue.splice(0, vLength); + } +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + ELEMENT QUEUE + + Contains the widgets which should be (dom-)created +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget._globalElementQueue = []; + +qx.ui.core.Widget.addToGlobalElementQueue = function(vWidget) +{ + if (!vWidget._isInGlobalElementQueue && vWidget._isDisplayable) + { + qx.ui.core.Widget._globalElementQueue.push(vWidget); + vWidget._isInGlobalElementQueue = true; + } +} + +qx.ui.core.Widget.removeFromGlobalElementQueue = function(vWidget) +{ + if (vWidget._isInGlobalElementQueue) + { + qx.lang.Array.remove(qx.ui.core.Widget._globalElementQueue, vWidget); + delete vWidget._isInGlobalElementQueue; + } +} + +qx.ui.core.Widget.flushGlobalElementQueue = function() +{ + var vQueue=qx.ui.core.Widget._globalElementQueue, vLength, vWidget; + + while ((vLength=vQueue.length) > 0) + { + for (var i=0; i<vLength; i++) + { + vWidget = vQueue[i]; + + vWidget._createElementImpl(); + delete vWidget._isInGlobalElementQueue; + } + + vQueue.splice(0, vLength); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + STATE QUEUE + + Contains the widgets which recently changed their state +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget._globalStateQueue = []; + +qx.ui.core.Widget.addToGlobalStateQueue = function(vWidget) +{ + if (!vWidget._isInGlobalStateQueue && vWidget._isDisplayable) + { + qx.ui.core.Widget._globalStateQueue.push(vWidget); + vWidget._isInGlobalStateQueue = true; + } +} + +qx.ui.core.Widget.removeFromGlobalStateQueue = function(vWidget) +{ + if (vWidget._isInGlobalStateQueue) + { + qx.lang.Array.remove(qx.ui.core.Widget._globalStateQueue, vWidget); + delete vWidget._isInGlobalStateQueue; + } +} + +qx.ui.core.Widget.flushGlobalStateQueue = function() +{ + var vQueue=qx.ui.core.Widget._globalStateQueue, vLength, vWidget; + + while ((vLength=vQueue.length) > 0) + { + for (var i=0; i<vLength; i++) + { + vWidget = vQueue[i]; + + vWidget._applyStateAppearance(); + + delete vWidget._isInGlobalStateQueue; + } + + vQueue.splice(0, vLength); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + JOBS QUEUE + + Contains the widgets which need a update after they were visible before +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget._globalJobQueue = []; + +qx.ui.core.Widget.addToGlobalJobQueue = function(vWidget) +{ + if (!vWidget._isInGlobalJobQueue && vWidget._isDisplayable) + { + qx.ui.core.Widget._globalJobQueue.push(vWidget); + vWidget._isInGlobalJobQueue = true; + } +} + +qx.ui.core.Widget.removeFromGlobalJobQueue = function(vWidget) +{ + if (vWidget._isInGlobalJobQueue) + { + qx.lang.Array.remove(qx.ui.core.Widget._globalJobQueue, vWidget); + delete vWidget._isInGlobalJobQueue; + } +} + +qx.ui.core.Widget.flushGlobalJobQueue = function() +{ + var vQueue=qx.ui.core.Widget._globalJobQueue, vLength, vWidget; + + while ((vLength=vQueue.length) > 0) + { + for (var i=0; i<vLength; i++) + { + vWidget = vQueue[i]; + + vWidget._flushJobQueue(vWidget._jobQueue); + delete vWidget._isInGlobalJobQueue; + } + + vQueue.splice(0, vLength); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT QUEUE + + Contains the parents (qx.ui.core.Parent) of the children which needs layout updates +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget._globalLayoutQueue = []; + +qx.ui.core.Widget.addToGlobalLayoutQueue = function(vParent) +{ + if (!vParent._isInGlobalLayoutQueue && vParent._isDisplayable) + { + qx.ui.core.Widget._globalLayoutQueue.push(vParent); + vParent._isInGlobalLayoutQueue = true; + } +} + +qx.ui.core.Widget.removeFromGlobalLayoutQueue = function(vParent) +{ + if (vParent._isInGlobalLayoutQueue) + { + qx.lang.Array.remove(qx.ui.core.Widget._globalLayoutQueue, vParent); + delete vParent._isInGlobalLayoutQueue; + } +} + +qx.ui.core.Widget.flushGlobalLayoutQueue = function() +{ + var vQueue=qx.ui.core.Widget._globalLayoutQueue, vLength, vParent; + + while ((vLength=vQueue.length) > 0) + { + for (var i=0; i<vLength; i++) + { + vParent = vQueue[i]; + + vParent._flushChildrenQueue(); + delete vParent._isInGlobalLayoutQueue; + } + + vQueue.splice(0, vLength); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPLAY QUEUE + + Contains the widgets which should initially become visible +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget._fastGlobalDisplayQueue = []; +qx.ui.core.Widget._lazyGlobalDisplayQueues = {}; + +qx.ui.core.Widget.addToGlobalDisplayQueue = function(vWidget) +{ + if (!vWidget._isInGlobalDisplayQueue && vWidget._isDisplayable) + { + var vParent = vWidget.getParent(); + + if (vParent.isSeeable()) + { + var vKey = vParent.toHashCode(); + + if (qx.ui.core.Widget._lazyGlobalDisplayQueues[vKey]) + { + qx.ui.core.Widget._lazyGlobalDisplayQueues[vKey].push(vWidget); + } + else + { + qx.ui.core.Widget._lazyGlobalDisplayQueues[vKey] = [vWidget]; + } + } + else + { + qx.ui.core.Widget._fastGlobalDisplayQueue.push(vWidget); + } + + vWidget._isInGlobalDisplayQueue = true; + } +} + +qx.ui.core.Widget.removeFromGlobalDisplayQueue = function(vWidget) {} + +qx.ui.core.Widget.flushGlobalDisplayQueue = function() +{ + var vKey, vLazyQueue, vWidget, vFragment; + + var vFastQueue = qx.ui.core.Widget._fastGlobalDisplayQueue; + var vLazyQueues = qx.ui.core.Widget._lazyGlobalDisplayQueues; + + + + + /* ----------------------------------------------- + Flush display queues + ----------------------------------------------- */ + + // Work on fast queue + for (var i=0, l=vFastQueue.length; i<l; i++) + { + vWidget = vFastQueue[i]; + vWidget.getParent()._getTargetNode().appendChild(vWidget.getElement()); + } + + + // Work on lazy queues: Inline widgets + if (qx.OO.isAvailable("qx.ui.basic.Inline")) + { + for (vKey in vLazyQueues) + { + vLazyQueue = vLazyQueues[vKey]; + + for (var i=0; i<vLazyQueue.length; i++) + { + vWidget = vLazyQueue[i]; + + if (vWidget instanceof qx.ui.basic.Inline) + { + vWidget._beforeInsertDom(); + + try + { + document.getElementById(vWidget.getInlineNodeId()).appendChild(vWidget.getElement()); + } + catch(ex) + { + vWidget.debug("Could not append to inline id: " + vWidget.getInlineNodeId(), ex); + } + + vWidget._afterInsertDom(); + vWidget._afterAppear(); + + // Remove inline widget from queue and fix iterator position + qx.lang.Array.remove(vLazyQueue, vWidget); + i--; + + // Reset display queue flag + delete vWidget._isInGlobalDisplayQueue; + } + } + } + } + + + // Work on lazy queues: Other widgets + for (vKey in vLazyQueues) + { + vLazyQueue = vLazyQueues[vKey]; + + // Speed enhancement: Choose a fairly small arbitrary value for the number + // of elements that should be added to the parent individually. If more + // than this number of elements is to be added to the parent, we'll create + // a document fragment, add the elements to the document fragment, and + // then add the whole fragment to the parent en mass (assuming that + // creation of a document fragment is supported by the browser). + if (document.createDocumentFragment && vLazyQueue.length >= 3) + { + // creating new document fragment + vFragment = document.createDocumentFragment(); + + // appending all widget elements to fragment + for (var i=0, l=vLazyQueue.length; i<l; i++) + { + vWidget = vLazyQueue[i]; + + vWidget._beforeInsertDom(); + vFragment.appendChild(vWidget.getElement()); + } + + // append all fragment data at once to + // the already visible parent widget element + vLazyQueue[0].getParent()._getTargetNode().appendChild(vFragment); + + for (var i=0, l=vLazyQueue.length; i<l; i++) + { + vWidget = vLazyQueue[i]; + vWidget._afterInsertDom(); + } + } + else + { + // appending all widget elements (including previously added children) + // to the already visible parent widget element + for (var i=0, l=vLazyQueue.length; i<l; i++) + { + vWidget = vLazyQueue[i]; + + vWidget._beforeInsertDom(); + vWidget.getParent()._getTargetNode().appendChild(vWidget.getElement()); + vWidget._afterInsertDom(); + } + } + } + + + + + + + /* ----------------------------------------------- + Cleanup and appear signals + ----------------------------------------------- */ + + // Only need to do this with the lazy queues + // because through the recursion from qx.ui.core.Parent + // all others get also informed. + for (vKey in vLazyQueues) + { + vLazyQueue = vLazyQueues[vKey]; + + for (var i=0, l=vLazyQueue.length; i<l; i++) + { + vWidget = vLazyQueue[i]; + + if (vWidget.getVisibility()) { + vWidget._afterAppear(); + } + + // Reset display queue flag + delete vWidget._isInGlobalDisplayQueue; + } + + delete vLazyQueues[vKey]; + } + + // Reset display queue flag for widgets in fastQueue + for (var i=0, l=vFastQueue.length; i<l; i++) { + delete vFastQueue[i]._isInGlobalDisplayQueue; + } + + // Remove fast queue entries + qx.lang.Array.removeAll(vFastQueue); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + GLOBAL HELPERS +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget.getActiveSiblingHelperIgnore = function(vIgnoreClasses, vInstance) +{ + for (var j=0; j<vIgnoreClasses.length; j++) { + if (vInstance instanceof vIgnoreClasses[j]) { + return true; + } + } + + return false; +} + +qx.ui.core.Widget.getActiveSiblingHelper = function(vObject, vParent, vCalc, vIgnoreClasses, vMode) +{ + if (!vIgnoreClasses) { + vIgnoreClasses = []; + } + + var vChilds = vParent.getChildren(); + var vPosition = vMode == null ? vChilds.indexOf(vObject) + vCalc : vMode === "first" ? 0 : vChilds.length-1; + var vInstance = vChilds[vPosition]; + + while(vInstance && (!vInstance.isEnabled() || qx.ui.core.Widget.getActiveSiblingHelperIgnore(vIgnoreClasses, vInstance))) + { + vPosition += vCalc; + vInstance = vChilds[vPosition]; + + if (!vInstance) { + return null; + } + } + + return vInstance; +} + + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +/*! + If the widget is visible and rendered on the screen. +*/ +qx.Proto.isMaterialized = function() { + var el=this._element; + return (this._initialLayoutDone && + this._isDisplayable && + qx.html.Style.getStyleProperty(el, "display") != "none" && + qx.html.Style.getStyleProperty(el, "visibility") != "hidden" && + el.offsetWidth > 0 && el.offsetHeight > 0); +} + +/*! + A single setup to the current preferred pixel values of the widget +*/ +qx.Proto.pack = function() +{ + this.setWidth(this.getPreferredBoxWidth()); + this.setHeight(this.getPreferredBoxHeight()); +} + +/*! + A bounded setup to the preferred width/height of the widget. Keeps in + sync if the content or requirements of the widget changes +*/ +qx.Proto.auto = function() +{ + this.setWidth("auto"); + this.setHeight("auto"); +} + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN HANDLING: ALL +--------------------------------------------------------------------------- +*/ + +/*! + Get an array of the current children +*/ +qx.Proto.getChildren = qx.lang.Function.returnNull; + +/*! + Get the number of children +*/ +qx.Proto.getChildrenLength = qx.lang.Function.returnZero; + +/*! + Get if the widget has any children +*/ +qx.Proto.hasChildren = qx.lang.Function.returnFalse; + +/*! + Get if the widget has no children +*/ +qx.Proto.isEmpty = qx.lang.Function.returnTrue; + +/*! + Return the position of the child inside +*/ +qx.Proto.indexOf = qx.lang.Function.returnNegativeIndex; + +/*! + Test if this widget contains the given widget +*/ +qx.Proto.contains = qx.lang.Function.returnFalse; + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN HANDLING: VISIBLE ONES +--------------------------------------------------------------------------- +*/ + +/*! + Get an array of the current visible children +*/ +qx.Proto.getVisibleChildren = qx.lang.Function.returnNull; + +/*! + Get the number of children +*/ +qx.Proto.getVisibleChildrenLength = qx.lang.Function.returnZero; + +/*! + If this widget has visible children +*/ +qx.Proto.hasVisibleChildren = qx.lang.Function.returnFalse; + +/*! + Check if there are any visible children inside +*/ +qx.Proto.isVisibleEmpty = qx.lang.Function.returnTrue; + + + + + +/* +--------------------------------------------------------------------------- + CORE MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._hasParent = false; +qx.Proto._isDisplayable = false; + +qx.Proto.isDisplayable = function() { + return this._isDisplayable; +} + +qx.Proto._checkParent = function(propValue, propOldValue, propData) +{ + if (this.contains(propValue)) { + throw new Error("Could not insert myself into a child " + propValue + "!"); + } + + return propValue; +} + +qx.Proto._modifyParent = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + var vOldIndex = propOldValue.getChildren().indexOf(this); + + // Reset cached dimension and location values + this._computedWidthValue = this._computedMinWidthValue = this._computedMaxWidthValue = this._computedLeftValue = this._computedRightValue = null; + this._computedHeightValue = this._computedMinHeightValue = this._computedMaxHeightValue = this._computedTopValue = this._computedBottomValue = null; + + this._cachedBoxWidth = this._cachedInnerWidth = this._cachedOuterWidth = null; + this._cachedBoxHeight = this._cachedInnerHeight = this._cachedOuterHeight = null; + + // Finally remove from children array + qx.lang.Array.removeAt(propOldValue.getChildren(), vOldIndex); + + // Invalidate visible children cache + propOldValue._invalidateVisibleChildren(); + + // Remove child from old parent's children queue + propOldValue._removeChildFromChildrenQueue(this); + + // The layouter adds some layout jobs + propOldValue.getLayoutImpl().updateChildrenOnRemoveChild(this, vOldIndex); + + // Inform job queue + propOldValue.addToJobQueue("removeChild"); + + // Invalidate inner preferred dimensions + propOldValue._invalidatePreferredInnerDimensions(); + + // Store old parent (needed later by _handleDisplayable) + this._oldParent = propOldValue; + } + + if (propValue) + { + this._hasParent = true; + + if (typeof this._insertIndex == "number") + { + qx.lang.Array.insertAt(propValue.getChildren(), this, this._insertIndex); + delete this._insertIndex; + } + else + { + propValue.getChildren().push(this); + } + } + else + { + this._hasParent = false; + } + + return this._handleDisplayable("parent"); +} + +qx.Proto._modifyDisplay = function(propValue, propOldValue, propData) { + return this._handleDisplayable("display"); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPLAYBLE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._handleDisplayable = function(vHint) +{ + // Detect changes. Return if there is no change. + // Also handle the case if the displayable keeps true and the parent + // was changed then we must not return here. + var vDisplayable = this._computeDisplayable(); + if (this._isDisplayable == vDisplayable && !(vDisplayable && vHint == "parent")) { + return true; + } + + this._isDisplayable = vDisplayable; + + var vParent = this.getParent(); + + // Invalidate visible children + if (vParent) + { + vParent._invalidateVisibleChildren(); + vParent._invalidatePreferredInnerDimensions(); + } + + // Remove old parent's elements from DOM and delete old parent + if (vHint && this._oldParent && this._oldParent._initialLayoutDone) + { + var vElement = this.getElement(); + if(vElement) + { + if (this.getVisibility()) { + this._beforeDisappear(); + } + + this._beforeRemoveDom(); + + this._oldParent._getTargetNode().removeChild(vElement); + + this._afterRemoveDom(); + + if (this.getVisibility()) { + this._afterDisappear(); + } + } + + delete this._oldParent; + } + + // Handle 'show' + if (vDisplayable) + { + /* -------------------------------- + Update current parent + -------------------------------- */ + + // The layouter added some layout jobs + if (vParent._initialLayoutDone) + { + vParent.getLayoutImpl().updateChildrenOnAddChild(this, vParent.getChildren().indexOf(this)); + + // Inform parents job queue + vParent.addToJobQueue("addChild"); + } + + // Add to parents children queue + // (indirectly with a new layout request) + this.addToLayoutChanges("initial"); + + // Add to custom queues + this.addToCustomQueues(vHint); + + // Handle beforeAppear signals + if (this.getVisibility()) { + this._beforeAppear(); + } + + + + /* -------------------------------- + Add to global Queues + -------------------------------- */ + + // Add element (and create if not ready) + if (!this._isCreated) { + qx.ui.core.Widget.addToGlobalElementQueue(this); + } + + // Add to global queues + qx.ui.core.Widget.addToGlobalStateQueue(this); + + if (!qx.lang.Object.isEmpty(this._jobQueue)) { + qx.ui.core.Widget.addToGlobalJobQueue(this); + } + + if (!qx.lang.Object.isEmpty(this._childrenQueue)) { + qx.ui.core.Widget.addToGlobalLayoutQueue(this); + } + } + + // Handle 'hide' + else + { + // Removing from global queues + qx.ui.core.Widget.removeFromGlobalElementQueue(this); + qx.ui.core.Widget.removeFromGlobalStateQueue(this); + qx.ui.core.Widget.removeFromGlobalJobQueue(this); + qx.ui.core.Widget.removeFromGlobalLayoutQueue(this); + + // Add to top-level tree queue + this.removeFromCustomQueues(vHint); + + // only remove when itself want to be removed + // through a property change - not a parent signal + if (vParent && vHint) + { + if (this.getVisibility()) { + this._beforeDisappear(); + } + + // The layouter added some layout jobs + if (vParent._initialLayoutDone && this._initialLayoutDone) + { + vParent.getLayoutImpl().updateChildrenOnRemoveChild(this, vParent.getChildren().indexOf(this)); + + // Inform parent's job queue + vParent.addToJobQueue("removeChild"); + + // Before Remove DOM Event + this._beforeRemoveDom(); + + // DOM action + vParent._getTargetNode().removeChild(this.getElement()); + + // After Remove DOM Event + this._afterRemoveDom(); + } + + // Remove from parents children queue + vParent._removeChildFromChildrenQueue(this); + + if (this.getVisibility()) { + this._afterDisappear(); + } + } + } + + this._handleDisplayableCustom(vDisplayable, vParent, vHint); + + return true; +} + +qx.Proto.addToCustomQueues = qx.lang.Function.returnTrue; +qx.Proto.removeFromCustomQueues = qx.lang.Function.returnTrue; + +qx.Proto._handleDisplayableCustom = qx.lang.Function.returnTrue; + +qx.Proto._computeDisplayable = function() { + return this.getDisplay() && this._hasParent && this.getParent()._isDisplayable ? true : false; +} + +qx.Proto._beforeAppear = function() +{ + // this.debug("_beforeAppear"); + this.createDispatchEvent("beforeAppear"); +} + +qx.Proto._afterAppear = function() +{ + // this.debug("_afterAppear"); + this._isSeeable = true; + this.createDispatchEvent("appear"); +} + +qx.Proto._beforeDisappear = function() +{ + // this.debug("_beforeDisappear"); + + // Remove any hover/pressed styles + this.removeState("over"); + + if (qx.OO.isAvailable("qx.ui.form.Button")) + { + this.removeState("pressed"); + this.removeState("abandoned"); + } + + // this.debug("_beforeDisappear"); + this.createDispatchEvent("beforeDisappear"); +} + +qx.Proto._afterDisappear = function() +{ + // this.debug("_afterDisappear"); + this._isSeeable = false; + this.createDispatchEvent("disappear"); +} + +qx.Proto._isSeeable = false; + +/** + * If the widget is currently seeable which means that it: + * + * * has a also seeable parent + * * visibility is true + * * display is true + */ +qx.Proto.isSeeable = function() { + return this._isSeeable; +} + +qx.Proto.isAppearRelevant = function() { + return this.getVisibility() && this._isDisplayable; +} + + + + + +/* +--------------------------------------------------------------------------- + DOM SIGNAL HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeInsertDom = function() +{ + // this.debug("_beforeInsertDom"); + this.createDispatchEvent("beforeInsertDom"); +} + +qx.Proto._afterInsertDom = function() +{ + // this.debug("_afterInsertDom"); + this.createDispatchEvent("insertDom"); +} + +qx.Proto._beforeRemoveDom = function() +{ + // this.debug("_beforeRemoveDom"); + this.createDispatchEvent("beforeRemoveDom"); +} + +qx.Proto._afterRemoveDom = function() +{ + // this.debug("_afterRemoveDom"); + this.createDispatchEvent("removeDom"); +} + + + + + + +/* +--------------------------------------------------------------------------- + VISIBILITY HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyVisibility = function(propValue, propOldValue, propData) +{ + if (propValue) + { + if (this._isDisplayable) { + this._beforeAppear(); + } + + this.removeStyleProperty("display"); + + if (this._isDisplayable) { + this._afterAppear(); + } + } + else + { + if (this._isDisplayable) { + this._beforeDisappear(); + } + + this.setStyleProperty("display", "none"); + + if (this._isDisplayable) { + this._afterDisappear(); + } + } + + return true; +} + +qx.Proto.show = function() +{ + this.setVisibility(true); + this.setDisplay(true); +} + +qx.Proto.hide = function() { + this.setVisibility(false); +} + +qx.Proto.connect = function() { + this.setDisplay(true); +} + +qx.Proto.disconnect = function() { + this.setDisplay(false); +} + + + + + +/* +--------------------------------------------------------------------------- + ENHANCED BORDER SUPPORT +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._createElementForEnhancedBorder = qx.lang.Function.returnTrue; +} +else +{ + qx.Proto._createElementForEnhancedBorder = function() + { + // Enhanced Border Test (for IE and Opera) + if (qx.renderer.border.Border.enhancedCrossBrowserMode && + this.getTagName() == "div" && + !this._borderElement) + { + var el = this.getElement(); + var cl = this._borderElement = document.createElement("div"); + + var es = el.style; + var cs = this._borderStyle = cl.style; + + cs.width = cs.height = "100%"; + cs.position = "absolute"; + + for (var i in this._styleProperties) + { + switch(i) + { + case "position": + case "zIndex": + case "filter": + case "display": + break; + + default: + cs[i] = this._styleProperties[i]; + es[i] = ""; + } + } + + for (var i in this._htmlProperties) + { + switch(i) + { + case "unselectable": + cl.unselectable = this._htmlProperties[i]; + } + } + + // Move existing children + while(el.firstChild) { + cl.appendChild(el.firstChild); + } + + el.appendChild(cl); + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DOM ELEMENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._isCreated = false; + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._getTargetNode = function() { + return this._element; + } +} +else +{ + qx.Proto._getTargetNode = function() { + return this._borderElement || this._element; + } +} + +qx.Proto.addToDocument = function() { + qx.ui.core.ClientDocument.getInstance().add(this); +} + +/** + * Check if the widget is created (or the element is already available). + * + * @return {Boolean} whether the widget is already created. + */ +qx.Proto.isCreated = function() { + return this._isCreated; +} + +/*! + Create widget with empty element (of specified tagname). +*/ +qx.Proto._createElementImpl = function() { + this.setElement(this.getTopLevelWidget().getDocumentElement().createElement(this.getTagName())); +} + +qx.Proto._modifyElement = function(propValue, propOldValue, propData) +{ + this._isCreated = propValue != null; + + if (propOldValue) + { + // reset reference to widget instance + propOldValue.qx_Widget = null; + + // remove events + this._removeInlineEvents(propOldValue); + } + + if (propValue) + { + // add reference to widget instance + propValue.qx_Widget = this; + + // link element and style reference + this._element = propValue; + this._style = propValue.style; + + this._applyStyleProperties(propValue); + this._applyHtmlProperties(propValue); + this._applyHtmlAttributes(propValue); + this._applyElementData(propValue); + + // attach inline events + this._addInlineEvents(propValue); + + // send out create event + this.createDispatchEvent("create"); + } + else + { + this._element = this._style = null; + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + JOBS QUEUE +--------------------------------------------------------------------------- +*/ + +qx.Proto.addToJobQueue = function(p) +{ + if (this._hasParent) { + qx.ui.core.Widget.addToGlobalJobQueue(this); + } + + if (!this._jobQueue) { + this._jobQueue = {}; + } + + this._jobQueue[p] = true; + return true; +} + +qx.Proto._flushJobQueue = function(q) +{ + /* -------------------------------------------------------------------------------- + 1. Pre checks + -------------------------------------------------------------------------------- */ + + try + { + var vQueue = this._jobQueue; + var vParent = this.getParent(); + + if (!vParent || qx.lang.Object.isEmpty(vQueue)) { + return; + } + + var vLayoutImpl = this instanceof qx.ui.core.Parent ? this.getLayoutImpl() : null; + + if (vLayoutImpl) { + vLayoutImpl.updateSelfOnJobQueueFlush(vQueue); + } + } + catch(ex) + { + this.error("Flushing job queue (prechecks#1) failed", ex); + } + + + + + + /* -------------------------------------------------------------------------------- + 2. Recompute dimensions + -------------------------------------------------------------------------------- */ + + try + { + var vFlushParentJobQueue = false; + var vRecomputeOuterWidth = vQueue.marginLeft || vQueue.marginRight; + var vRecomputeOuterHeight = vQueue.marginTop || vQueue.marginBottom; + var vRecomputeInnerWidth = vQueue.frameWidth; + var vRecomputeInnerHeight = vQueue.frameHeight; + var vRecomputeParentPreferredInnerWidth = (vQueue.frameWidth || vQueue.preferredInnerWidth) && this._recomputePreferredBoxWidth(); + var vRecomputeParentPreferredInnerHeight = (vQueue.frameHeight || vQueue.preferredInnerHeight) && this._recomputePreferredBoxHeight(); + + if (vRecomputeParentPreferredInnerWidth) + { + var vPref = this.getPreferredBoxWidth(); + + if (this._computedWidthTypeAuto) + { + this._computedWidthValue = vPref; + vQueue.width = true; + } + + if (this._computedMinWidthTypeAuto) + { + this._computedMinWidthValue = vPref; + vQueue.minWidth = true; + } + + if (this._computedMaxWidthTypeAuto) + { + this._computedMaxWidthValue = vPref; + vQueue.maxWidth = true; + } + } + + if (vRecomputeParentPreferredInnerHeight) + { + var vPref = this.getPreferredBoxHeight(); + + if (this._computedHeightTypeAuto) + { + this._computedHeightValue = vPref; + vQueue.height = true; + } + + if (this._computedMinHeightTypeAuto) + { + this._computedMinHeightValue = vPref; + vQueue.minHeight = true; + } + + if (this._computedMaxHeightTypeAuto) + { + this._computedMaxHeightValue = vPref; + vQueue.maxHeight = true; + } + } + + if ((vQueue.width || vQueue.minWidth || vQueue.maxWidth || vQueue.left || vQueue.right) && this._recomputeBoxWidth()) { + vRecomputeOuterWidth = vRecomputeInnerWidth = true; + } + + if ((vQueue.height || vQueue.minHeight || vQueue.maxHeight || vQueue.top || vQueue.bottom) && this._recomputeBoxHeight()) { + vRecomputeOuterHeight = vRecomputeInnerHeight = true; + } + } + catch(ex) + { + this.error("Flushing job queue (recompute#2) failed", ex); + } + + + + + + /* -------------------------------------------------------------------------------- + 3. Signals to parent widgets + -------------------------------------------------------------------------------- */ + + try + { + if ((vRecomputeOuterWidth && this._recomputeOuterWidth()) || + vRecomputeParentPreferredInnerWidth) + { + vParent._invalidatePreferredInnerWidth(); + vParent.getLayoutImpl().updateSelfOnChildOuterWidthChange(this); + + vFlushParentJobQueue = true; + } + + if ((vRecomputeOuterHeight && this._recomputeOuterHeight()) || + vRecomputeParentPreferredInnerHeight) + { + vParent._invalidatePreferredInnerHeight(); + vParent.getLayoutImpl().updateSelfOnChildOuterHeightChange(this); + + vFlushParentJobQueue = true; + } + + if (vFlushParentJobQueue) { + vParent._flushJobQueue(); + } + } + catch(ex) + { + this.error("Flushing job queue (parentsignals#3) failed", ex); + } + + + + + + /* -------------------------------------------------------------------------------- + 4. Add layout jobs + -------------------------------------------------------------------------------- */ + + try + { + // add to layout queue + vParent._addChildToChildrenQueue(this); + + // convert jobs to layout jobs + for (var i in vQueue) { + this._layoutChanges[i] = true; + } + } + catch(ex) + { + this.error("Flushing job queue (addjobs#4) failed", ex); + } + + + + + + /* -------------------------------------------------------------------------------- + 5. Signals to children + -------------------------------------------------------------------------------- */ + + try + { + // inform children about padding change + if (this instanceof qx.ui.core.Parent && + (vQueue.paddingLeft || + vQueue.paddingRight || + vQueue.paddingTop || + vQueue.paddingBottom)) + { + var ch=this.getChildren(), chl=ch.length; + + if (vQueue.paddingLeft) { + for (var i=0; i<chl; i++) { + ch[i].addToLayoutChanges("parentPaddingLeft"); + } + } + + if (vQueue.paddingRight) { + for (var i=0; i<chl; i++) { + ch[i].addToLayoutChanges("parentPaddingRight"); + } + } + + if (vQueue.paddingTop) { + for (var i=0; i<chl; i++) { + ch[i].addToLayoutChanges("parentPaddingTop"); + } + } + + if (vQueue.paddingBottom) { + for (var i=0; i<chl; i++) { + ch[i].addToLayoutChanges("parentPaddingBottom"); + } + } + } + + if (vRecomputeInnerWidth) { + this._recomputeInnerWidth(); + } + + if (vRecomputeInnerHeight) { + this._recomputeInnerHeight(); + } + + if (this._initialLayoutDone) + { + if (vLayoutImpl) { + vLayoutImpl.updateChildrenOnJobQueueFlush(vQueue); + } + } + } + catch(ex) + { + this.error("Flushing job queue (childrensignals#5) failed", ex); + } + + + + /* -------------------------------------------------------------------------------- + 5. Cleanup + -------------------------------------------------------------------------------- */ + + delete this._jobQueue; +} + + + + + +/* +--------------------------------------------------------------------------- + METHODS TO GIVE THE LAYOUTERS INFORMATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._isWidthEssential = qx.lang.Function.returnTrue; +qx.Proto._isHeightEssential = qx.lang.Function.returnTrue; + + + + + + + +/* +--------------------------------------------------------------------------- + APPLY LAYOUT STYLES +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget.initApplyMethods = function() +{ + var f = "_applyRuntime"; + var r = "_resetRuntime"; + var s = "this._style."; + var e = "=''"; + var v = "=((v==null)?0:v)+'px'"; + var vpar = "v"; + + var props = ["left", "right", "top", "bottom", "width", "height", + "minWidth", "maxWidth", "minHeight", "maxHeight"]; + var propsup = ["Left", "Right", "Top", "Bottom", "Width", "Height", + "MinWidth", "MaxWidth", "MinHeight", "MaxHeight"]; + + for (var i=0, fn=f+"Margin", rn=r+"Margin", sp=s+"margin"; i<4; i++) + { + qx.Proto[fn+propsup[i]] = new Function(vpar, sp + propsup[i] + v); + qx.Proto[rn+propsup[i]] = new Function(sp + propsup[i] + e); + } + + var pad = "padding"; + var upad = "Padding"; + + if (qx.core.Client.getInstance().isGecko()) + { + for (var i=0, fn=f+upad, rn=r+upad, sp=s+pad; i<4; i++) + { + qx.Proto[fn+propsup[i]] = new Function(vpar, sp + propsup[i] + v); + qx.Proto[rn+propsup[i]] = new Function(sp + propsup[i] + e); + } + } + else + { + // need to use setStyleProperty to keep compatibility with enhanced cross browser borders + var s1="this.setStyleProperty('padding"; + var s2="', ((v==null)?0:v)+'px')"; + var s3="this.removeStyleProperty('padding"; + var s4="')"; + + for (var i=0, fn=f+upad, rn=r+upad, sp=s+pad; i<4; i++) + { + qx.Proto[fn+propsup[i]] = new Function(vpar, s1 + propsup[i] + s2); + qx.Proto[rn+propsup[i]] = new Function(s3 + propsup[i] + s4); + } + } + + /* + Use optimized method for internet explorer + to omit string concat and directly setup + the new layout property. + + We could not use this to reset the value however. + It seems that is just doesn't work this way. And the + left/top always get priority. Tried: "", null, "auto". + Nothing helps. + + Now I've switched back to the conventional method + to reset the value. This seems to work again. + */ + if (qx.core.Client.getInstance().isMshtml()) + { + for (var i=0, tpos="pos", vset="=v"; i<6; i++) + { + // to debug the values which will be applied use this instead of the + // first line: + // qx.Proto[f+propsup[i]] = new Function(vpar, "this.debug('v: ' + v); " + s + tpos + propsup[i] + vset); + + qx.Proto[f+propsup[i]] = new Function(vpar, s + tpos + propsup[i] + vset); + qx.Proto[r+propsup[i]] = new Function(s + props[i] + e); + } + } + else + { + for (var i=0; i<10; i++) + { + // to debug the values which will be applied use this instead of the + // first line: + // qx.Proto[f+propsup[i]] = new Function(vpar, "this.debug('v: ' + v); " + s + props[i] + v); + + qx.Proto[f+propsup[i]] = new Function(vpar, s + props[i] + v); + qx.Proto[r+propsup[i]] = new Function(s + props[i] + e); + } + } +} + +qx.ui.core.Widget.initApplyMethods(); + + + + + + +/* +--------------------------------------------------------------------------- + DIMENSION CACHE +--------------------------------------------------------------------------- +*/ + +/* + Add basic setter/getters +*/ + +qx.OO.addCachedProperty({ name : "innerWidth", defaultValue : null }); +qx.OO.addCachedProperty({ name : "innerHeight", defaultValue : null }); +qx.OO.addCachedProperty({ name : "boxWidth", defaultValue : null }); +qx.OO.addCachedProperty({ name : "boxHeight", defaultValue : null }); +qx.OO.addCachedProperty({ name : "outerWidth", defaultValue : null }); +qx.OO.addCachedProperty({ name : "outerHeight", defaultValue : null }); + +qx.Proto._computeBoxWidthFallback = function() { + return 0; +} + +qx.Proto._computeBoxHeightFallback = function() { + return 0; +} + +qx.Proto._computeBoxWidth = function() { + var vLayoutImpl = this.getParent().getLayoutImpl(); + return Math.max(0, + qx.lang.Number.limit(vLayoutImpl.computeChildBoxWidth(this), + this.getMinWidthValue(), + this.getMaxWidthValue())); +} + +qx.Proto._computeBoxHeight = function() { + var vLayoutImpl = this.getParent().getLayoutImpl(); + return Math.max(0, + qx.lang.Number.limit(vLayoutImpl.computeChildBoxHeight(this), + this.getMinHeightValue(), + this.getMaxHeightValue())); +} + +qx.Proto._computeOuterWidth = function() { + return Math.max(0, + (this.getMarginLeft() + + this.getBoxWidth() + + this.getMarginRight())); +} + +qx.Proto._computeOuterHeight = function() { + return Math.max(0, + (this.getMarginTop() + + this.getBoxHeight() + + this.getMarginBottom())); +} + +qx.Proto._computeInnerWidth = function() { + return Math.max(0, this.getBoxWidth() - this.getFrameWidth()); +} + +qx.Proto._computeInnerHeight = function() { + return Math.max(0, this.getBoxHeight() - this.getFrameHeight()); +} + +qx.Proto.getNeededWidth = function() { + var vLayoutImpl = this.getParent().getLayoutImpl(); + return Math.max(0, vLayoutImpl.computeChildNeededWidth(this)); +} + +qx.Proto.getNeededHeight = function() { + var vLayoutImpl = this.getParent().getLayoutImpl(); + return Math.max(0, vLayoutImpl.computeChildNeededHeight(this)); +} + + + + + + + +/* +--------------------------------------------------------------------------- + RECOMPUTE FLEX VALUES +--------------------------------------------------------------------------- +*/ + +qx.Proto._recomputeFlexX = function() +{ + if (!this.getHasFlexX()) { + return false; + } + + if (this._computedWidthTypeFlex) + { + this._computedWidthValue = null; + this.addToLayoutChanges("width"); + } + + return true; +} + +qx.Proto._recomputeFlexY = function() +{ + if (!this.getHasFlexY()) { + return false; + } + + if (this._computedHeightTypeFlex) + { + this._computedHeightValue = null; + this.addToLayoutChanges("height"); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + RECOMPUTE PERCENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._recomputePercentX = function() +{ + if (!this.getHasPercentX()) { + return false; + } + + if (this._computedWidthTypePercent) + { + this._computedWidthValue = null; + this.addToLayoutChanges("width"); + } + + if (this._computedMinWidthTypePercent) + { + this._computedMinWidthValue = null; + this.addToLayoutChanges("minWidth"); + } + + if (this._computedMaxWidthTypePercent) + { + this._computedMaxWidthValue = null; + this.addToLayoutChanges("maxWidth"); + } + + if (this._computedLeftTypePercent) + { + this._computedLeftValue = null; + this.addToLayoutChanges("left"); + } + + if (this._computedRightTypePercent) + { + this._computedRightValue = null; + this.addToLayoutChanges("right"); + } + + return true; +} + +qx.Proto._recomputePercentY = function() +{ + if (!this.getHasPercentY()) { + return false; + } + + if (this._computedHeightTypePercent) + { + this._computedHeightValue = null; + this.addToLayoutChanges("height"); + } + + if (this._computedMinHeightTypePercent) + { + this._computedMinHeightValue = null; + this.addToLayoutChanges("minHeight"); + } + + if (this._computedMaxHeightTypePercent) + { + this._computedMaxHeightValue = null; + this.addToLayoutChanges("maxHeight"); + } + + if (this._computedTopTypePercent) + { + this._computedTopValue = null; + this.addToLayoutChanges("top"); + } + + if (this._computedBottomTypePercent) + { + this._computedBottomValue = null; + this.addToLayoutChanges("bottom"); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + RECOMPUTE RANGES +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera()) +{ + qx.Proto._recomputeRangeX = function() + { + if (this._computedLeftTypeNull || this._computedRightTypeNull) { + return false; + } + + this.addToLayoutChanges("width"); + return true; + } + + qx.Proto._recomputeRangeY = function() + { + if (this._computedTopTypeNull || this._computedBottomTypeNull) { + return false; + } + + this.addToLayoutChanges("height"); + return true; + } +} +else +{ + qx.Proto._recomputeRangeX = function() { + return !(this._computedLeftTypeNull || this._computedRightTypeNull); + } + + qx.Proto._recomputeRangeY = function() { + return !(this._computedTopTypeNull || this._computedBottomTypeNull); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + RECOMPUTE STRETCHING +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml() || qx.core.Client.getInstance().isOpera()) +{ + qx.Proto._recomputeStretchingX = function() + { + if (this.getAllowStretchX() && this._computedWidthTypeNull) + { + this._computedWidthValue = null; + this.addToLayoutChanges("width"); + + return true; + } + + return false; + } + + qx.Proto._recomputeStretchingY = function() + { + if (this.getAllowStretchY() && this._computedHeightTypeNull) + { + this._computedHeightValue = null; + this.addToLayoutChanges("height"); + + return true; + } + + return false; + } +} +else +{ + qx.Proto._recomputeStretchingX = function() + { + if (this.getAllowStretchX() && this._computedWidthTypeNull) { + return true; + } + + return false; + } + + qx.Proto._recomputeStretchingY = function() + { + if (this.getAllowStretchY() && this._computedHeightTypeNull) { + return true; + } + + return false; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + INTELLIGENT GETTERS FOR STANDALONE DIMENSIONS: HELPERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computeValuePixel = function(v) { + return Math.round(v); +} + +qx.Proto._computeValuePixelLimit = function(v) { + return Math.max(0, this._computeValuePixel(v)); +} + +qx.Proto._computeValuePercentX = function(v) { + return Math.round(this.getParent().getInnerWidthForChild(this) * v * 0.01); +} + +qx.Proto._computeValuePercentXLimit = function(v) { + return Math.max(0, this._computeValuePercentX(v)); +} + +qx.Proto._computeValuePercentY = function(v) { + return Math.round(this.getParent().getInnerHeightForChild(this) * v * 0.01); +} + +qx.Proto._computeValuePercentYLimit = function(v) { + return Math.max(0, this._computeValuePercentY(v)); +} + + + + + +/* +--------------------------------------------------------------------------- + INTELLIGENT GETTERS FOR STANDALONE DIMENSIONS: X-AXIS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getWidthValue = function() +{ + if (this._computedWidthValue != null) { + return this._computedWidthValue; + } + + switch(this._computedWidthType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedWidthValue = this._computeValuePixelLimit(this._computedWidthParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedWidthValue = this._computeValuePercentXLimit(this._computedWidthParsed); + + case qx.ui.core.Widget.TYPE_AUTO: + return this._computedWidthValue = this.getPreferredBoxWidth(); + + case qx.ui.core.Widget.TYPE_FLEX: + try{ + this.getParent().getLayoutImpl().computeChildrenFlexWidth(); + } catch (e){ + if (this.getParent().getLayoutImpl()["computeChildrenFlexWidth"] == null){ + throw new Error("Widget " + this + ": having flex size but parent layout does not support it"); + } else { + throw e; + } + } + return this._computedWidthValue = this._computedWidthFlexValue; + } + + return null; +} + +qx.Proto.getMinWidthValue = function() +{ + if (this._computedMinWidthValue != null) { + return this._computedMinWidthValue; + } + + switch(this._computedMinWidthType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedWidthValue = this._computeValuePixelLimit(this._computedMinWidthParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedWidthValue = this._computeValuePercentXLimit(this._computedMinWidthParsed); + + case qx.ui.core.Widget.TYPE_AUTO: + return this._computedMinWidthValue = this.getPreferredBoxWidth(); + } + + return null; +} + +qx.Proto.getMaxWidthValue = function() +{ + if (this._computedMaxWidthValue != null) { + return this._computedMaxWidthValue; + } + + switch(this._computedMaxWidthType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedWidthValue = this._computeValuePixelLimit(this._computedMaxWidthParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedWidthValue = this._computeValuePercentXLimit(this._computedMaxWidthParsed); + + case qx.ui.core.Widget.TYPE_AUTO: + return this._computedMaxWidthValue = this.getPreferredBoxWidth(); + } + + return null; +} + +qx.Proto.getLeftValue = function() +{ + if (this._computedLeftValue != null) { + return this._computedLeftValue; + } + + switch(this._computedLeftType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedLeftValue = this._computeValuePixel(this._computedLeftParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedLeftValue = this._computeValuePercentX(this._computedLeftParsed); + } + + return null; +} + +qx.Proto.getRightValue = function() +{ + if (this._computedRightValue != null) { + return this._computedRightValue; + } + + switch(this._computedRightType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedRightValue = this._computeValuePixel(this._computedRightParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedRightValue = this._computeValuePercentX(this._computedRightParsed); + } + + return null; +} + + + + + + + +/* +--------------------------------------------------------------------------- + INTELLIGENT GETTERS FOR STANDALONE DIMENSIONS: Y-AXIS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getHeightValue = function() +{ + if (this._computedHeightValue != null) { + return this._computedHeightValue; + } + + switch(this._computedHeightType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedHeightValue = this._computeValuePixelLimit(this._computedHeightParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedHeightValue = this._computeValuePercentYLimit(this._computedHeightParsed); + + case qx.ui.core.Widget.TYPE_AUTO: + return this._computedHeightValue = this.getPreferredBoxHeight(); + + case qx.ui.core.Widget.TYPE_FLEX: + try{ + this.getParent().getLayoutImpl().computeChildrenFlexHeight(); + } catch (e){ + if (this.getParent().getLayoutImpl()["computeChildrenFlexHeight"] == null){ + throw new Error("Widget " + this + ": having flex size but parent layout does not support it"); + } else { + throw e; + } + } + return this._computedHeightValue = this._computedHeightFlexValue; + } + + return null; +} + +qx.Proto.getMinHeightValue = function() +{ + if (this._computedMinHeightValue != null) { + return this._computedMinHeightValue; + } + + switch(this._computedMinHeightType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedMinHeightValue = this._computeValuePixelLimit(this._computedMinHeightParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedMinHeightValue = this._computeValuePercentYLimit(this._computedMinHeightParsed); + + case qx.ui.core.Widget.TYPE_AUTO: + return this._computedMinHeightValue = this.getPreferredBoxHeight(); + } + + return null; +} + +qx.Proto.getMaxHeightValue = function() +{ + if (this._computedMaxHeightValue != null) { + return this._computedMaxHeightValue; + } + + switch(this._computedMaxHeightType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedMaxHeightValue = this._computeValuePixelLimit(this._computedMaxHeightParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedMaxHeightValue = this._computeValuePercentYLimit(this._computedMaxHeightParsed); + + case qx.ui.core.Widget.TYPE_AUTO: + return this._computedMaxHeightValue = this.getPreferredBoxHeight(); + } + + return null; +} + +qx.Proto.getTopValue = function() +{ + if (this._computedTopValue != null) { + return this._computedTopValue; + } + + switch(this._computedTopType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedTopValue = this._computeValuePixel(this._computedTopParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedTopValue = this._computeValuePercentY(this._computedTopParsed); + } + + return null; +} + +qx.Proto.getBottomValue = function() +{ + if (this._computedBottomValue != null) { + return this._computedBottomValue; + } + + switch(this._computedBottomType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + return this._computedBottomValue = this._computeValuePixel(this._computedBottomParsed); + + case qx.ui.core.Widget.TYPE_PERCENT: + return this._computedBottomValue = this._computeValuePercentY(this._computedBottomParsed); + } + + return null; +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + FRAME DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.OO.addCachedProperty({ name : "frameWidth", defaultValue : null, addToQueueRuntime : true }); +qx.OO.addCachedProperty({ name : "frameHeight", defaultValue : null, addToQueueRuntime : true }); + +qx.Proto._computeFrameWidth = function() +{ + var fw = this._cachedBorderLeft + this.getPaddingLeft() + this.getPaddingRight() + this._cachedBorderRight; + + switch(this.getOverflow()) + { + case "scroll": + case "scrollY": + qx.ui.core.Widget.initOverflow(); + fw += qx.ui.core.Widget.SCROLLBAR_SIZE; + break; + + case "auto": + // This seems to be really hard to implement + // this.debug("Check Auto Scroll-X: " + this.getPreferredBoxHeight() + " :: " + this.getBoxHeight()); + break; + } + + return fw; +} + +qx.Proto._computeFrameHeight = function() +{ + var fh = this._cachedBorderTop + this.getPaddingTop() + this.getPaddingBottom() + this._cachedBorderBottom; + + switch(this.getOverflow()) + { + case "scroll": + case "scrollX": + qx.ui.core.Widget.initOverflow(); + fh += qx.ui.core.Widget.SCROLLBAR_SIZE; + break; + + case "auto": + // This seems to be really hard to implement + // this.debug("Check Auto Scroll-Y: " + this.getPreferredBoxWidth() + " :: " + this.getBoxWidth()); + break; + } + + return fh; +} + +qx.Proto._invalidateFrameDimensions = function() +{ + this._invalidateFrameWidth(); + this._invalidateFrameHeight(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS: INNER +--------------------------------------------------------------------------- +*/ + +qx.OO.addCachedProperty({ name : "preferredInnerWidth", defaultValue : null, addToQueueRuntime : true }); +qx.OO.addCachedProperty({ name : "preferredInnerHeight", defaultValue : null, addToQueueRuntime : true }); + +qx.Proto._invalidatePreferredInnerDimensions = function() +{ + this._invalidatePreferredInnerWidth(); + this._invalidatePreferredInnerHeight(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS: BOX +--------------------------------------------------------------------------- +*/ + +qx.OO.addCachedProperty({ name : "preferredBoxWidth", defaultValue : null }); +qx.OO.addCachedProperty({ name : "preferredBoxHeight", defaultValue : null }); + +qx.Proto._computePreferredBoxWidth = function() +{ + try { + return Math.max(0, this.getPreferredInnerWidth() + this.getFrameWidth()); + } catch(ex) { + this.error("_computePreferredBoxWidth failed", ex); + } +} + +qx.Proto._computePreferredBoxHeight = function() +{ + try { + return Math.max(0, this.getPreferredInnerHeight() + this.getFrameHeight()); + } catch(ex) { + this.error("_computePreferredBoxHeight failed", ex); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT QUEUE +--------------------------------------------------------------------------- +*/ + +qx.Proto._initialLayoutDone = false; + +qx.Proto.addToLayoutChanges = function(p) +{ + if (this._isDisplayable) { + this.getParent()._addChildToChildrenQueue(this); + } + + return this._layoutChanges[p] = true; +} + +qx.Proto.addToQueue = function(p) { + this._initialLayoutDone ? this.addToJobQueue(p) : this.addToLayoutChanges(p); +} + +qx.Proto.addToQueueRuntime = function(p) { + return !this._initialLayoutDone || this.addToJobQueue(p); +} + + + + + + + +/* +--------------------------------------------------------------------------- + BORDER/MARGIN/PADDING +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyBorderX = function(vChild, vChanges, vStyle) +{ + var vBorder = vChild.getBorder(); + vBorder ? vBorder._applyWidgetX(vChild) : qx.renderer.border.Border._resetBorderX(vChild); +} + +qx.Proto._applyBorderY = function(vChild, vChanges, vStyle) +{ + var vBorder = vChild.getBorder(); + vBorder ? vBorder._applyWidgetY(vChild) : qx.renderer.border.Border._resetBorderY(vChild); +} + +qx.Proto._applyPaddingX = qx.lang.Function.returnTrue; +qx.Proto._applyPaddingY = qx.lang.Function.returnTrue; + + + + + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT AUTO/PERCENT CACHE +--------------------------------------------------------------------------- +*/ + +qx.OO.addCachedProperty({ name : "hasPercentX", defaultValue : false }); +qx.OO.addCachedProperty({ name : "hasPercentY", defaultValue : false }); +qx.OO.addCachedProperty({ name : "hasAutoX", defaultValue : false }); +qx.OO.addCachedProperty({ name : "hasAutoY", defaultValue : false }); +qx.OO.addCachedProperty({ name : "hasFlexX", defaultValue : false }); +qx.OO.addCachedProperty({ name : "hasFlexY", defaultValue : false }); + +qx.Proto._computeHasPercentX = function() { + return (this._computedLeftTypePercent || + this._computedWidthTypePercent || + this._computedMinWidthTypePercent || + this._computedMaxWidthTypePercent || + this._computedRightTypePercent); +} + +qx.Proto._computeHasPercentY = function() { + return (this._computedTopTypePercent || + this._computedHeightTypePercent || + this._computedMinHeightTypePercent || + this._computedMaxHeightTypePercent || + this._computedBottomTypePercent); +} + +qx.Proto._computeHasAutoX = function() { + return (this._computedWidthTypeAuto || + this._computedMinWidthTypeAuto || + this._computedMaxWidthTypeAuto); +} + +qx.Proto._computeHasAutoY = function() { + return (this._computedHeightTypeAuto || + this._computedMinHeightTypeAuto || + this._computedMaxHeightTypeAuto); +} + +qx.Proto._computeHasFlexX = function() { + return this._computedWidthTypeFlex; +} + +qx.Proto._computeHasFlexY = function() { + return this._computedHeightTypeFlex; +} + + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT TYPE INDENTIFY HELPER METHODS +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget.TYPE_NULL = 0; +qx.ui.core.Widget.TYPE_PIXEL = 1; +qx.ui.core.Widget.TYPE_PERCENT = 2; +qx.ui.core.Widget.TYPE_AUTO = 3; +qx.ui.core.Widget.TYPE_FLEX = 4; + +qx.Proto._evalUnitsPixelPercentAutoFlex = function(propValue) +{ + switch(propValue) + { + case "auto": + return qx.ui.core.Widget.TYPE_AUTO; + + case Infinity: + case -Infinity: + return qx.ui.core.Widget.TYPE_NULL; + } + + switch(typeof propValue) + { + case "number": + return isNaN(propValue) ? qx.ui.core.Widget.TYPE_NULL : qx.ui.core.Widget.TYPE_PIXEL; + + case "string": + return propValue.indexOf("%") != -1 ? qx.ui.core.Widget.TYPE_PERCENT : propValue.indexOf("*") != -1 ? qx.ui.core.Widget.TYPE_FLEX : qx.ui.core.Widget.TYPE_NULL; + } + + return qx.ui.core.Widget.TYPE_NULL; +} + +qx.Proto._evalUnitsPixelPercentAuto = function(propValue) +{ + switch(propValue) + { + case "auto": + return qx.ui.core.Widget.TYPE_AUTO; + + case Infinity: + case -Infinity: + return qx.ui.core.Widget.TYPE_NULL; + } + + switch(typeof propValue) + { + case "number": + return isNaN(propValue) ? qx.ui.core.Widget.TYPE_NULL : qx.ui.core.Widget.TYPE_PIXEL; + + case "string": + return propValue.indexOf("%") != -1 ? qx.ui.core.Widget.TYPE_PERCENT : qx.ui.core.Widget.TYPE_NULL; + } + + return qx.ui.core.Widget.TYPE_NULL; +} + +qx.Proto._evalUnitsPixelPercent = function(propValue) +{ + switch(propValue) + { + case Infinity: + case -Infinity: + return qx.ui.core.Widget.TYPE_NULL; + } + + switch(typeof propValue) + { + case "number": + return isNaN(propValue) ? qx.ui.core.Widget.TYPE_NULL : qx.ui.core.Widget.TYPE_PIXEL; + + case "string": + return propValue.indexOf("%") != -1 ? qx.ui.core.Widget.TYPE_PERCENT : qx.ui.core.Widget.TYPE_NULL; + } + + return qx.ui.core.Widget.TYPE_NULL; +} + + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT TYPE AND VALUE KEY PRE-CACHE +--------------------------------------------------------------------------- +*/ + +qx.ui.core.Widget.layoutPropertyTypes = {}; + +qx.ui.core.Widget.initLayoutProperties = function() +{ + var a = [ "width", "height", + "minWidth", "maxWidth", + "minHeight", "maxHeight", + "left", "right", "top", "bottom" ]; + + for (var i=0, l=a.length, p, b, t; i<l; i++) + { + p = a[i]; + b = "_computed" + qx.lang.String.toFirstUp(p); + t = b + "Type"; + + qx.ui.core.Widget.layoutPropertyTypes[p] = + { + dataType : t, + dataParsed : b + "Parsed", + dataValue : b + "Value", + + typePixel : t + "Pixel", + typePercent : t + "Percent", + typeAuto : t + "Auto", + typeFlex : t + "Flex", + typeNull : t + "Null" + } + } +} + +qx.ui.core.Widget.initLayoutProperties(); + + + + + +/* +--------------------------------------------------------------------------- + LAYOUT TYPE AND VALUE STORAGE +--------------------------------------------------------------------------- +*/ + +qx.Proto._unitDetectionPixelPercentAutoFlex = function(propData, propValue) +{ + var r = qx.ui.core.Widget.layoutPropertyTypes[propData.name]; + + var s = r.dataType; + var p = r.dataParsed; + var v = r.dataValue; + + var s1 = r.typePixel; + var s2 = r.typePercent; + var s3 = r.typeAuto; + var s4 = r.typeFlex; + var s5 = r.typeNull; + + var wasPercent = this[s2]; + var wasAuto = this[s3]; + var wasFlex = this[s4]; + + switch(this[s] = this._evalUnitsPixelPercentAutoFlex(propValue)) + { + case qx.ui.core.Widget.TYPE_PIXEL: + this[s1] = true; + this[s2] = this[s3] = this[s4] = this[s5] = false; + this[p] = this[v] = Math.round(propValue); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + this[s2] = true; + this[s1] = this[s3] = this[s4] = this[s5] = false; + this[p] = parseFloat(propValue); + this[v] = null; + break; + + case qx.ui.core.Widget.TYPE_AUTO: + this[s3] = true; + this[s1] = this[s2] = this[s4] = this[s5] = false; + this[p] = this[v] = null; + break; + + case qx.ui.core.Widget.TYPE_FLEX: + this[s4] = true; + this[s1] = this[s2] = this[s3] = this[s5] = false; + this[p] = parseFloat(propValue); + this[v] = null; + break; + + default: + this[s5] = true; + this[s1] = this[s2] = this[s3] = this[s4] = false; + this[p] = this[v] = null; + break; + } + + if (wasPercent != this[s2]) + { + switch(propData.name) + { + case "minWidth": + case "maxWidth": + case "width": + case "left": + case "right": + this._invalidateHasPercentX(); + break; + + case "maxHeight": + case "minHeight": + case "height": + case "top": + case "bottom": + this._invalidateHasPercentY(); + break; + } + } + + // No ELSE because you can also switch from percent to auto + if (wasAuto != this[s3]) + { + switch(propData.name) + { + case "minWidth": + case "maxWidth": + case "width": + this._invalidateHasAutoX(); + break; + + case "minHeight": + case "maxHeight": + case "height": + this._invalidateHasAutoY(); + break; + } + } + + // No ELSE because you can also switch from percent to auto + if (wasFlex != this[s4]) + { + switch(propData.name) + { + case "width": + this._invalidateHasFlexX(); + break; + + case "height": + this._invalidateHasFlexY(); + break; + } + } +} + +qx.Proto._unitDetectionPixelPercentAuto = function(propData, propValue) +{ + var r = qx.ui.core.Widget.layoutPropertyTypes[propData.name]; + + var s = r.dataType; + var p = r.dataParsed; + var v = r.dataValue; + + var s1 = r.typePixel; + var s2 = r.typePercent; + var s3 = r.typeAuto; + var s4 = r.typeNull; + + var wasPercent = this[s2]; + var wasAuto = this[s3]; + + switch(this[s] = this._evalUnitsPixelPercentAuto(propValue)) + { + case qx.ui.core.Widget.TYPE_PIXEL: + this[s1] = true; + this[s2] = this[s3] = this[s4] = false; + this[p] = this[v] = Math.round(propValue); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + this[s2] = true; + this[s1] = this[s3] = this[s4] = false; + this[p] = parseFloat(propValue); + this[v] = null; + break; + + case qx.ui.core.Widget.TYPE_AUTO: + this[s3] = true; + this[s1] = this[s2] = this[s4] = false; + this[p] = this[v] = null; + break; + + default: + this[s4] = true; + this[s1] = this[s2] = this[s3] = false; + this[p] = this[v] = null; + break; + } + + if (wasPercent != this[s2]) + { + switch(propData.name) + { + case "minWidth": + case "maxWidth": + case "width": + case "left": + case "right": + this._invalidateHasPercentX(); + break; + + case "minHeight": + case "maxHeight": + case "height": + case "top": + case "bottom": + this._invalidateHasPercentY(); + break; + } + } + + // No ELSE because you can also switch from percent to auto + if (wasAuto != this[s3]) + { + switch(propData.name) + { + case "minWidth": + case "maxWidth": + case "width": + this._invalidateHasAutoX(); + break; + + case "minHeight": + case "maxHeight": + case "height": + this._invalidateHasAutoY(); + break; + } + } +} + +qx.Proto._unitDetectionPixelPercent = function(propData, propValue) +{ + var r = qx.ui.core.Widget.layoutPropertyTypes[propData.name]; + + var s = r.dataType; + var p = r.dataParsed; + var v = r.dataValue; + + var s1 = r.typePixel; + var s2 = r.typePercent; + var s3 = r.typeNull; + + var wasPercent = this[s2]; + + switch(this[s] = this._evalUnitsPixelPercent(propValue)) + { + case qx.ui.core.Widget.TYPE_PIXEL: + this[s1] = true; + this[s2] = this[s3] = false; + this[p] = this[v] = Math.round(propValue); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + this[s2] = true; + this[s1] = this[s3] = false; + this[p] = parseFloat(propValue); + this[v] = null; + break; + + default: + this[s3] = true; + this[s1] = this[s2] = false; + this[p] = this[v] = null; + break; + } + + if (wasPercent != this[s2]) + { + switch(propData.name) + { + case "minWidth": + case "maxWidth": + case "width": + case "left": + case "right": + this._invalidateHasPercentX(); + break; + + case "minHeight": + case "maxHeight": + case "height": + case "top": + case "bottom": + this._invalidateHasPercentY(); + break; + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + INLINE EVENTS +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.ui.core.Widget.inlineEventMap = + { + input : "onpropertychange", + select : "onselect", + scroll : "onscroll", + focus : "onfocus", + blur : "onblur" + } + + qx.Proto.enableInlineEvent = function(vEventName) + { + var vEventType = qx.ui.core.Widget.inlineEventMap[vEventName]; + + if (!this._inlineEvents) + { + this._inlineEvents = [vEventType]; + } + else + { + this._inlineEvents.push(vEventType); + } + + if (this._isCreated) { + this.getElement()[vEventType] = qx.ui.core.Widget.__oninlineevent; + } + } + + qx.Proto.disableInlineEvent = function(vEventName) + { + var vEventType = qx.ui.core.Widget.inlineEventMap[vEventName]; + + if (this._inlineEvents) { + qx.lang.Array.remove(this._inlineEvents, vEventType); + } + + if (this._isCreated) { + this.getElement()[vEventType] = null; + } + } + + qx.Proto._addInlineEvents = function(vElement) + { + if (this._inlineEvents) + { + for (var i=0, a=this._inlineEvents, l=a.length; i<l; i++) { + vElement[a[i]] = qx.ui.core.Widget.__oninlineevent; + } + } + } + + qx.Proto._removeInlineEvents = function(vElement) + { + if (this._inlineEvents) + { + for (var i=0, a=this._inlineEvents, l=a.length; i<l; i++) { + vElement[a[i]] = null; + } + } + } +} +else +{ + qx.Proto.enableInlineEvent = function(vEventName) + { + if (!this._inlineEvents) + { + this._inlineEvents = [vEventName]; + } + else + { + this._inlineEvents.push(vEventName); + } + + if (this._isCreated) { + this.getElement().addEventListener(vEventName, qx.ui.core.Widget.__oninlineevent, false); + } + } + + qx.Proto.disableInlineEvent = function(vEventName) + { + if (this._inlineEvents) { + qx.lang.Array.remove(this._inlineEvents, vEventName); + } + + if (this._isCreated) { + this.getElement().removeEventListener(vEventName, qx.ui.core.Widget.__oninlineevent, false); + } + } + + qx.Proto._addInlineEvents = function(vElement) + { + if (this._inlineEvents) + { + for (var i=0, a=this._inlineEvents, l=a.length; i<l; i++) { + vElement.addEventListener(a[i], qx.ui.core.Widget.__oninlineevent, false); + } + } + } + + qx.Proto._removeInlineEvents = function(vElement) + { + if (this._inlineEvents) + { + for (var i=0, a=this._inlineEvents, l=a.length; i<l; i++) { + vElement.removeEventListener(a[i], qx.ui.core.Widget.__oninlineevent, false); + } + } + } +} + +qx.ui.core.Widget.__oninlineevent = function(e) +{ + if (!e) { + e = window.event; + } + + if (this.qx_Widget) { + return this.qx_Widget._oninlineevent(e); + } +} + +qx.Proto._oninlineevent = function(e) +{ + if (qx.ui.core.Widget._inFlushGlobalQueues) { + return; + } + + // this.debug("Inlineevent: " + e.type); + + switch(e.type) + { + case "propertychange": + this._oninlineproperty(e); + break; + + case "input": + this._oninlineinput(e); + break; + + default: + this.createDispatchEvent(e.type); + } +} + +qx.Proto._oninlineinput = function(e) +{ + this.createDispatchDataEvent("input", this.getComputedValue()); + + // Block parents from this event + if (e.stopPropagation) { + e.stopPropagation(); + } + + e.returnValue = -1; +} + +qx.Proto._oninlineproperty = function(e) +{ + switch(e.propertyName) + { + case "value": + if (!this._inValueProperty) { + this._oninlineinput(e); + } + + break; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN MANAGMENT +--------------------------------------------------------------------------- +*/ + +/*! + The widget which is at the top level, + which contains all others (normally a + instance of qx.ui.core.ClientDocument). +*/ +qx.Proto.getTopLevelWidget = function() { + return this._hasParent ? this.getParent().getTopLevelWidget() : null; +} + +/*! + Move myself to immediately before another child of the same parent. +*/ +qx.Proto.moveSelfBefore = function(vBefore) { + this.getParent().addBefore(this, vBefore); +} + +/*! + Move myself to immediately after another child of the same parent. +*/ +qx.Proto.moveSelfAfter = function(vAfter) { + this.getParent().addAfter(this, vAfter); +} + +/*! + Move myself to the head of the list: make me the first child. +*/ +qx.Proto.moveSelfToBegin = function() { + this.getParent().addAtBegin(this); +} + +/*! + Move myself to the end of the list: make me the last child. +*/ +qx.Proto.moveSelfToEnd = function() { + this.getParent().addAtEnd(this); +} + +/*! + Returns the previous sibling. +*/ +qx.Proto.getPreviousSibling = function() +{ + var p = this.getParent(); + + if(p == null) { + return null; + } + + var cs = p.getChildren(); + return cs[cs.indexOf(this) - 1]; +} + +/*! + Returns the next sibling. +*/ +qx.Proto.getNextSibling = function() +{ + var p = this.getParent(); + + if(p == null) { + return null; + } + + var cs = p.getChildren(); + return cs[cs.indexOf(this) + 1]; +} + +/*! + Returns the previous visible sibling. +*/ +qx.Proto.getPreviousVisibleSibling = function() +{ + if(!this._hasParent) { + return null; + } + + var vChildren = this.getParent().getVisibleChildren(); + return vChildren[vChildren.indexOf(this) - 1]; +} + +/*! + Returns the next visible sibling. +*/ +qx.Proto.getNextVisibleSibling = function() +{ + if(!this._hasParent) { + return null; + } + + var vChildren = this.getParent().getVisibleChildren(); + return vChildren[vChildren.indexOf(this) + 1]; +} + +qx.Proto.getPreviousActiveSibling = function(vIgnoreClasses) +{ + var vPrev = qx.ui.core.Widget.getActiveSiblingHelper(this, this.getParent(), -1, vIgnoreClasses, null); + return vPrev ? vPrev : this.getParent().getLastActiveChild(); +} + +qx.Proto.getNextActiveSibling = function(vIgnoreClasses) +{ + var vNext = qx.ui.core.Widget.getActiveSiblingHelper(this, this.getParent(), 1, vIgnoreClasses, null); + return vNext ? vNext : this.getParent().getFirstActiveChild(); +} + +qx.Proto.isFirstChild = function() { + return this._hasParent && this.getParent().getFirstChild() == this; +} + +qx.Proto.isLastChild = function() { + return this._hasParent && this.getParent().getLastChild() == this; +} + +qx.Proto.isFirstVisibleChild = function() { + return this._hasParent && this.getParent().getFirstVisibleChild() == this; +} + +qx.Proto.isLastVisibleChild = function() { + return this._hasParent && this.getParent().getLastVisibleChild() == this; +} + + + + + + + +/* +--------------------------------------------------------------------------- + ENABLED MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this.removeState("disabled"); + } + else + { + this.addState("disabled"); + + // Also reset some states to be sure a pressed/hovered button gets reset + this.removeState("over"); + + if (qx.OO.isAvailable("qx.ui.form.Button")) + { + this.removeState("abandoned"); + this.removeState("pressed"); + } + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + STATE HANDLING +--------------------------------------------------------------------------- +*/ + +/** + * Returns whether a state is set. + * + * @param vState {String} the state to check. + * @return {Boolean} whether the state is set. + */ +qx.Proto.hasState = function(vState) { + return this._states[vState] ? true : false; +} + +/** + * Sets a state. + * + * @param state {String} the state to set. + */ +qx.Proto.addState = function(vState) +{ + if (! this._states[vState]) { + this._states[vState] = true; + + if (this._hasParent) { + qx.ui.core.Widget.addToGlobalStateQueue(this); + } + } +} + +/** + * Clears a state. + * + * @param vState {String} the state to clear. + */ +qx.Proto.removeState = function(vState) +{ + if (this._states[vState]) { + delete this._states[vState]; + + if (this._hasParent) { + qx.ui.core.Widget.addToGlobalStateQueue(this); + } + } +} + +/** + * Sets or clears a state. + * + * @param state {String} the state to set or clear. + * @param enabled {Boolean} whether the state should be set. + * If false it will be cleared. + */ +qx.Proto.setState = function(state, enabled) { + if (enabled) { + this.addState(state); + } else { + this.removeState(state); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + APPEARANCE +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyInitialAppearance = function() +{ + var vAppearance = this.getAppearance(); + + if (vAppearance) + { + try + { + var r = qx.manager.object.AppearanceManager.getInstance().getAppearanceTheme().initialFrom(vAppearance); + if (r) { + this.set(r); + } + } + catch(ex) + { + this.error("Could not apply initial appearance", ex); + } + } +} + +qx.Proto._applyStateAppearance = function() +{ + // HACK: Is there a cleaner way to implement this? + // Maybe not use the appearance for this, but a simple property and event handler combination? + this._applyStateStyleFocus(this._states); + + var vAppearance = this.getAppearance(); + + if (vAppearance) + { + try + { + var r = qx.manager.object.AppearanceManager.getInstance().getAppearanceTheme().stateFrom(vAppearance, this._states); + if (r) { + this.set(r); + } + } + catch(ex) + { + this.error("Could not apply state appearance", ex); + } + } +} + +qx.Proto._resetAppearanceThemeWrapper = function(vNewAppearanceTheme, vOldAppearanceTheme) +{ + var vAppearance = this.getAppearance(); + + if (vAppearance) + { + var vOldAppearanceThemeObject = qx.manager.object.AppearanceManager.getInstance().getThemeById(vOldAppearanceTheme); + var vNewAppearanceThemeObject = qx.manager.object.AppearanceManager.getInstance().getThemeById(vNewAppearanceTheme); + + var vOldAppearanceProperties = qx.lang.Object.mergeWith(vOldAppearanceThemeObject.initialFrom(vAppearance), vOldAppearanceThemeObject.stateFrom(vAppearance, this._states)); + var vNewAppearanceProperties = qx.lang.Object.mergeWith(vNewAppearanceThemeObject.initialFrom(vAppearance), vNewAppearanceThemeObject.stateFrom(vAppearance, this._states)); + + for (var vProp in vOldAppearanceProperties) + { + if (!(vProp in vNewAppearanceProperties)) { + this[qx.OO.resetter[vProp]](); + } + } + + this.set(vNewAppearanceProperties); + } +} + +if (qx.core.Client.getInstance().isMshtml()) +{ + /* + Mshtml does not support outlines by css + */ + qx.Proto._applyStateStyleFocus = function(vStates) {} +} +else if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._applyStateStyleFocus = function(vStates) + { + if (vStates.focused) + { + if (!qx.event.handler.FocusHandler.mouseFocus && !this.getHideFocus()) + { + this.setStyleProperty("MozOutline", "1px dotted invert"); + } + } + else + { + this.removeStyleProperty("MozOutline"); + } + } +} +else +{ + qx.Proto._applyStateStyleFocus = function(vStates) + { + if (vStates.focused) + { + if (!qx.event.handler.FocusHandler.mouseFocus && !this.getHideFocus()) + { + this.setStyleProperty("outline", "1px dotted invert"); + } + } + else + { + this.setStyleProperty("outline", "0px none"); + } + } +} + +qx.Proto.addToStateQueue = function() { + qx.ui.core.Widget.addToGlobalStateQueue(this); +} + +qx.Proto.recursiveAddToStateQueue = function() { + this.addToStateQueue(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + APPEARANCE MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyAppearance = function(propValue, propOldValue, propData) +{ + var vAppearanceThemeObject = qx.manager.object.AppearanceManager.getInstance().getAppearanceTheme(); + + var vNewAppearanceProperties = vAppearanceThemeObject.initialFrom(propValue); + + if (this.isCreated()) { + qx.lang.Object.mergeWith(vNewAppearanceProperties, vAppearanceThemeObject.stateFrom(propValue, this._states)); + } + + if (propOldValue) + { + var vOldAppearanceProperties = vAppearanceThemeObject.initialFrom(propOldValue); + + if (this.isCreated()) { + qx.lang.Object.mergeWith(vOldAppearanceProperties, vAppearanceThemeObject.stateFrom(propOldValue, this._states)); + } + + for (var vProp in vOldAppearanceProperties) + { + if (!(vProp in vNewAppearanceProperties)) { + this[qx.OO.resetter[vProp]](); + } + } + } + + this.set(vNewAppearanceProperties); + + return true; +} + +qx.Proto._recursiveAppearanceThemeUpdate = function(vNewAppearanceTheme, vOldAppearanceTheme) +{ + try + { + this._resetAppearanceThemeWrapper(vNewAppearanceTheme, vOldAppearanceTheme); + } + catch(ex) + { + this.error("Failed to update appearance theme", ex); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + ELEMENT DATA +--------------------------------------------------------------------------- +*/ + +/*! + Placeholder method to add attributes and other content to element node +*/ +qx.Proto._applyElementData = function(el) {} + + + + + + +/* +--------------------------------------------------------------------------- + HTML PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.setHtmlProperty = function(propName, propValue) +{ + if (!this._htmlProperties) { + this._htmlProperties = {}; + } + + this._htmlProperties[propName] = propValue; + + if (this._isCreated && this.getElement()[propName] != propValue) { + this.getElement()[propName] = propValue; + } + + return true; +} + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.removeHtmlProperty = function(propName) + { + if (!this._htmlProperties) { + return; + } + + delete this._htmlProperties[propName]; + + if (this._isCreated) { + this.getElement().removeAttribute(propName); + } + + return true; + } +} +else +{ + qx.Proto.removeHtmlProperty = function(propName) + { + if (!this._htmlProperties) { + return; + } + + delete this._htmlProperties[propName]; + + if (this._isCreated) + { + this.getElement().removeAttribute(propName); + delete this.getElement()[propName]; + } + + return true; + } +} + +qx.Proto.getHtmlProperty = function(propName) +{ + if (!this._htmlProperties) { + return ""; + } + + return this._htmlProperties[propName] || ""; +} + +qx.Proto._applyHtmlProperties = function(vElement) +{ + var vProperties = this._htmlProperties; + + if (vProperties) + { + // this.debug("HTML-Properties: " + qx.lang.Object.getLength(vProperties)); + + var propName; + + for (propName in vProperties) { + vElement[propName] = vProperties[propName]; + } + } +} + + + + + + +/* +--------------------------------------------------------------------------- + HTML ATTRIBUTES +--------------------------------------------------------------------------- +*/ + +qx.Proto.setHtmlAttribute = function(propName, propValue) +{ + if (!this._htmlAttributes) { + this._htmlAttributes = {}; + } + + this._htmlAttributes[propName] = propValue; + + if (this._isCreated) { + this.getElement().setAttribute(propName, propValue); + } + + return true; +} + +qx.Proto.removeHtmlAttribute = function(propName) +{ + if (!this._htmlAttributes) { + return; + } + + delete this._htmlAttributes[propName]; + + if (this._isCreated) { + this.getElement().removeAttribute(propName); + } + + return true; +} + +qx.Proto.getHtmlAttribute = function(propName) +{ + if (!this._htmlAttributes) { + return ""; + } + + return this._htmlAttributes[propName] || ""; +} + +qx.Proto._applyHtmlAttributes = function(vElement) +{ + var vAttributes = this._htmlAttributes; + + if (vAttributes) + { + // this.debug("HTML-Attributes: " + qx.lang.Object.getLength(vAttributes)); + + var propName; + + for (propName in vAttributes) { + vElement.setAttribute(propName, vAttributes[propName]); + } + } +} + + + + + + +/* +--------------------------------------------------------------------------- + STYLE PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getStyleProperty = function(propName) { + return this._styleProperties[propName] || ""; +} + +qx.Proto.setStyleProperty = function(propName, propValue) +{ + this._styleProperties[propName] = propValue; + + if (this._isCreated) + { + /* + The zIndex and filter properties should always be + applied on the "real" element node. + */ + switch(propName) + { + case "zIndex": + case "filter": + case "display": + case "visibility": + var vElement = this.getElement(); + break; + + default: + var vElement = this._getTargetNode(); + } + + if (vElement) { + vElement.style[propName] = propValue; + } + } + + return true; +} + +qx.Proto.removeStyleProperty = function(propName) +{ + delete this._styleProperties[propName]; + + if (this._isCreated) + { + /* + The zIndex and filter properties should always be + applied on the "real" element node. + */ + switch(propName) + { + case "zIndex": + case "filter": + case "display": + case "visibility": + var vElement = this.getElement(); + break; + + default: + var vElement = this._getTargetNode(); + } + + if (vElement) { + vElement.style[propName] = ""; + } + } + + return true; +} + +qx.Proto._applyStyleProperties = function(vElement) +{ + var vProperties = this._styleProperties; + var propName; + + var vBaseElement = vElement; + var vTargetElement = this._getTargetNode(); + + for (propName in vProperties) + { + /* + The zIndex and filter properties should always be + applied on the "real" element node. + */ + switch(propName) + { + case "zIndex": + case "filter": + vElement = vBaseElement; + break; + + default: + vElement = vTargetElement; + } + + var value = vProperties[propName]; + vElement.style[propName] = (value == null) ? "" : value; + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + FOCUS HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.isFocusable = function() { + return this.isEnabled() && this.isSeeable() && this.getTabIndex() >= 0; +} + +qx.Proto.isFocusRoot = function() { + return false; +} + +qx.Proto.getFocusRoot = function() +{ + if(this._hasParent) { + return this.getParent().getFocusRoot(); + } + + return null; +} + +qx.Proto.getActiveChild = function() +{ + var vRoot = this.getFocusRoot(); + if (vRoot) { + return vRoot.getActiveChild(); + } + + return null; +} + +qx.Proto._ontabfocus = qx.lang.Function.returnTrue; + +qx.Proto._modifyFocused = function(propValue, propOldValue, propData) +{ + if (!this.isCreated()) { + return true; + } + + var vFocusRoot = this.getFocusRoot(); + + // this.debug("Focused: " + propValue); + + if (vFocusRoot) + { + // may be undefined if this widget has been removed + if (propValue) + { + vFocusRoot.setFocusedChild(this); + this._visualizeFocus(); + } + else + { + if (vFocusRoot.getFocusedChild() == this) { + vFocusRoot.setFocusedChild(null); + } + + this._visualizeBlur(); + } + } + + return true; +} + +qx.Proto._visualizeBlur = function() +{ + // Force blur, even if mouseFocus is not active because we + // need to be sure that the previous focus rect gets removed. + // But this only needs to be done, if there is no new focused element. + if (this.getEnableElementFocus() && (!this.getFocusRoot().getFocusedChild() || (this.getFocusRoot().getFocusedChild() && this.getFocusRoot().getFocusedChild().getEnableElementFocus()))) + { + try { + this.getElement().blur(); + } catch(ex) {}; + } + + this.removeState("focused"); + return true; +} + +qx.Proto._visualizeFocus = function() +{ + //this.info("_visualizeFocus: " + qx.event.handler.FocusHandler.mouseFocus); + if (!qx.event.handler.FocusHandler.mouseFocus && this.getEnableElementFocus()) + { + try { + this.getElement().focus(); + } catch(ex) {}; + } + + this.addState("focused"); + return true; +} + +qx.Proto.focus = function() +{ + delete qx.event.handler.FocusHandler.mouseFocus; + this.setFocused(true); +} + +qx.Proto.blur = function() +{ + delete qx.event.handler.FocusHandler.mouseFocus; + this.setFocused(false); +} + + + + +/* +--------------------------------------------------------------------------- + CAPTURE +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyCapture = function(propValue, propOldValue, propData) +{ + var vMgr = qx.event.handler.EventHandler.getInstance(); + + if (propOldValue) + { + vMgr.setCaptureWidget(null); + } + else if (propValue) + { + vMgr.setCaptureWidget(this); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + ZINDEX +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyZIndex = function(propValue, propOldValue, propData) { + return this.setStyleProperty(propData.name, propValue); +} + + + + + + + +/* +--------------------------------------------------------------------------- + TAB INDEX +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifyTabIndex = function(propValue, propOldValue, propData) + { + if (propValue < 0 || !this.getEnabled()) { + this.setHtmlProperty("unselectable", + "on"); + } else { + this.removeHtmlProperty("unselectable"); + } + + this.setHtmlProperty("tabIndex", + propValue < 0 ? -1 : 1); + + return true; + } +} +else if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._modifyTabIndex = function(propValue, propOldValue, propData) + { + this.setStyleProperty("MozUserFocus", + (propValue < 0 + ? "ignore" + : "normal")); + + // be forward compatible (CSS 3 Draft) + this.setStyleProperty("userFocus", + (propValue < 0 + ? "ignore" + : "normal")); + + return true; + } +} +else +{ + qx.Proto._modifyTabIndex = function(propValue, propOldValue, propData) + { + // CSS 3 Draft + this.setStyleProperty("userFocus", + (propValue < 0 + ? "ignore" + : "normal")); + + // IE Backward Compatible + if (propValue < 0 || !this.getEnabled()) { + this.setHtmlProperty("unselectable", + "on"); + } else { + this.removeHtmlProperty("unselectable"); + } + + this.setHtmlProperty("tabIndex", + propValue < 0 ? -1 : 1); + + return true; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + CSS CLASS NAME +--------------------------------------------------------------------------- +*/ + +qx.Proto.setCssClassName = function(propValue) { + this.setHtmlProperty("className", propValue); +} + +qx.Proto.getCssClassName = function() { + return this.getHtmlProperty("className"); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + WIDGET FROM POINT +--------------------------------------------------------------------------- +*/ + +qx.Proto.getWidgetFromPoint = function(x, y) +{ + var ret = this.getWidgetFromPointHelper(x, y); + return ret && ret != this ? ret : null; +} + +qx.Proto.getWidgetFromPointHelper = function(x, y) { + return this; +} + + + + + + +/* +--------------------------------------------------------------------------- + CAN SELECT +--------------------------------------------------------------------------- +*/ + +if(qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifySelectable = function(propValue, propOldValue, propData) + { + if (propValue) + { + return this.removeHtmlProperty("unselectable"); + } + else + { + return this.setHtmlProperty("unselectable", "on"); + } + } +} +else if(qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._modifySelectable = function(propValue, propOldValue, propData) + { + if (propValue) + { + this.removeStyleProperty("MozUserSelect"); + } + else + { + this.setStyleProperty("MozUserSelect", "none"); + } + + return true; + }; +} +else if (qx.core.Client.getInstance().isOpera()) +{ + // No known method available for this client + qx.Proto._modifySelectable = function(propValue, propOldValue, propData) { + return true; + } +} +else if (qx.core.Client.getInstance().isKhtml() || qx.core.Client.getInstance().isWebkit()) +{ + qx.Proto._modifySelectable = function(propValue, propOldValue, propData) + { + // Be forward compatible and use both userSelect and KhtmlUserSelect + if (propValue) + { + this.removeStyleProperty("KhtmlUserSelect"); + } + else + { + this.setStyleProperty("KhtmlUserSelect", "none"); + } + + return true; + }; +} +else +{ + qx.Proto._modifySelectable = function(propValue, propOldValue, propData) + { + if (propValue) + { + return this.removeStyleProperty("userSelect"); + } + else + { + this.setStyleProperty("userSelect", "none"); + } + } +} + + + + + + +/* +--------------------------------------------------------------------------- + OPACITY +--------------------------------------------------------------------------- +*/ + +/*! +Sets the opacity for the widget. Any child widget inside the widget will also +become (semi-)transparent. The value should be a number between 0 and 1 +inclusive, where 1 means totally opaque and 0 invisible. +*/ +if(qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifyOpacity = function(propValue, propOldValue, propData) + { + if(propValue == null || propValue >= 1 || propValue < 0) + { + this.removeStyleProperty("filter"); + } + else + { + this.setStyleProperty("filter", + ("Alpha(Opacity=" + + Math.round(propValue * 100) + + ")")); + } + + return true; + } +} +else +{ + qx.Proto._modifyOpacity = function(propValue, propOldValue, propData) + { + if(propValue == null || propValue > 1) + { + if (qx.core.Client.getInstance().isGecko()) + { + this.removeStyleProperty("MozOpacity"); + } + else if (qx.core.Client.getInstance().isKhtml()) + { + this.removeStyleProperty("KhtmlOpacity"); + } + + this.removeStyleProperty("opacity"); + } + else + { + propValue = qx.lang.Number.limit(propValue, 0, 1); + + // should we omit gecko's flickering here + // and limit the max value to 0.99? + + if (qx.core.Client.getInstance().isGecko()) + { + this.setStyleProperty("MozOpacity", propValue); + } + else if (qx.core.Client.getInstance().isKhtml()) + { + this.setStyleProperty("KhtmlOpacity", propValue); + } + + this.setStyleProperty("opacity", propValue); + } + + return true; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + CURSOR +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyCursor = function(propValue, propOldValue, propData) +{ + if (propValue) + { + if (propValue == "pointer" && + qx.core.Client.getInstance().isMshtml()) { + this.setStyleProperty("cursor", + "hand"); + } else { + this.setStyleProperty("cursor", + propValue); + } + } + else + { + this.removeStyleProperty("cursor"); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + BACKGROUND IMAGE +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyBackgroundImage = function(propValue, propOldValue, propData) +{ + return qx.util.Validation.isValidString(propValue) ? + this.setStyleProperty("backgroundImage", + "url(" + + qx.manager.object.AliasManager.getInstance().resolvePath(propValue) + + ")") : + this.removeStyleProperty("backgroundImage"); +} + + + + + + +/* +--------------------------------------------------------------------------- + CLIPPING +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyClip = function(propValue, propOldValue, propData) { + return this._compileClipString(); +} + +qx.Proto._compileClipString = function() +{ + var vLeft = this.getClipLeft(); + var vTop = this.getClipTop(); + var vWidth = this.getClipWidth(); + var vHeight = this.getClipHeight(); + + var vRight, vBottom; + + if(vLeft == null) + { + vRight = (vWidth == null + ? "auto" + : vWidth + "px"); + vLeft = "auto"; + } + else + { + vRight = (vWidth == null + ? "auto" + : vLeft + vWidth + "px"); + vLeft = vLeft + "px"; + } + + if(vTop == null) + { + vBottom = (vHeight == null + ? "auto" + : vHeight + "px"); + vTop = "auto"; + } + else + { + vBottom = (vHeight == null + ? "auto" + : vTop + vHeight + "px"); + vTop = vTop + "px"; + } + + return this.setStyleProperty("clip", + ("rect(" + + vTop + + "," + + vRight + + "," + + vBottom + + "," + + vLeft + + ")")); +} + + + + + + +/* +--------------------------------------------------------------------------- + OVERFLOW +--------------------------------------------------------------------------- +*/ + +/* + This will measure the typical native scrollbar size in the environment +*/ +qx.ui.core.Widget.initOverflow = function() +{ + if (qx.ui.core.Widget.initOverflowDone) { + return; + } + + var t = document.createElement("div"); + var s = t.style; + + s.height = s.width = "100px"; + s.overflow = "scroll"; + + document.body.appendChild(t); + + var c = qx.html.Dimension.getScrollBarSizeRight(t); + if (c) { + qx.ui.core.Widget.SCROLLBAR_SIZE = c; + } + + document.body.removeChild(t); + + qx.ui.core.Widget.initOverflowDone = true; +} + +if (qx.core.Client.getInstance().isGecko()) +{ + qx.Proto._modifyOverflow = function(propValue, propOldValue, propData) + { + var pv = propValue; + var pn = propData.name; + + switch(pv) + { + case "hidden": + pv = "-moz-scrollbars-none"; + break; + + case "scrollX": + pv = "-moz-scrollbars-horizontal"; + break; + + case "scrollY": + pv = "-moz-scrollbars-vertical"; + break; + } + + return this._applyOverflow(pn, pv, propValue, propOldValue); + } +} + +// Mshtml conforms here to CSS3 Spec. Eventually there will be multiple +// browsers which support these new overflowX overflowY properties. +else if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifyOverflow = function(propValue, propOldValue, propData) + { + var pv = propValue; + var pn = propData.name; + + switch(pv) + { + case "scrollX": + pn = "overflowX"; + pv = "scroll"; + break; + + case "scrollY": + pn = "overflowY"; + pv = "scroll"; + break; + } + + // Clear up concurrenting rules + var a = [ "overflow", + "overflowX", + "overflowY" ]; + for (var i=0; i<a.length; i++) + { + if (a[i]!=pn) { + this.removeStyleProperty(a[i]); + } + } + + return this._applyOverflow(pn, pv, propValue, propOldValue); + } +} + +// Opera/Khtml Mode... +// hopefully somewhat of this is supported in the near future. + +// overflow-x and overflow-y are also not supported by Opera 9.0 Beta1 +// and also not if we switch to IE emulation mode +else +{ + qx.Proto._modifyOverflow = function(propValue, propOldValue, propData) + { + var pv = propValue; + var pn = propData.name; + + switch(pv) + { + case "scrollX": + case "scrollY": + pv = "scroll"; + break; + } + + return this._applyOverflow(pn, pv, propValue, propOldValue); + } +} + +qx.Proto._applyOverflow = function(pn, pv, propValue, propOldValue) +{ + // Apply Style + this.setStyleProperty(pn, pv); + + // Invalidate Frame + this._invalidateFrameWidth(); + this._invalidateFrameHeight(); + + return true; +} + +qx.Proto.getOverflowX = function() +{ + var vOverflow = this.getOverflow(); + return vOverflow == "scrollY" ? "hidden" : vOverflow; +} + +qx.Proto.getOverflowY = function() +{ + var vOverflow = this.getOverflow(); + return vOverflow == "scrollX" ? "hidden" : vOverflow; +} + + + + + + +/* +--------------------------------------------------------------------------- + HIDE FOCUS +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifyHideFocus = function(propValue, propOldValue, propData) + { + this.setHtmlProperty(propData.name, propValue); + return true; + } +} + +// Need no implementation for others then mshtml, because +// all these browsers support css outlines and do not +// have an attribute "hideFocus" as IE. + + + + + + +/* +--------------------------------------------------------------------------- + COLORS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyBackgroundColor = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) + { + this._applyBackgroundColor(propValue.getStyle()); + propValue.add(this); + } + else + { + this._resetBackgroundColor(); + } + + return true; +} + +qx.Proto._modifyColor = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) + { + this._applyColor(propValue.getStyle()); + propValue.add(this); + } + else + { + this._resetColor(); + } + + return true; +} + +qx.Proto._updateColors = function(vColor, vNewValue) +{ + if (this.getColor() == vColor) { + this._applyColor(vNewValue); + } + + if (this.getBackgroundColor() == vColor) { + this._applyBackgroundColor(vNewValue); + } +} + +qx.Proto._applyColor = function(vNewValue) { + this.setStyleProperty("color", vNewValue); +} + +qx.Proto._applyBackgroundColor = function(vNewValue) { + this.setStyleProperty("backgroundColor", vNewValue); +} + +qx.Proto._resetColor = function(vNewValue) { + this.removeStyleProperty("color"); +} + +qx.Proto._resetBackgroundColor = function() { + this.removeStyleProperty("backgroundColor"); +} + + + + + + +/* +--------------------------------------------------------------------------- + BORDER +--------------------------------------------------------------------------- +*/ + +qx.Proto._cachedBorderTop = 0; +qx.Proto._cachedBorderRight = 0; +qx.Proto._cachedBorderBottom = 0; +qx.Proto._cachedBorderLeft = 0; + +qx.Proto._modifyBorder = function(propValue, propOldValue, propData) +{ + var vOldTop = this._cachedBorderTop; + var vOldRight = this._cachedBorderRight; + var vOldBottom = this._cachedBorderBottom; + var vOldLeft = this._cachedBorderLeft; + + if (propOldValue) { + propOldValue.removeListenerWidget(this); + } + + if (propValue) + { + propValue.addListenerWidget(this); + + this._cachedBorderTop = propValue.getTopWidth(); + this._cachedBorderRight = propValue.getRightWidth(); + this._cachedBorderBottom = propValue.getBottomWidth(); + this._cachedBorderLeft = propValue.getLeftWidth(); + } + else + { + this._cachedBorderTop = this._cachedBorderRight = this._cachedBorderBottom = this._cachedBorderLeft = 0; + } + + + + // ---------------- + // X-AXIS + // ---------------- + if ((vOldLeft + vOldRight) != (this._cachedBorderLeft + this._cachedBorderRight)) { + this._invalidateFrameWidth(); + } + + this.addToQueue("borderX"); + + + + // ---------------- + // Y-AXIS + // ---------------- + if ((vOldTop + vOldBottom) != (this._cachedBorderTop + this._cachedBorderBottom)) { + this._invalidateFrameHeight(); + } + + this.addToQueue("borderY"); + + + + + + return true; +} + +qx.Proto.getCachedBorderTop = function() { + return this._cachedBorderTop; +} + +qx.Proto.getCachedBorderRight = function() { + return this._cachedBorderRight; +} + +qx.Proto.getCachedBorderBottom = function() { + return this._cachedBorderBottom; +} + +qx.Proto.getCachedBorderLeft = function() { + return this._cachedBorderLeft; +} + +qx.Proto._updateBorder = function(vEdge) +{ + // Small hack, remove later: TODO + // ?? Anybody have an idea about this TODO? + var vBorder = this.getBorder(); + var vEdgeUp = qx.lang.String.toFirstUp(vEdge); + + var vNewValue = vBorder["get" + vEdgeUp + "Width"](); + var vCacheName = "_cachedBorder" + vEdgeUp; + var vWidthChanged = this[vCacheName] != vNewValue; + + this[vCacheName] = vNewValue; + + switch(vEdge) + { + case "left": + case "right": + if (vWidthChanged) { + this.addToJobQueue("borderWidthX"); + } + + this.addToJobQueue("borderX"); + break; + + case "top": + case "bottom": + if (vWidthChanged) { + this.addToJobQueue("borderWidthY"); + } + + this.addToJobQueue("borderY"); + break; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + PADDING +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyPaddingX = function(propValue, propOldValue, propData) +{ + this._invalidateFrameWidth(); + return true; +} + +qx.Proto._modifyPaddingY = function(propValue, propOldValue, propData) +{ + this._invalidateFrameHeight(); + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + CLONE +--------------------------------------------------------------------------- +*/ + +qx.Proto._clonePropertyIgnoreList = "parent,element,visible"; + + +/*! +Returns a cloned copy of the current instance of qx.ui.core.Widget. + +#param cloneRecursive[Boolean]: Should the widget cloned recursive (including all childs)? +#param customPropertyList[Array]: Optional (reduced) list of properties to copy through +*/ + +// TODO: Needs modification to work with new codebase +qx.Proto.clone = function(cloneRecursive, customPropertyList) +{ + var cloneInstance = new this.constructor; + + var propertyName; + var propertyList = []; + var propertyIngoreList = this._clonePropertyIgnoreList.split(","); + + // Build new filtered property list + var sourcePropertyList = customPropertyList != null ? customPropertyList : this._properties.split(","); + var sourcePropertyListLength = sourcePropertyList.length-1; + do { + propertyName = sourcePropertyList[sourcePropertyListLength]; + if (!qx.lang.Array.contains(propertyIngoreList, propertyName)) { + propertyList.push(propertyName); + } + } + while(sourcePropertyListLength--); + + // Apply properties to new clone instance + propertyListLength = propertyList.length-1; + do { + propertyName = qx.lang.String.toFirstUp(propertyList[propertyListLength]); + cloneInstance["set" + propertyName](this["get" + propertyName]()); + } + while(propertyListLength--); + + // post apply parent info + if (qx.lang.Array.contains(sourcePropertyList, "parent")) + { + var myParent = this.getParent(); + if (myParent) { + cloneInstance.setParent(myParent); + } + } + + // clone recursion + if (cloneRecursive) { + this._cloneRecursive(cloneInstance); + } + + return cloneInstance; +} + +qx.Proto._cloneRecursive = function(cloneInstance) {} + + + + + + +/* +--------------------------------------------------------------------------- + COMMAND INTERFACE +--------------------------------------------------------------------------- +*/ + +qx.Proto.execute = function() +{ + var vCommand = this.getCommand(); + if (vCommand) { + vCommand.execute(this); + } + + this.createDispatchEvent("execute"); +} + + + + + + +/* +--------------------------------------------------------------------------- + NODE ALIASES +--------------------------------------------------------------------------- +*/ + +qx.Proto._visualPropertyCheck = function() +{ + if (!this.isCreated()) { + throw new Error("Element must be created previously!"); + } +} + +qx.Proto.setScrollLeft = function(nScrollLeft) +{ + this._visualPropertyCheck(); + this._getTargetNode().scrollLeft = nScrollLeft; +} + +qx.Proto.setScrollTop = function(nScrollTop) +{ + this._visualPropertyCheck(); + this._getTargetNode().scrollTop = nScrollTop; +} + +qx.Proto.getOffsetLeft = function() +{ + this._visualPropertyCheck(); + return qx.html.Offset.getLeft(this.getElement()); +} + +qx.Proto.getOffsetTop = function() +{ + this._visualPropertyCheck(); + return qx.html.Offset.getTop(this.getElement()); +} + +qx.Proto.getScrollLeft = function() +{ + this._visualPropertyCheck(); + return this._getTargetNode().scrollLeft; +} + +qx.Proto.getScrollTop = function() +{ + this._visualPropertyCheck(); + return this._getTargetNode().scrollTop; +} + +qx.Proto.getClientWidth = function() +{ + this._visualPropertyCheck(); + return this._getTargetNode().clientWidth; +} + +qx.Proto.getClientHeight = function() +{ + this._visualPropertyCheck(); + return this._getTargetNode().clientHeight; +} + +qx.Proto.getOffsetWidth = function() +{ + this._visualPropertyCheck(); + return this.getElement().offsetWidth; +} + +qx.Proto.getOffsetHeight = function() +{ + this._visualPropertyCheck(); + return this.getElement().offsetHeight; +} + +qx.Proto.getScrollWidth = function() +{ + this._visualPropertyCheck(); + return this.getElement().scrollWidth; +} + +qx.Proto.getScrollHeight = function() +{ + this._visualPropertyCheck(); + return this.getElement().scrollHeight; +} + + + + + +/* +--------------------------------------------------------------------------- + SCROLL INTO VIEW +--------------------------------------------------------------------------- +*/ + +qx.Proto.scrollIntoView = function(vAlignTopLeft) +{ + this.scrollIntoViewX(vAlignTopLeft); + this.scrollIntoViewY(vAlignTopLeft); +} + +qx.Proto.scrollIntoViewX = function(vAlignLeft) +{ + if (!this._isCreated || !this._isDisplayable) { + return false; + } + + return qx.html.ScrollIntoView.scrollX(this.getElement(), vAlignLeft); +} + +qx.Proto.scrollIntoViewY = function(vAlignTop) +{ + if (!this._isCreated || !this._isDisplayable) { + return false; + } + + return qx.html.ScrollIntoView.scrollY(this.getElement(), vAlignTop); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DRAG AND DROP SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto.supportsDrop = function(vDragCache) { + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + FADING PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The amount of steps for the fade. + */ +qx.OO.addProperty({ name : 'fadeSteps', type : "number", allowNull : false, defaultValue : 10}); +/*! + The duration for the fade. + */ +qx.OO.addProperty({ name : 'fadeTime', type : "number", allowNull : false, defaultValue : 400}); +/*! + The time between the fade steps. + */ +qx.OO.addProperty({ name : 'fadeInterval', type : "number", allowNull : false, defaultValue : 40}); +/*! + The current state of a fade in progress. + */ +qx.OO.addProperty({ name : 'fadeCounter', type : "number", allowNull : false, defaultValue : 0}); +/*! + The amount of oppacity changed on each fade step. + */ +qx.OO.addProperty({ name : 'fadeUnit', type : "number", allowNull : false, defaultValue : 10}); +/*! + The maximum opacity for a fadeIn. + */ +qx.OO.addProperty({ name : 'fadeMax', type : "number", allowNull : false, defaultValue : 100}); + + + + + + +/* +--------------------------------------------------------------------------- + FADING SUPPORT +--------------------------------------------------------------------------- +*/ +qx.ui.core.Widget.FADE_IN = 'FADE_IN'; +qx.ui.core.Widget.FADE_OUT = 'FADE_OUT'; +qx.ui.core.Widget.FADE_FINISHED = 'FADE_FINISHED'; + + +qx.Proto.fadeIn = function(vSteps, vTime) { + if(vSteps) this.setFadeSteps(vSteps); + if(vTime) this.setFadeTime(vTime); + this._fadeMode = qx.ui.core.Widget.FADE_IN; + var timer = this.getFadeTimer(); + timer.addEventListener("interval", this._onInterval, this); + timer.start(); +} + +qx.Proto.fadeOut = function(vSteps, vTime) { + if(vSteps) this.setFadeSteps(vSteps); + if(vTime) this.setFadeTime(vTime); + this._fadeMode = qx.ui.core.Widget.FADE_OUT; + var timer = this.getFadeTimer(); + timer.addEventListener("interval", this._onInterval, this); + timer.start(); +}; + +qx.Proto.getFadeTimer = function() { + if(this._fadeTimer){ + this._fadeTimer.setInterval(this.getFadeInterval()); + } else { + this._fadeTimer = new qx.client.Timer(this.getFadeInterval()); + }; + return this._fadeTimer; +}; + +qx.Proto.resetFader = function() { + this.setFadeCounter(0); + if(this.getFadeTimer()) { + this._fadeTimer.stop(); + this._fadeTimer.dispose(); + }; + this._fadeTimer.dispose(); + this._fadeTimer = null; +}; + +qx.Proto._onInterval = function(e) { + this.getFadeTimer().stop(); + var counter = this.getFadeCounter(); + switch (this._fadeMode){ + case qx.ui.core.Widget.FADE_IN: + this.setFadeCounter(++counter); + if(counter <= this.getFadeSteps()){ + this.setOpacity(this._computeFadeOpacity()); + this.getFadeTimer().restart(); + } else if(this.hasEventListeners(qx.ui.core.Widget.FADE_FINISHED)) { + this.createDispatchDataEvent(qx.ui.core.Widget.FADE_FINISHED, qx.ui.core.Widget.FADE_IN); + }; + break; + + case qx.ui.core.Widget.FADE_OUT: + this.setFadeCounter(--counter); + if(counter >= 0){ + this.setOpacity(this._computeFadeOpacity()); + this.getFadeTimer().restart(); + } else if(this.hasEventListeners(qx.ui.core.Widget.FADE_FINISHED)) { + this.createDispatchDataEvent(qx.ui.core.Widget.FADE_FINISHED, qx.ui.core.Widget.FADE_OUT); + }; + break; + }; + qx.ui.core.Widget.flushGlobalQueues(); +}; + +qx.Proto._modifyFadeSteps = function(propValue, propOldValue, propData) { + if(propValue < 1) return; + this.setFadeInterval(parseInt(this.getFadeTime() / propValue)); + this.setFadeUnit(Math.round(this.getFadeMax()/propValue)); + return true; +}; + +qx.Proto._modifyFadeTime = function(propValue, propOldValue, propData) { + if(propValue < 1) return; + this.setFadeInterval(parseInt(propValue / this.getFadeSteps())); + return true; +}; + +qx.Proto._modifyFadeUnit = function(propValue, propOldValue, propData) { + this.setFadeSteps(Math.round(this.getFadeMax()/propValue)); + return true; +}; + +qx.Proto._modifyFadeMax = function(propValue, propOldValue, propData) { + this.setFadeUnit(Math.round(propValue / this.getFadeSteps())); + return true; +}; + +qx.Proto._computeFadeOpacity = function() { + var op = this.getFadeUnit() * this.getFadeCounter() / 100; + return(op); +}; + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + var vElement = this.getElement(); + + if (vElement) + { + this._removeInlineEvents(vElement); + + delete this._isCreated; + + vElement.qx_Widget = null; + + this._element = null; + this._style = null; + } + + this._inlineEvents = null; + this._element = null; + this._style = null; + this._borderElement = null; + this._borderStyle = null; + this._oldParent = null; + + // should be enough to remove the hashTables + delete this._styleProperties; + delete this._htmlProperties; + delete this._htmlAttributes; + delete this._states; + + // remove queue content + for (var i in this._jobQueue) { + delete this._jobQueue[i]; + } + delete this._jobQueue; + + for (var i in this._layoutChanges) { + delete this._layoutChanges[i]; + } + delete this._layoutChanges; + + // dispose the fader + if(this._fadeTimer){ + this._fadeTimer.dispose(); + this._fadeTimer = null; + } + + return qx.core.Target.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Flash.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Flash.js new file mode 100644 index 0000000000..4e8f3a4ef0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Flash.js @@ -0,0 +1,529 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + ________________________________________________________________________ + + This class contains code based on the following work: + + SWFObject: Javascript Flash Player detection and embed script + http://blog.deconcept.com/swfobject/ + Version: 1.4.4 + + Copyright: + 2006 Geoff Stearns + + License: + MIT: http://www.opensource.org/licenses/mit-license.php + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + Authors: + * Geoff Stearns (geoff@deconcept.com) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Flash Player detection and embed. + * + * This class contains code based on the following work:<br/> + * SWFObject: Javascript Flash Player detection and embed script<br/> + * http://blog.deconcept.com/swfobject/</br> + * Version: 1.4.4 + * + * License:<br/> + * MIT: http://www.opensource.org/licenses/mit-license.php<br/> + * For more info, please see the corresponding source file. + * + * @param vSource {String} Url of the SWF file to embed + * @param vVersion {String} Flash version of the SWF file + */ +qx.OO.defineClass("qx.ui.embed.Flash", qx.ui.basic.Terminator, +function(vSource, vVersion) +{ + qx.ui.basic.Terminator.call(this); + + // Use background handling of qx.ui.core.Widget instead + this._params = {}; + this._variables = {}; + + if(vSource != null) { + this.setSource(vSource); + } + + this.setVersion(vVersion != null ? vVersion : qx.ui.embed.Flash.MINREQUIRED); +}); + +qx.OO.addProperty({ name : "source", type : "string" }); +qx.OO.addProperty({ name : "version" }); + +qx.OO.addProperty({ name : "enableExpressInstall", type : "boolean", defaultValue : false }); +qx.OO.addProperty({ name : "enableDetection", type : "boolean", defaultValue : true }); +qx.OO.addProperty({ name : "redirectUrl", type : "string" }); + +qx.OO.addProperty({ name : "quality", type : "string", impl : "param", defaultValue : "high", possibleValues : [ "low", "autolow", "autohigh", "medium", "high", "best" ] }); +qx.OO.addProperty({ name : "scale", type : "string", impl : "param", defaultValue : "showall", possibleValues : [ "showall", "noborder", "excactfit", "noscale" ] }); +qx.OO.addProperty({ name : "wmode", type : "string", impl : "param", defaultValue : "", possibleValues : [ "window", "opaque", "transparent" ] }); +qx.OO.addProperty({ name : "play", type : "boolean", impl : "param", defaultValue : true }); +qx.OO.addProperty({ name : "loop", type : "boolean", impl : "param", defaultValue : true }); +qx.OO.addProperty({ name : "menu", type : "boolean", impl : "param", defaultValue : true }); + +qx.ui.embed.Flash.EXPRESSINSTALL = [6,0,65]; +qx.ui.embed.Flash.MINREQUIRED = "1"; +qx.ui.embed.Flash.PLAYERVERSION = null; +qx.ui.embed.Flash.PLUGINKEY = "Shockwave Flash"; +qx.ui.embed.Flash.ACTIVEXKEY = "ShockwaveFlash.ShockwaveFlash"; + + + + + +/* +--------------------------------------------------------------------------- + PLAYER VERSION CACHE +--------------------------------------------------------------------------- +*/ + +qx.ui.embed.Flash.getPlayerVersion = function() +{ + if (qx.ui.embed.Flash.PLAYERVERSION != null) { + return qx.ui.embed.Flash.PLAYERVERSION; + } + + var vPlayerVersion = new qx.type.Version(0,0,0); + + if(navigator.plugins && navigator.mimeTypes.length) + { + var x = navigator.plugins[qx.ui.embed.Flash.PLUGINKEY]; + + if(x && x.description) { + vPlayerVersion = new qx.type.Version(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); + } + } + else if (window.ActiveXObject) + { + // do minor version lookup in IE, but avoid fp6 crashing issues + // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ + try { + var axo = new ActiveXObject(qx.ui.embed.Flash.ACTIVEXKEY + ".7"); + } + catch(e) + { + try { + var axo = new ActiveXObject(qx.ui.embed.Flash.ACTIVEXKEY + ".6"); + vPlayerVersion = new qx.type.Version([6,0,21]); + axo.AllowScriptAccess = "always"; // throws if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) + } + catch(e) + { + if (vPlayerVersion.major == 6) { + return vPlayerVersion; + } + } + + try { + axo = new ActiveXObject(qx.ui.embed.Flash.ACTIVEXKEY); + } catch(e) {} + } + + if (axo != null) { + vPlayerVersion = new qx.type.Version(axo.GetVariable("$version").split(" ")[1].split(",")); + } + } + + return qx.ui.embed.Flash.PLAYERVERSION = vPlayerVersion; +}; + + + + + + +/* +--------------------------------------------------------------------------- + BASICS +--------------------------------------------------------------------------- +*/ + +qx.Proto._version = null; +qx.Proto._source = ""; + +qx.Proto._applyElementData = function(el) +{ + qx.ui.basic.Terminator.prototype._applyElementData.call(this, el); + + // Check for ExpressInstall + this._expressInstall = false; + + if (this.getEnableExpressInstall()) + { + // check to see if we need to do an express install + var expressInstallReqVer = new qx.type.Version(qx.ui.embed.Flash.EXPRESSINSTALL); + var installedVer = qx.ui.embed.Flash.getPlayerVersion(); + + if (installedVer.versionIsValid(expressInstallReqVer) && !installedVer.versionIsValid(this._version)) { + this._expressInstall = true; + } + } + + // this.debug("ExpressInstall Enabled: " + this._expressInstall); + + // Apply HTML + if(!this.getEnableDetection() || this._expressInstall || qx.ui.embed.Flash.getPlayerVersion().versionIsValid(this._version)) + { + el.innerHTML = this.generateHTML(); + } + else + { + var redir = this.getRedirectUrl(); + + if(redir != "") { + document.location.replace(redir); + } + } +}; + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifySource = function(propValue, propOldValue, propName) +{ + this._source = qx.util.Validation.isValidString(propValue) ? qx.manager.object.AliasManager.getInstance().resolvePath(propValue) : ""; + return true; +}; + +qx.Proto._modifyVersion = function(propValue, propOldValue, propData) +{ + if (this._version) + { + this._version.dispose(); + this._version = null; + } + + if (qx.util.Validation.isValidString(propValue)) { + this._version = new qx.type.Version(propValue); + } + + return true; +}; + +qx.Proto._modifyParam = function(propValue, propOldValue, propData) +{ + this.setParam(propData.name, propValue.toString()); + return true; +}; + + + + + +/* +--------------------------------------------------------------------------- + OVERWRITE BACKGROUND COLOR HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyBackgroundColor = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) + { + this._applyBackgroundColor(propValue.getHex()); + propValue.add(this); + } + else + { + this._resetBackgroundColor(); + } + + return true; +}; + +qx.Proto._applyBackgroundColor = function(vNewValue) { + this.setParam("bgcolor", vNewValue); +}; + + + + +/* +--------------------------------------------------------------------------- + PARAMS +--------------------------------------------------------------------------- +*/ + +qx.Proto.setParam = function(name, value){ + this._params[name] = value; +}; + +qx.Proto.getParam = function(name){ + return this._params[name]; +}; + +qx.Proto.getParams = function() { + return this._params; +}; + + + + + +/* +--------------------------------------------------------------------------- + VARIABLES +--------------------------------------------------------------------------- +*/ + +qx.Proto.setVariable = function(name, value){ + this._variables[name] = value; +}; + +qx.Proto.getVariable = function(name){ + return this._variables[name]; +}; + +qx.Proto.getVariables = function(){ + return this._variables; +}; + + + + + +/* +--------------------------------------------------------------------------- + HTML UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.generateParamTags = function() +{ + var vParams = this.getParams(); + var vParamTags = []; + + for (var vKey in vParams) + { + vParamTags.push("<param name='"); + vParamTags.push(vKey); + vParamTags.push("' value='"); + vParamTags.push(vParams[vKey]); + vParamTags.push("'/>"); + } + + return vParamTags.join(""); +}; + +qx.Proto.getVariablePairs = function() +{ + var variables = this.getVariables(); + var variablePairs = []; + + for (var key in variables) { + variablePairs.push(key + "=" + variables[key]); + } + + return variablePairs.join("&"); +}; + + + + + + +/* +--------------------------------------------------------------------------- + HTML GENERATOR +--------------------------------------------------------------------------- +*/ + +// Netscape Plugin Architecture +if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) +{ + qx.Proto.generateHTML = function() + { + var html = []; + + // Express Install Handling + if (this._expressInstall) + { + document.title = document.title.slice(0, 47) + ' - Flash Player Installation'; + + this.addVariable('MMredirectURL', escape(window.location)); + this.addVariable('MMdoctitle', document.title); + this.addVariable('MMplayerType', 'PlugIn'); + } + + html.push("<embed type='application/x-shockwave-flash' width='100%' height='100%' src='"); + html.push(this._source); + html.push("'"); + + var params = this.getParams(); + + for (var key in params) + { + html.push(" "); + html.push(key); + html.push("="); + html.push("'"); + html.push(params[key]); + html.push("'"); + } + + var pairs = this.getVariablePairs(); + + if (pairs.length > 0) + { + html.push(" "); + html.push("flashvars"); + html.push("="); + html.push("'"); + html.push(pairs); + html.push("'"); + } + + html.push("></embed>"); + + return html.join(""); + }; +} +else +{ + // Internet Explorer ActiveX Architecture + qx.Proto.generateHTML = function() + { + var html = []; + + // Express Install Handling + if (this._expressInstall) + { + document.title = document.title.slice(0, 47) + ' - Flash Player Installation'; + + this.addVariable("MMredirectURL", escape(window.location)); + this.addVariable("MMdoctitle", document.title); + this.addVariable("MMplayerType", "ActiveX"); + } + + html.push("<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='100%' height='100%'>"); + html.push("<param name='movie' value='"); + html.push(this._source); + html.push("'/>"); + + var tags = this.generateParamTags(); + + if(tags.length > 0) { + html.push(tags); + } + + var pairs = this.getVariablePairs(); + + if(pairs.length > 0) + { + html.push("<param name='flashvars' value='"); + html.push(pairs); + html.push("'/>"); + } + + html.push("</object>"); + + return html.join(""); + }; +} + + + + + + +/* +--------------------------------------------------------------------------- + METHODS TO GIVE THE LAYOUTERS INFORMATIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._isWidthEssential = qx.lang.Function.returnTrue; +qx.Proto._isHeightEssential = qx.lang.Function.returnTrue; + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computePreferredInnerWidth = qx.lang.Function.returnZero; +qx.Proto._computePreferredInnerHeight = qx.lang.Function.returnZero; + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + delete this._source; + delete this._params; + delete this._variables; + + if (this._version) + { + this._version.dispose(); + this._version = null; + } + + qx.ui.basic.Terminator.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Gallery.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Gallery.js new file mode 100644 index 0000000000..64864d4570 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Gallery.js @@ -0,0 +1,559 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/** + * @event beforeToolTipAppear {qx.event.type.Event} + * @event loadComplete {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.embed.Gallery", qx.ui.basic.Terminator, +function(vGalleryList) +{ + qx.ui.basic.Terminator.call(this); + + this._blank = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + this._list = vGalleryList; + this._listSize = vGalleryList.length; + this._processedImages = 0; + + this.setOverflow("auto"); + + this.setHtmlProperty("className", "qx_ui_embed_Gallery"); + + this._manager = new qx.manager.selection.DomSelectionManager(this); + + this._manager.setMultiColumnSupport(true); + + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("mousemove", this._onmousemove); + + this.addEventListener("click", this._onclick); + this.addEventListener("dblclick", this._ondblclick); + + this.addEventListener("keypress", this._onkeypress); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "thumbMaxWidth", type : "number", defaultValue : 100 }); +qx.OO.addProperty({ name : "thumbMaxHeight", type : "number", defaultValue : 100 }); +qx.OO.addProperty({ name : "decorHeight", type : "number", defaultValue : 40 }); +qx.OO.addProperty({ name : "showTitle", type : "boolean", defaultValue : true }); +qx.OO.addProperty({ name : "showComment", type : "boolean", defaultValue : true }); + + + + + + +/* +--------------------------------------------------------------------------- + ELEMENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyElementData = function() { + this.getElement().appendChild(this.createView()); +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + +qx.Proto.getList = function() { + return this._list; +} + +qx.Proto.update = function(vGalleryList) +{ + this._manager.deselectAll(); + + this._list = vGalleryList; + + var el = this.getElement(); + el.replaceChild(this.createView(), el.firstChild); +} + +qx.Proto.removeAll = function() +{ + this._manager.deselectAll(); + this.getElement().innerHTML = ""; +} + +qx.Proto.updateImageById = function(vId, vSrc, vWidth, vHeight) { + this.updateImageSrcById(vId, vSrc); + this.updateImageDimensionsById(vId, vWidth, vHeight); +} + +qx.Proto.updateImageDimensionsById = function(vId, vWidth, vHeight) { + this.updateImageDimensionsByPosition(this.getPositionById(vId), vWidth, vHeight); +} + +qx.Proto.updateImageDimensionsByPosition = function(vPos, vWidth, vHeight) { + // TBD: compare dimensions with max. thumb size and scale proportionally if necessary + if (vPos == -1) { + throw new Error("No valid Position: " + vPos); + } + + var cnode = this.getNodeByPosition(vPos).getElementsByTagName("img")[0]; + + cnode.width = vWidth; + cnode.height = vHeight; + + cnode.style.marginLeft = cnode.style.marginRight = Math.floor((this.getThumbMaxWidth()-vWidth)/2) + "px"; + cnode.style.marginTop = cnode.style.marginBottom = Math.floor((this.getThumbMaxHeight()-vHeight)/2) + "px"; + + this._list[vPos].thumbWidth = vWidth; + this._list[vPos].thumbHeight = vHeight; +} + +qx.Proto.updateImageSrcById = function(vId, vSrc) { + this.updateImageSrcByPosition(this.getPositionById(vId), vSrc); +} + +qx.Proto.updateImageSrcByPosition = function(vPos, vSrc) +{ + if (vPos == -1) { + throw new Error("No valid Position: " + vPos); + } + + var vNode = this.getNodeByPosition(vPos); + + vNode.getElementsByTagName("img")[0].src = vSrc; + this._list[vPos].src = vSrc; +} + +qx.Proto.deleteById = function(vId) { + this.deleteByPosition(this.getPositionById(vId)); +} + +qx.Proto.deleteByPosition = function(vPos) +{ + this._manager.deselectAll(); + + if (vPos == -1) { + throw new Error("No valid Position: " + vPos); + } + + var vNode = this.getNodeByPosition(vPos); + + if (vNode) { + vNode.parentNode.removeChild(vNode); + } + + this._list.splice(vPos, 1); +} + +qx.Proto.getPositionById = function(vId) +{ + for (var i=0, a=this._list, l=a.length; i<l; i++) { + if (a[i].id == vId) { + return i; + } + } + + return -1; +} + +qx.Proto.getEntryById = function(vId) { + return this.getEntryByPosition(this.getPositionById(vId)); +} + +qx.Proto.getNodeById = function(vId) { + return this.getNodeByPosition(this.getPositionById(vId)); +} + +qx.Proto.getEntryByPosition = function(vPosition) { + return vPosition == -1 ? null : this._list[vPosition]; +} + +qx.Proto.getNodeByPosition = function(vPosition) { + return vPosition == -1 ? null : this._frame.childNodes[vPosition]; +} + +qx.Proto.getEntryByNode = function(vNode) { + return this.getEntryById(vNode.id); +} + +qx.Proto.addFromPartialList = function(vPartialList) +{ + this.concat(vPartialList); + + for (var i=0, a=vPartialList, l=a.length; i<l; i++) { + this._frame.appendChild(this.createCell(a[i], i)); + } +} + +qx.Proto.addFromUpdatedList = function(vNewList) +{ + for (var a=vNewList, l=a.length, i=this._list.length; i<l; i++) { + this._frame.appendChild(this.createCell(a[i], i)); + } + + this._list = vNewList; +} + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleMouseDown(vItem, e); + } +} + +qx.Proto._onmouseup = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleMouseUp(vItem, e); + } +} + +qx.Proto._onmousemove = function(e) +{ + if (qx.OO.isAvailable("qx.manager.object.ToolTipManager")) { + return; + } + + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem == this._lastItem) { + return; + } + + if (this._lastItem) + { + var vEventObject = new qx.event.type.MouseEvent("mouseout", e, false, this._lastItem); + qx.manager.object.ToolTipManager.getInstance().handleMouseOut(vEventObject); + vEventObject.dispose(); + } + + if (vItem) + { + if (this.hasEventListeners("beforeToolTipAppear")) { + this.dispatchEvent(new qx.event.type.DataEvent("beforeToolTipAppear", vItem), true); + } + + if (!this.getToolTip()) { + return; + } + + var vEventObject = new qx.event.type.MouseEvent("mouseout", e, false, vItem); + qx.manager.object.ToolTipManager.getInstance().handleMouseOver(vEventObject); + vEventObject.dispose(); + + this.setToolTip(null); + } + + this._lastItem = vItem; +} + +qx.Proto._onclick = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleClick(vItem, e); + } +} + +qx.Proto._ondblclick = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleDblClick(vItem, e); + } +} + +qx.Proto._onkeypress = function(e) { + this._manager.handleKeyPress(e); +} + +qx.Proto.getListItemTarget = function(dt) +{ + while(dt.className.indexOf("galleryCell") == -1 && dt.tagName.toLowerCase() != "body") { + dt = dt.parentNode; + } + + if (dt.tagName.toLowerCase() == "body") { + return null; + } + + return dt; +} + + + + + +/* +--------------------------------------------------------------------------- + SCROLL INTO VIEW +--------------------------------------------------------------------------- +*/ + +qx.Proto.scrollItemIntoView = function(vItem) +{ + this.scrollItemIntoViewX(vItem); + this.scrollItemIntoViewY(vItem); +} + +qx.Proto.scrollItemIntoViewX = function(vItem) { + qx.html.ScrollIntoView.scrollX(vItem); +} + +qx.Proto.scrollItemIntoViewY = function(vItem) { + qx.html.ScrollIntoView.scrollY(vItem); +} + + + + + +/* +--------------------------------------------------------------------------- + MANAGER REQUIREMENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItems = function() { + return this._frame.childNodes; +} + +qx.Proto.getFirstChild = function() { + return this._frame.childNodes[0]; +} + +qx.Proto.getLastChild = function() { + return this._frame.childNodes[this._frame.childNodes.length-1]; +} + + + + + + + +/* +--------------------------------------------------------------------------- + INTERNALS +--------------------------------------------------------------------------- +*/ + +qx.Proto.createView = function() +{ + var s = (new Date).valueOf(); + + if (!this._protoCell) { + this.createProtoCell(); + } + + this._frame = document.createElement("div"); + this._frame.className = "galleryFrame clearfix"; + + for (var i=0, a=this._list, l=a.length; i<l; i++) { + this._frame.appendChild(this.createCell(a[i], i)); + } + + return this._frame; +} + +qx.Proto.createCell = function(d, i) +{ + var cframe = this._protoCell.cloneNode(true); + + cframe.id = d.id; + cframe.pos = i; + + if (this.getShowTitle()) + { + cnode = cframe.childNodes[0]; + cnode.firstChild.nodeValue = d.title; + } + + var cnode = cframe.childNodes[this.getShowTitle() ? 1 : 0]; + this.createImageCell(cnode, d); + + if (this.getShowComment()) + { + cnode = cframe.childNodes[this.getShowTitle() ? 2 : 1]; + cnode.firstChild.nodeValue = d.comment; + } + + return cframe; +} + +qx.Proto._mshtml = qx.core.Client.getInstance().isMshtml(); + +qx.Proto.createImageCell = function(inode, d) +{ + if (this.hasEventListeners("loadComplete")) + { + inode.onload = qx.ui.embed.Gallery.imageOnLoad; + inode.onerror = qx.ui.embed.Gallery.imageOnError; + inode.gallery = this; + } + + if (this._mshtml) { + inode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + d.src + "',sizingMethod='scale')"; + } else { + inode.src = d.src; + } + + inode.width = d.thumbWidth + 2; + inode.height = d.thumbHeight + 2; + inode.style.marginLeft = inode.style.marginRight = Math.floor((this.getThumbMaxWidth()-d.thumbWidth)/2) + "px"; + inode.style.marginTop = inode.style.marginBottom = Math.floor((this.getThumbMaxHeight()-d.thumbHeight)/2) + "px"; +} + +qx.Proto.imageOnComplete = function() +{ + this._processedImages++; + + if(this._processedImages == this._listSize) { + this.dispatchEvent(new qx.event.type.Event("loadComplete"), true); + } +} + +qx.ui.embed.Gallery.imageOnLoad = function() +{ + this.gallery.imageOnComplete(); + this.gallery = null; + this.onload = null; + this.onerror = null; +} + +qx.ui.embed.Gallery.imageOnError = function() +{ + this.gallery.imageOnComplete(); + this.gallery = null; + this.onload = null; + this.onerror = null; +} + +qx.Proto.createProtoCell = function() +{ + var frame = this._protoCell = document.createElement("div"); + frame.className = "galleryCell"; + frame.unselectable = "on"; + frame.style.width = (this.getThumbMaxWidth() + 2) + "px"; + frame.style.height = (this.getThumbMaxHeight() + this.getDecorHeight() + 2) + "px"; + + if (this.getShowTitle()) + { + var title = document.createElement("div"); + title.className = "galleryTitle"; + title.unselectable = "on"; + var ttext = document.createTextNode("-"); + title.appendChild(ttext); + + frame.appendChild(title); + } + + var image = new Image(); + image.src = this._blank; + frame.appendChild(image); + + if (this.getShowComment()) + { + var comment = document.createElement("div"); + comment.className = "galleryComment"; + comment.unselectable = "on"; + var ctext = document.createTextNode("-"); + comment.appendChild(ctext); + + frame.appendChild(comment); + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + this._list = null; + this._protoCell = null; + this._frame = null; + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("mousemove", this._onmousemove); + + this.removeEventListener("click", this._onclick); + this.removeEventListener("dblclick", this._ondblclick); + + this.removeEventListener("keypress", this._onkeypress); + + return qx.ui.basic.Terminator.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/GalleryList.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/GalleryList.js new file mode 100644 index 0000000000..4c56a1cb69 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/GalleryList.js @@ -0,0 +1,403 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/** + * @event loadComplete {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.embed.GalleryList", qx.ui.basic.Terminator, +function(galleryList) +{ + qx.ui.basic.Terminator.call(this); + + this._blank = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + this._list = galleryList; + this._listSize = galleryList.length; + this._processedImages = 0; + + this.setOverflow("auto"); + + this.setHtmlProperty("className", "qx_ui_embed_GalleryList"); + + this._manager = new qx.manager.selection.DomSelectionManager(this); + + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("click", this._onclick); + this.addEventListener("dblclick", this._ondblclick); + this.addEventListener("keypress", this._onkeypress); +}); + +qx.OO.addProperty({ name : "thumbMaxWidth", type : "number", defaultValue : 60 }); +qx.OO.addProperty({ name : "thumbMaxHeight", type : "number", defaultValue : 60 }); +qx.OO.addProperty({ name : "decorHeight", type : "number", defaultValue : 40 }); + + + + + +/* +--------------------------------------------------------------------------- + ELEMENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyElementData = function() { + this.getElement().appendChild(this.createView()); +} + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + + +qx.Proto.update = function(vGalleryList) +{ + this._manager.deselectAll(); + + this._list = vGalleryList; + + var el = this.getElement(); + el.replaceChild(this.createView(), el.firstChild); +} + + +qx.Proto.removeAll = function() +{ + this._manager.deselectAll(); + this.getElement().innerHTML = ""; +} + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleMouseDown(vItem, e); + } +} + +qx.Proto._onmouseup = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleMouseUp(vItem, e); + } +} + +qx.Proto._onclick = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleClick(vItem, e); + } +} + +qx.Proto._ondblclick = function(e) +{ + var vItem = this.getListItemTarget(e.getDomTarget()); + + if (vItem) { + this._manager.handleDblClick(vItem, e); + } +} + +qx.Proto._onkeypress = function(e) { + this._manager.handleKeyPress(e); +} + +qx.Proto.getListItemTarget = function(dt) +{ + while(dt.className.indexOf("galleryCell") == -1 && dt.tagName.toLowerCase() != "body") { + dt = dt.parentNode; + } + + if (dt.tagName.toLowerCase() == "body") { + return null; + } + + return dt; +} + + + + + + + +/* +--------------------------------------------------------------------------- + SCROLL INTO VIEW +--------------------------------------------------------------------------- +*/ + +qx.Proto.scrollItemIntoView = function(vItem) +{ + this.scrollItemIntoViewX(vItem); + this.scrollItemIntoViewY(vItem); +} + +qx.Proto.scrollItemIntoViewX = function(vItem) { + qx.html.ScrollIntoView.scrollX(vItem); +} + +qx.Proto.scrollItemIntoViewY = function(vItem) { + qx.html.ScrollIntoView.scrollY(vItem); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + SELECTION MANAGER API +--------------------------------------------------------------------------- +*/ + +qx.Proto.getItems = function() { + return this._frame.childNodes; +} + +qx.Proto.getFirstChild = function() { + return this._frame.childNodes[0]; +} + +qx.Proto.getLastChild = function() { + return this._frame.childNodes[this._frame.childNodes.length-1]; +} + + + + + + +/* +--------------------------------------------------------------------------- + CREATE VIEW +--------------------------------------------------------------------------- +*/ + +qx.Proto.createView = function() +{ + var s = (new Date).valueOf(); + + var protoCell = this.createProtoCell(this.getThumbMaxHeight()); + var frame = this._frame = document.createElement("div"); + + this._frame.className = "galleryFrame clearfix"; + + var cframe, cnode; + + for (var i=0, a=this._list, l=a.length, d; i<l; i++) + { + d = a[i]; + + cframe = protoCell.cloneNode(true); + + cframe.id = d.id; + cframe.pos = i; + + cnode = cframe.childNodes[0]; + cnode.firstChild.nodeValue = d.number; + + cnode = cframe.childNodes[1].firstChild; + this.createImageCell(cnode, d); + + cnode = cframe.childNodes[2].firstChild; + cnode.firstChild.nodeValue = d.title; + + cnode = cframe.childNodes[2].lastChild; + cnode.firstChild.nodeValue = d.comment; + + frame.appendChild(cframe); + } + + return frame; +} + +qx.Proto._mshtml = qx.core.Client.getInstance().isMshtml(); + +qx.Proto.createImageCell = function(inode, d) +{ + if (this.hasEventListeners("loadComplete")) { + inode.onload = qx.ui.embed.GalleryList.imageOnLoad; + inode.onerror = qx.ui.embed.GalleryList.imageOnError; + inode.gallery = this; + } + + inode.width = d.thumbWidth; + inode.height = d.thumbHeight; + + if (this._mshtml) { + inode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + d.src + "',sizingMethod='scale')"; + } else { + inode.src = d.src; + } + + inode.style.marginLeft = inode.style.marginRight = Math.floor((this.getThumbMaxWidth()-d.thumbWidth)/2) + "px"; + inode.style.marginTop = inode.style.marginBottom = Math.floor((this.getThumbMaxHeight()-d.thumbHeight)/2) + "px"; +} + +qx.Proto.createProtoCell = function(tHeight) +{ + var frame = document.createElement("div"); + frame.className = "galleryCell"; + frame.unselectable = "on"; + frame.style.height = (tHeight + 2) + "px"; + + var number = document.createElement("div"); + number.className = "galleryNumber"; + number.unselectable = "on"; + var ntext = document.createTextNode("-"); + number.appendChild(ntext); + + var imageContainer = document.createElement("div"); + imageContainer.className = "galleryImageContainer"; + imageContainer.unselectable = "on"; + + var image = new Image(); + image.src = this._blank; + + imageContainer.appendChild(image); + + var text = document.createElement("div"); + text.className = "galleryText"; + text.unselectable = "on"; + text.style.width = (this.getWidth()-100-this.getThumbMaxWidth()) + "px"; + + var title = document.createElement("h3"); + var ttext = document.createTextNode("-"); + title.appendChild(ttext); + title.unselectable = "on"; + text.appendChild(title); + + var comment = document.createElement("p"); + var ctext = document.createTextNode("-"); + comment.appendChild(ctext); + comment.unselectable = "on"; + text.appendChild(comment); + + + frame.appendChild(number); + frame.appendChild(imageContainer); + frame.appendChild(text); + + return frame; +} + + + + + + + +/* +--------------------------------------------------------------------------- + PRELOADING +--------------------------------------------------------------------------- +*/ + +qx.Proto.imageOnComplete = function() +{ + this._processedImages++; + + if(this._processedImages == this._listSize) { + this.dispatchEvent(new qx.event.type.Event("loadComplete"), true); + } +} + +qx.ui.embed.GalleryList.imageOnLoad = function() +{ + this.gallery.imageOnComplete(); + this.gallery = null; + this.onload = null; + this.onerror = null; +} + +qx.ui.embed.GalleryList.imageOnError = function() +{ + this.gallery.imageOnComplete(); + this.gallery = null; + this.onload = null; + this.onerror = null; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + this._list = null; + this._frame = null; + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("click", this._onclick); + this.removeEventListener("dblclick", this._ondblclick); + this.removeEventListener("keydown", this._onkeydown); + + return qx.ui.basic.Terminator.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/HtmlEmbed.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/HtmlEmbed.js new file mode 100644 index 0000000000..0e526f4fb7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/HtmlEmbed.js @@ -0,0 +1,114 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#require(qx.renderer.font.FontCache) +#after(qx.renderer.font.FontObject) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.embed.HtmlEmbed", qx.ui.basic.Terminator, +function(vHtml) +{ + qx.ui.basic.Terminator.call(this); + + if (vHtml != null) { + this.setHtml(vHtml); + } +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Any text string which can contain HTML, too +*/ +qx.OO.addProperty({ name : "html", type : "string" }); + +/*! + The font property describes how to paint the font on the widget. +*/ +qx.OO.addProperty({ name : "font", type : "object", instance : "qx.renderer.font.Font", convert : qx.renderer.font.FontCache, allowMultipleArguments : true }); + +/*! + Wrap the text? +*/ +qx.OO.addProperty({ name : "wrap", type : "boolean", defaultValue : true }); + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyHtml = function() +{ + if (this._isCreated) { + this._syncHtml(); + } + + return true; +} + +qx.Proto._modifyFont = function(propValue, propOldValue, propData) +{ + if (propValue) { + propValue._applyWidget(this); + } else if (propOldValue) { + propOldValue._resetWidget(this); + } + + return true; +} + +qx.Proto._modifyWrap = function(propValue, propOldValue, propData) +{ + this.setStyleProperty("whiteSpace", propValue ? "normal" : "nowrap"); + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + ELEMENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyElementData = function() { + this._syncHtml(); +} + +qx.Proto._syncHtml = function() { + this.getElement().innerHTML = this.getHtml(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/IconHtmlEmbed.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/IconHtmlEmbed.js new file mode 100644 index 0000000000..06f935b2d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/IconHtmlEmbed.js @@ -0,0 +1,137 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.embed.IconHtmlEmbed", qx.ui.embed.HtmlEmbed, +function(vHtml, vIcon, vIconWidth, vIconHeight) +{ + qx.ui.embed.HtmlEmbed.call(this, vHtml); + + if (vIcon != null) + { + this.setIcon(vIcon); + + if (vIconWidth != null) { + this.setIconWidth(vIconWidth); + } + + if (vIconHeight != null) { + this.setIconHeight(vIconWidth); + } + } +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Any URI String supported by qx.ui.basic.Image to display a icon +*/ +qx.OO.addProperty({ name : "icon", type : "string", impl : "html" }); + +/*! + The width of the icon. + If configured, this makes qx.ui.embed.IconHtmlEmbed a little bit faster as it does not need to wait until the image loading is finished. +*/ +qx.OO.addProperty({ name : "iconWidth", type : "number", impl : "html" }); + +/*! + The height of the icon + If configured, this makes qx.ui.embed.IconHtmlEmbed a little bit faster as it does not need to wait until the image loading is finished. +*/ +qx.OO.addProperty({ name : "iconHeight", type : "number", impl : "html" }); + +/*! + Space in pixels between the icon and the HTML. +*/ +qx.OO.addProperty({ name : "spacing", type : "number", defaultValue : 4, impl : "html" }); + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto._mshtml = qx.core.Client.getInstance().isMshtml(); + +qx.Proto._syncHtml = function() +{ + var vHtml = []; + + if (qx.util.Validation.isValidString(this.getIcon())) + { + vHtml.push("<img src=\""); + vHtml.push(qx.manager.object.AliasManager.getInstance().resolvePath(this._mshtml ? "static/image/blank.gif" : this.getIcon())); + vHtml.push("\" style=\"vertical-align:middle;"); + + if (this.getSpacing() != null) + { + vHtml.push("margin-right:"); + vHtml.push(this.getSpacing()); + vHtml.push("px;"); + } + + if (this.getIconWidth() != null) + { + vHtml.push("width:"); + vHtml.push(this.getIconWidth()); + vHtml.push("px;"); + } + + if (this.getIconHeight() != null) + { + vHtml.push("height:"); + vHtml.push(this.getIconHeight()); + vHtml.push("px;"); + } + + if (this._mshtml) + { + vHtml.push("filter:"); + vHtml.push("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"); + vHtml.push(qx.manager.object.AliasManager.getInstance().resolvePath(this.getIcon())); + vHtml.push("',sizingMethod='scale')"); + vHtml.push(";"); + } + + vHtml.push("\"/>"); + } + + if (qx.util.Validation.isValidString(this.getHtml())) { + vHtml.push(this.getHtml()); + } + + this.getElement().innerHTML = vHtml.join(""); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Iframe.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Iframe.js new file mode 100644 index 0000000000..73dc8dc254 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/Iframe.js @@ -0,0 +1,433 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/** + * @event load {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.embed.Iframe", qx.ui.basic.Terminator, +function(vSource) +{ + // ********************************************************************** + // INIT + // ********************************************************************** + qx.ui.basic.Terminator.call(this); + + this.setSelectable(false); + this.setTabIndex(0); + + var o = this; + this.__onreadystatechange = function(e) { return o._onreadystatechange(e); } + this.__onload = function(e) { return o._onload(e); } + + if (vSource != undefined) { + this.setSource(vSource); + } +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "iframe" }); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "source", type : "string" }); + +qx.OO.addProperty({ name : "frameName", type : "string" }); + + + + + + +/* +--------------------------------------------------------------------------- + INTERNAL PROPERTIES +--------------------------------------------------------------------------- +*/ + + +// iframe DOM node + +qx.Proto._iframeNode = null; + +qx.Proto.getIframeNode = function() { + return this._iframeNode; +} + +qx.Proto.setIframeNode = function(vIframeNode) { + return this._iframeNode = vIframeNode; +} + + +// blocker div DOM node + +qx.Proto._blockerNode = null; + +qx.Proto.getBlockerNode = function() { + return this._blockerNode; +} + +qx.Proto.setBlockerNode = function(vBlockerNode) { + return this._blockerNode = vBlockerNode; +} + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.reload = function() { + this._applySource(); +} + + +qx.Proto.block = function() +{ + if (this._blockerNode) { + this._blockerNode.style.display = ""; + } +}; + +qx.Proto.release = function() +{ + if (this._blockerNode) { + this._blockerNode.style.display = "none"; + } +}; + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyElement = function(propValue, propOldValue, propData) +{ + + var iframeNode = this.getIframeNode(); + + if (!iframeNode) + { + + qx.ui.embed.Iframe.initIframe(this.getFrameName()); + + // clone proto element and assign iframe + iframeNode = this.setIframeNode(qx.ui.embed.Iframe._element.cloneNode(true)); + + qx.ui.embed.Iframe.initBlocker(); + + // clone proto blocker + var blockerNode = this.setBlockerNode(qx.ui.embed.Iframe._blocker.cloneNode(true)); + + if (qx.core.Client.getInstance().isMshtml()) { + iframeNode.onreadystatechange = this.__onreadystatechange; + } else { + iframeNode.onload = this.__onload; + } + } + + this._applySource(); + + propValue.appendChild(iframeNode); + propValue.appendChild(blockerNode); + + // create basic widget + qx.ui.basic.Terminator.prototype._modifyElement.call(this, propValue, propOldValue, propData); + + return true; +} + + +qx.Proto._beforeAppear = function() { + qx.ui.basic.Terminator.prototype._beforeAppear.call(this); + + // register to iframe manager as active widget + qx.manager.object.IframeManager.getInstance().add(this); +}; + + +qx.Proto._beforeDisappear = function() { + qx.ui.basic.Terminator.prototype._beforeDisappear.call(this); + + // deregister from iframe manager + qx.manager.object.IframeManager.getInstance().remove(this); +}; + + +qx.Proto._modifySource = function(propValue, propOldValue, propData) +{ + if(this.isCreated()) { + this._applySource(); + } + + return true; +} + +qx.Proto._applySource = function() +{ + var currentSource = this.getSource(); + + if (qx.util.Validation.isInvalidString(currentSource)) { + currentSource = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + } + + this._isLoaded = false; + this.getIframeNode().src = currentSource; +} + +qx.Proto._modifyFrameName = function (propValue, propOldValue, propName, uniqModIds) +{ + if( this.isCreated()) { + throw new Error("Not allowed to set frame name after it has been created"); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onreadystatechange = function() +{ + if (this.getIframeNode().readyState == "complete") { + this.dispatchEvent(new qx.event.type.Event("load"), true); + } +} + +qx.Proto._onload = function() +{ + this._isLoaded = true; + this.dispatchEvent(new qx.event.type.Event("load"), true); +} + + + + + + +/* +--------------------------------------------------------------------------- + WINDOW & DOCUMENT ACCESS +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.getContentWindow = function() + { + if (this.isCreated()) { + try { return this.getIframeNode().contentWindow; } + catch (ex) {} + } + + return null; + } + + qx.Proto.getContentDocument = function() + { + var win = this.getContentWindow(); + if (win) { + try { return win.document; } + catch (ex) {} + } + + return null; + } +} +else +{ + qx.Proto.getContentWindow = function() + { + var doc = this.getContentDocument(); + return doc ? doc.defaultView : null; + } + + qx.Proto.getContentDocument = function() + { + if (this.isCreated()) { + try { return this.getIframeNode().contentDocument; } + catch (ex) {} + } + + return null; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + LOAD STATUS +--------------------------------------------------------------------------- +*/ + +qx.Proto._isLoaded = false; + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.isLoaded = function() + { + var doc = this.getContentDocument(); + return doc ? doc.readyState == "complete" : false; + } +} +else +{ + qx.Proto.isLoaded = function() + { + return this._isLoaded; + } +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSE +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.__onreadystatechange = this.__onload = null; + + if (this._iframeNode) + { + this._iframeNode.onreadystatechange = null; + this._iframeNode.onload = null; + + this._iframeNode = null; + } + + qx.ui.basic.Terminator.prototype.dispose.call(this); +} + + + + + + +/* +--------------------------------------------------------------------------- + INIT +--------------------------------------------------------------------------- +*/ +qx.ui.embed.Iframe.initIframe = function(vFrameName) +{ + if (qx.ui.embed.Iframe._element && !vFrameName) { + return; + } + + if (vFrameName && qx.core.Client.getInstance().isMshtml()) { + var f = qx.ui.embed.Iframe._element = document.createElement('<iframe name="' + vFrameName + '"></iframe>'); + } else { + var f = qx.ui.embed.Iframe._element = document.createElement("iframe"); + if (vFrameName) { + f.name = vFrameName; + } + } + + f.frameBorder = "0"; + f.frameSpacing = "0"; + + f.marginWidth = "0"; + f.marginHeight = "0"; + + f.width = "100%"; + f.height = "100%"; + + f.hspace = "0"; + f.vspace = "0"; + + f.border = "0"; + f.scrolling = "auto"; + f.unselectable = "on"; + f.allowTransparency = "true"; + + f.style.position = "absolute"; + f.style.top = 0; + f.style.left = 0; + }; + +qx.ui.embed.Iframe.initBlocker = function() +{ + + if (qx.ui.embed.Iframe._blocker) { + return; + } + + var b = qx.ui.embed.Iframe._blocker = document.createElement("div"); + + if (qx.core.Client.getInstance().isMshtml()) { + b.style.backgroundImage = "url(" + qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif") + ")"; + } + + b.style.position = "absolute"; + b.style.top = 0; + b.style.left = 0; + b.style.width = "100%"; + b.style.height = "100%"; + b.style.zIndex = 1; + b.style.display = "none"; +}; + + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/LinkEmbed.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/LinkEmbed.js new file mode 100644 index 0000000000..9ea3398eb9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/LinkEmbed.js @@ -0,0 +1,90 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.embed.LinkEmbed", qx.ui.embed.HtmlEmbed, +function(vHtml, vUri, vTarget) +{ + qx.ui.embed.HtmlEmbed.call(this, vHtml); + + if (typeof vUri != "undefined") { + this.setUri(vUri); + } + + if (typeof vTarget != "undefined") { + this.setTarget(vTarget); + } +}); + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Any valid html URI +*/ +qx.OO.addProperty({ name : "uri", type : "string", defaultValue : "#", impl : "html" }); + +/*! + Any valid html target +*/ +qx.OO.addProperty({ name : "target", type : "string", defaultValue : "_blank", impl : "html" }); + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.ui.embed.LinkEmbed.LINK_START = "<a target='"; +qx.ui.embed.LinkEmbed.HREF_START = "' href='"; +qx.ui.embed.LinkEmbed.HREF_STOP = "'>"; +qx.ui.embed.LinkEmbed.LINK_STOP = "</a>"; + +qx.Proto._syncHtml = function() +{ + var vHtml = []; + + vHtml.push(qx.ui.embed.LinkEmbed.LINK_START); + vHtml.push(this.getTarget()); + vHtml.push(qx.ui.embed.LinkEmbed.HREF_START); + vHtml.push(this.getUri()); + vHtml.push(qx.ui.embed.LinkEmbed.HREF_STOP); + vHtml.push(this.getHtml()); + vHtml.push(qx.ui.embed.LinkEmbed.LINK_STOP); + + this.getElement().innerHTML = vHtml.join(""); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/NodeEmbed.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/NodeEmbed.js new file mode 100644 index 0000000000..3b8554a682 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/NodeEmbed.js @@ -0,0 +1,50 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.embed.NodeEmbed", qx.ui.basic.Terminator, +function(vId) +{ + qx.ui.basic.Terminator.call(this); + + if (vId != null) { + this.setSourceNodeId(vId); + } +}); + +qx.OO.addProperty({ name : "sourceNodeId", type : "string" }); + +qx.Proto._createElementImpl = function() +{ + var vNode = document.getElementById(this.getSourceNodeId()); + + if (!vNode) { + throw new Error("Could not find source node with ID: " + this.getSourceNodeId()); + } + + vNode.style.display = ""; + + return this.setElement(vNode); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/TextEmbed.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/TextEmbed.js new file mode 100644 index 0000000000..a2554e3973 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/embed/TextEmbed.js @@ -0,0 +1,123 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#require(qx.renderer.font.FontCache) +#after(qx.renderer.font.FontObject) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.embed.TextEmbed", qx.ui.basic.Terminator, +function(vText) +{ + qx.ui.basic.Terminator.call(this); + + if (vText != null) { + this.setText(vText); + } +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Any text string which can contain TEXT, too +*/ +qx.OO.addProperty({ name : "text", type : "string" }); + +/*! + The font property describes how to paint the font on the widget. +*/ +qx.OO.addProperty({ name : "font", type : "object", instance : "qx.renderer.font.Font", convert : qx.renderer.font.FontCache, allowMultipleArguments : true }); + +/*! + Wrap the text? +*/ +qx.OO.addProperty({ name : "wrap", type : "boolean", defaultValue : true }); + +/** The horizontal alignment of the text. */ +qx.OO.addProperty({ name : "textAlign", type : "string", defaultValue : "left", possibleValues : [ "left", "center", "right", "justify" ], allowNull : false }); + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyText = function() +{ + if (this._isCreated) { + this._syncText(); + } + + return true; +} + +qx.Proto._modifyFont = function(propValue, propOldValue, propData) +{ + if (propValue) { + propValue._applyWidget(this); + } else if (propOldValue) { + propOldValue._resetWidget(this); + } + + return true; +} + +qx.Proto._modifyWrap = function(propValue, propOldValue, propData) +{ + this.setStyleProperty("whiteSpace", propValue ? "normal" : "nowrap"); + return true; +} + +// property modifier +qx.Proto._modifyTextAlign = function(propValue, propOldValue, propData) { + this.setStyleProperty("textAlign", propValue); + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + ELEMENT HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyElementData = function() { + this.getElement().appendChild(document.createTextNode(this.getText())); +} + +qx.Proto._syncText = function() { + this.getElement().firstChild.nodeValue = this.getText(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/Button.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/Button.js new file mode 100644 index 0000000000..858a1b8906 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/Button.js @@ -0,0 +1,208 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ +/** + * A button. + * + * @state {abandoned} + * @state {over} + * @state {pressed} + */ +qx.OO.defineClass("qx.ui.form.Button", qx.ui.basic.Atom, +function(vText, vIcon, vIconWidth, vIconHeight, vFlash) +{ + // ************************************************************************ + // INIT + // ************************************************************************ + qx.ui.basic.Atom.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); + + // Make focusable + this.setTabIndex(1); + + + // ************************************************************************ + // MOUSE EVENTS + // ************************************************************************ + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mouseout", this._onmouseout); + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + + + // ************************************************************************ + // KEY EVENTS + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keyup", this._onkeyup); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "button" }); + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseover = function(e) +{ + if (e.getTarget() != this) { + return; + } + + if (this.hasState("abandoned")) + { + this.removeState("abandoned"); + this.addState("pressed"); + } + + this.addState("over"); +} + +qx.Proto._onmouseout = function(e) +{ + if (e.getTarget() != this) { + return; + } + + this.removeState("over"); + + if (this.hasState("pressed")) + { + // Activate capturing if the button get a mouseout while + // the button is pressed. + this.setCapture(true); + + this.removeState("pressed"); + this.addState("abandoned"); + } +} + +qx.Proto._onmousedown = function(e) +{ + if (e.getTarget() != this || !e.isLeftButtonPressed()) { + return; + } + + this.removeState("abandoned"); + this.addState("pressed"); +} + +qx.Proto._onmouseup = function(e) +{ + this.setCapture(false); + + // We must remove the states before executing the command + // because in cases were the window lost the focus while + // executing we get the capture phase back (mouseout). + var hasPressed = this.hasState("pressed"); + var hasAbandoned = this.hasState("abandoned"); + + if (hasPressed) { + this.removeState("pressed"); + } + + if (hasAbandoned) { + this.removeState("abandoned"); + } + + if (!hasAbandoned) + { + this.addState("over"); + + if (hasPressed) { + this.execute(); + } + } +} + +qx.Proto._onkeydown = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Enter": + case "Space": + this.removeState("abandoned"); + this.addState("pressed"); + } +} + +qx.Proto._onkeyup = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Enter": + case "Space": + if (this.hasState("pressed")) + { + this.removeState("abandoned"); + this.removeState("pressed"); + this.execute(); + } + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // ************************************************************************ + // MOUSE EVENTS + // ************************************************************************ + this.removeEventListener("mouseover", this._onmouseover, this); + this.removeEventListener("mouseout", this._onmouseout, this); + this.removeEventListener("mousedown", this._onmousedown, this); + this.removeEventListener("mouseup", this._onmouseup, this); + + + // ************************************************************************ + // KEY EVENTS + // ************************************************************************ + this.removeEventListener("keydown", this._onkeydown, this); + this.removeEventListener("keyup", this._onkeyup, this); + + + // ************************************************************************ + // SUPER CLASS + // ************************************************************************ + return qx.ui.basic.Atom.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/CheckBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/CheckBox.js new file mode 100644 index 0000000000..8a8c581655 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/CheckBox.js @@ -0,0 +1,212 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.form.CheckBox", qx.ui.basic.Atom, +function(vText, vValue, vName, vChecked) +{ + qx.ui.basic.Atom.call(this, vText); + + this.setTabIndex(1); + this.setPadding(2, 3); + + this._createIcon(); + + if (vValue != null) { + this.setValue(vValue); + } + + if (vName != null) { + this.setName(vName); + } + + if (vChecked != null) { + this.setChecked(vChecked); + } else { + this.setChecked(false); + } + + this.addEventListener("click", this._onclick); + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keyup", this._onkeyup); +}); + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.OO.removeProperty({ name : "icon" }); +qx.OO.removeProperty({ name : "disabledIcon" }); + +/*! + The HTML name of the form element used by the widget +*/ +qx.OO.addProperty({ name : "name", type : "string" }); + +/*! + The HTML value of the form element used by the widget +*/ +qx.OO.addProperty({ name : "value", type : "string" }); + +/*! + If the widget is checked +*/ +qx.OO.addProperty({ name : "checked", type : "boolean", getAlias : "isChecked" }); + + + + + +/* +--------------------------------------------------------------------------- + ICON HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.INPUT_TYPE = "checkbox"; + +qx.Proto._createIcon = function() +{ + var i = this._iconObject = new qx.ui.form.InputCheckSymbol; + + i.setType(this.INPUT_TYPE); + i.setChecked(this.isChecked()); + i.setEnabled(this.isEnabled()); + i.setAnonymous(true); + + this.addAtBegin(i); +} + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) +{ + if (this._iconObject) { + this._iconObject.setChecked(propValue); + } + + return true; +} + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (this._iconObject) { + this._iconObject.setEnabled(propValue); + } + + return qx.ui.basic.Atom.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); +} + + + + +/* +--------------------------------------------------------------------------- + HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._handleIcon = function() +{ + switch(this.getShow()) + { + case qx.ui.basic.Atom.SHOW_ICON: + case qx.ui.basic.Atom.SHOW_BOTH: + this._iconIsVisible = true; + break; + + default: + this._iconIsVisible = false; + } + + if (this._iconIsVisible) + { + this._iconObject ? this._iconObject.setDisplay(true) : this._createIcon(); + } + else if (this._iconObject) + { + this._iconObject.setDisplay(false); + } +} + + + + +/* +--------------------------------------------------------------------------- + EVENT-HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onclick = function(e) { + this.toggleChecked(); +}; + + +qx.Proto._onkeydown = function(e) +{ + if(e.getKeyIdentifier() == "Enter" && !e.isAltPressed()) { + this.toggleChecked(); + } +}; + + +qx.Proto._onkeyup = function(e) +{ + if(e.getKeyIdentifier() == "Space") { + this.toggleChecked(); + } +}; + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + this.removeEventListener("click", this._onclick); + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keyup", this._onkeyup); + + return qx.ui.basic.Atom.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBox.js new file mode 100644 index 0000000000..08a45826c0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBox.js @@ -0,0 +1,837 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) +#embed(qx.widgettheme/arrows/down.gif) + +************************************************************************ */ + +/** + * A combo-box for qooxdoo. + * + * The major additional feature compared to typical select fields is that it allows + * it to be editable. Also images are supported inside the popup list. + * + * Features: + * <ul> + * <li>Editable text field</li> + * <li>Complete key-navigation</li> + * <li>Images inside the list</li> + * <li>Images and text inside the list</li> + * </ul> + * + * @event beforeInitialOpen {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.form.ComboBox", qx.ui.layout.HorizontalBoxLayout, +function() +{ + qx.ui.layout.HorizontalBoxLayout.call(this); + + + // ************************************************************************ + // LIST + // ************************************************************************ + var l = this._list = new qx.ui.form.List; + + l.setAppearance("combo-box-list"); + + + // ************************************************************************ + // MANAGER + // ************************************************************************ + var m = this._manager = this._list.getManager(); + + m.setMultiSelection(false); + m.setDragSelection(false); + + + // ************************************************************************ + // POPUP + // ************************************************************************ + var p = this._popup = new qx.ui.popup.Popup; + + p.setAppearance("combo-box-popup"); + p.setAutoHide(false); + + p.add(l); + + + // ************************************************************************ + // TEXTFIELD + // ************************************************************************ + var f = this._field = new qx.ui.form.TextField; + + f.setAppearance("combo-box-text-field"); + f.setTabIndex(-1); + + this.add(f); + + + // ************************************************************************ + // BUTTON + // ************************************************************************ + + // Use qx.ui.basic.Atom instead of qx.ui.form.Button here to omit the registration + // of the unneeded and complex button events. + var b = this._button = new qx.ui.basic.Atom(null, "widget/arrows/down.gif"); + + b.setAppearance("combo-box-button"); + b.setTabIndex(-1); + + this.add(b); + + + // ************************************************************************ + // BEHAVIOR + // ************************************************************************ + this.setTabIndex(1); + this.setEditable(false); + + + // ************************************************************************ + // WIDGET MOUSE EVENTS + // ************************************************************************ + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mousewheel", this._onmousewheel); + + + // ************************************************************************ + // WIDGET KEY EVENTS + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + this.addEventListener("keyinput", this._onkeyinput); + + + // ************************************************************************ + // WIDGET STATE EVENTS + // ************************************************************************ + this.addEventListener("beforeDisappear", this._onbeforedisappear); + + + // ************************************************************************ + // CHILDREN EVENTS + // ************************************************************************ + this._popup.addEventListener("appear", this._onpopupappear, this); + this._field.addEventListener("input", this._oninput, this); + + + // ************************************************************************ + // DOCUMENT EVENTS + // ************************************************************************ + var vDoc = qx.ui.core.ClientDocument.getInstance(); + vDoc.addEventListener("windowblur", this._onwindowblur, this); + + + // ************************************************************************ + // REMAPPING + // ************************************************************************ + this.remapChildrenHandlingTo(l); +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "combo-box" }); + +qx.OO.addProperty({ name: "editable", type: "boolean", getAlias: "isEditable" }); +qx.OO.addProperty({ name: "selected", type: "object", instance : "qx.ui.form.ListItem" }); +qx.OO.addProperty({ name: "value", type : "string" }); +qx.OO.addProperty({ name: "pagingInterval", type: "number", defaultValue: 10 }); + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + +qx.Proto.getPopup = function() { + return this._popup; +} + +qx.Proto.getList = function() { + return this._list; +} + +qx.Proto.getField = function() { + return this._field; +} + +qx.Proto.getButton = function() { + return this._button; +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifySelected = function(propValue, propOldValue, propData) +{ + this._fromSelected = true; + + // only do this if we called setSelected seperatly + // and not from the property "value". + if (!this._fromValue) { + this.setValue(propValue ? propValue.getLabel() : ""); + } + + // reset manager cache + this._manager.setLeadItem(propValue); + this._manager.setAnchorItem(propValue); + + // sync to manager + if (propValue) + { + this._manager.setSelectedItem(propValue); + } + else + { + this._manager.deselectAll(); + } + + // reset hint + delete this._fromSelected; + + return true; +} + +qx.Proto._modifyValue = function(propValue, propOldValue, propData) +{ + this._fromValue = true; + + // only do this if we called setValue seperatly + // and not from the event "input". + if (!this._fromInput) + { + if (this._field.getValue() == propValue) { + this._field.forceValue(null); + } + + this._field.setValue(propValue); + } + + // only do this if we called setValue seperatly + // and not from the property "selected". + if (!this._fromSelected) + { + // inform selected property + var vSelItem = this._list.findStringExact(propValue); + + // ignore disabled items + if (vSelItem != null && !vSelItem.getEnabled()) { + vSelItem = null; + } + + this.setSelected(vSelItem); + } + + // reset hint + delete this._fromValue; + + return true; +} + +qx.Proto._modifyEditable = function(propValue, propOldValue, propData) +{ + var f = this._field; + + f.setReadOnly(!propValue); + f.setCursor(propValue ? null : "default"); + f.setSelectable(propValue); + + return true; +} + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (this._button) { + this._button.setEnabled(propValue); + } + + if (this._field) { + this._field.setEnabled(propValue); + } + + return qx.ui.layout.HorizontalBoxLayout.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); +} + + + + + +/* +--------------------------------------------------------------------------- + POPUP HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto._oldSelected = null; + +qx.Proto._openPopup = function() +{ + var p = this._popup; + var el = this.getElement(); + + if (!p.isCreated()) { + this.createDispatchEvent("beforeInitialOpen"); + } + + if (this._list.getChildrenLength() == 0) { + return; + } + + p.positionRelativeTo(el, 1, qx.html.Dimension.getBoxHeight(el)); + p.setWidth(this.getBoxWidth()-2); + + p.setParent(this.getTopLevelWidget()); + p.show(); + + this._oldSelected = this.getSelected(); + + this.setCapture(true); +} + +qx.Proto._closePopup = function() +{ + this._popup.hide(); + this.setCapture(false); +} + +qx.Proto._testClosePopup = function() +{ + if (this._popup.isSeeable()) { + this._closePopup(); + } +} + +qx.Proto._togglePopup = function() { + this._popup.isSeeable() ? this._closePopup() : this._openPopup(); +} + + + + + +/* +--------------------------------------------------------------------------- + OTHER EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onpopupappear = function(e) +{ + var vSelItem = this.getSelected(); + if (vSelItem) { + vSelItem.scrollIntoView(); + } +} + +qx.Proto._oninput = function(e) +{ + // Hint for modifier + this._fromInput = true; + + this.setValue(this._field.getComputedValue()); + + // be sure that the found item is in view + if (this.getPopup().isSeeable() && this.getSelected()) { + this.getSelected().scrollIntoView(); + } + + delete this._fromInput; +} + +qx.Proto._onbeforedisappear = function(e) +{ + this._testClosePopup(); +} + + + +/* +--------------------------------------------------------------------------- + MOUSE EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + var vTarget = e.getTarget(); + + switch(vTarget) + { + case this._field: + if (this.getEditable()) { + break; + } + + // no break here + + case this._button: + this._button.addState("pressed"); + this._togglePopup(); + break; + + case this: + case this._list: + break; + + default: + if (vTarget instanceof qx.ui.form.ListItem && vTarget.getParent() == this._list) + { + this._list._onmousedown(e); + this.setSelected(this._list.getSelectedItem()); + + this._closePopup(); + this.setFocused(true); + } + else if (this._popup.isSeeable()) + { + this._popup.hide(); + this.setCapture(false); + } + } +} + +qx.Proto._onmouseup = function(e) +{ + switch(e.getTarget()) + { + case this._field: + if (this.getEditable()) { + break; + } + + // no break here + + default: + this._button.removeState("pressed"); + break; + } +} + +qx.Proto._onmouseover = function(e) +{ + var vTarget = e.getTarget(); + + if (vTarget instanceof qx.ui.form.ListItem) + { + var vManager = this._manager; + + vManager.deselectAll(); + + vManager.setLeadItem(vTarget); + vManager.setAnchorItem(vTarget); + + vManager.setSelectedItem(vTarget); + } +} + +qx.Proto._onmousewheel = function(e) +{ + if (!this._popup.isSeeable()) + { + var toSelect; + + var isSelected = this.getSelected(); + + if (e.getWheelDelta() < 0) + { + toSelect = isSelected ? this._manager.getNext(isSelected) : this._manager.getFirst(); + } + else + { + toSelect = isSelected ? this._manager.getPrevious(isSelected) : this._manager.getLast(); + } + + if (toSelect) + { + this.setSelected(toSelect); + } + } + /* close the popup if the event target is not the combobox or + * not one of the list items of the popup list + */ + else { + var vTarget = e.getTarget(); + + if (vTarget!=this && vTarget.getParent()!=this._list) { + this._popup.hide(); + this.setCapture(false); + } + } +} + + + +/* +--------------------------------------------------------------------------- + KEY EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) +{ + var vManager = this._manager; + var vVisible = this._popup.isSeeable(); + + switch(e.getKeyIdentifier()) + { + // Handle <ENTER> + case "Enter": + if (vVisible) + { + this.setSelected(this._manager.getSelectedItem()); + this._closePopup(); + this.setFocused(true); + } + else + { + this._openPopup(); + } + + return; + + // Handle <ESC> + case "Escape": + if (vVisible) + { + vManager.setLeadItem(this._oldSelected); + vManager.setAnchorItem(this._oldSelected); + + vManager.setSelectedItem(this._oldSelected); + + this._field.setValue(this._oldSelected ? this._oldSelected.getLabel() : ""); + + this._closePopup(); + this.setFocused(true); + } + + return; + + // Handle Alt+Down + case "Down": + if (e.isAltPressed()) + { + this._togglePopup(); + return; + } + + break; + } +}; + + +qx.Proto._onkeypress = function(e) +{ + var vVisible = this._popup.isSeeable(); + var vManager = this._manager; + + switch(e.getKeyIdentifier()) + { + // Handle <PAGEUP> + case "PageUp": + if (!vVisible) + { + var vPrevious; + var vTemp = this.getSelected(); + + if (vTemp) + { + var vInterval = this.getPagingInterval(); + + do { + vPrevious = vTemp; + } while(--vInterval && (vTemp = vManager.getPrevious(vPrevious))); + } + else + { + vPrevious = vManager.getLast(); + } + + this.setSelected(vPrevious); + + return; + } + + break; + + // Handle <PAGEDOWN> + case "PageDown": + if (!vVisible) + { + var vNext; + var vTemp = this.getSelected(); + + if (vTemp) + { + var vInterval = this.getPagingInterval(); + + do { + vNext = vTemp; + } while(--vInterval && (vTemp = vManager.getNext(vNext))); + } + else + { + vNext = vManager.getFirst(); + } + + this.setSelected(vNext); + + return; + } + + break; + } + + // Default Handling + if (!this.isEditable() || vVisible) + { + this._list._onkeypress(e); + + var vSelected = this._manager.getSelectedItem(); + + if (!vVisible) + { + this.setSelected(vSelected); + } + else if (vSelected) + { + this._field.setValue(vSelected.getLabel()); + } + } +}; + + +qx.Proto._onkeyinput = function(e) +{ + var vVisible = this._popup.isSeeable(); + if (!this.isEditable() || vVisible) + { + this._list._onkeyinput(e); + + var vSelected = this._manager.getSelectedItem(); + + if (!vVisible) + { + this.setSelected(vSelected); + } + else if (vSelected) + { + this._field.setValue(vSelected.getLabel()); + } + } +}; + + + +/* +--------------------------------------------------------------------------- + GLOBAL BLUR/FOCUS HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onwindowblur = qx.Proto._testClosePopup; + + + + + + + +/* +--------------------------------------------------------------------------- + FOCUS HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._visualizeBlur = function() +{ + // Force blur, even if mouseFocus is not active because we + // need to be sure that the previous focus rect gets removed. + // But this only needs to be done, if there is no new focused element. + if (qx.core.Client.getInstance().isMshtml()) + { + if (this.getEnableElementFocus() && !this.getFocusRoot().getFocusedChild()) + { + try + { + if (this.getEditable()) + { + this.getField().getElement().blur(); + } + else + { + this.getElement().blur(); + } + } + catch(ex) {}; + } + } + else + { + if (this.getEnableElementFocus()) + { + try + { + if (this.getEditable()) + { + this.getField().getElement().blur(); + } + else if (!this.getFocusRoot().getFocusedChild()) + { + this.getElement().blur(); + } + } + catch(ex) {}; + } + } + + this.removeState("focused"); + return true; +} + +qx.Proto._visualizeFocus = function() +{ + if (!qx.event.handler.FocusHandler.mouseFocus && this.getEnableElementFocus()) + { + try + { + if (this.getEditable()) + { + this.getField().getElement().focus(); + this.getField()._ontabfocus(); + } + else + { + this.getElement().focus(); + } + } + catch(ex) {}; + } + + this.addState("focused"); + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSE +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // ************************************************************************ + // WIDGET MOUSE EVENTS + // ************************************************************************ + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mousewheel", this._onmousewheel); + + + // ************************************************************************ + // WIDGET KEY EVENTS + // ************************************************************************ + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + this.removeEventListener("keyinput", this._onkeyinput); + + // ************************************************************************ + // DOCUMENT EVENTS + // ************************************************************************ + var vDoc = qx.ui.core.ClientDocument.getInstance(); + vDoc.removeEventListener("windowblur", this._onwindowblur, this); + + if (this._popup) + { + this._popup.removeEventListener("appear", this._onpopupappear, this); + if (!qx.core.Object._disposeAll) { + this._popup.setParent(null); + // If this is not a page unload, we have to reset the parent. Otherwise, + // disposing a ComboBox that was clicked at least once would mean that + // the popup is still referenced by the parent. When an application + // repeatedly creates and disposes ComboBoxes, this would mean a memleak + // (and it would also mess with other things like focus management). + } + this._popup.dispose(); + this._popup = null; + } + + if (this._list) + { + this._list.dispose(); + this._list = null; + } + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + if (this._field) + { + this._field.removeEventListener("input", this._oninput, this); + this._field.dispose(); + this._field = null; + } + + if (this._button) + { + this._button.dispose(); + this._button = null; + } + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js new file mode 100644 index 0000000000..03004689af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js @@ -0,0 +1,1037 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * David Perez Carmona (david-perez), based on qx.ui.form.ComboBox + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_comboboxex) +#require(qx.ui.table.Table) +#embed(qx.widgettheme/arrows/down.gif) +#embed(qx.icontheme/16/actions/edit-find.png) +#embed(qx.icontheme/16/actions/dialog-ok.png) +#embed(qx.icontheme/16/actions/dialog-cancel.png) + +************************************************************************ */ + +/** + * An enhanced combo-box for qooxdoo. + * + * <p>Features:</p> + * <ul> + * <li>Editable text field</li> + * <li>Complete key-navigation</li> + * <li>Mouse wheel navigation</li> + * <li>Multicolumn display in list</li> + * <li>If more than one column, headers are automatically shown</li> + * <li>Can show the ID and/or description of each list item</li> + * <li>Automatically calculating needed width</li> + * <li>Popup list always shows full contents, and can be wider than text field</li> + * <li>Search values through popup dialog</li> + * <li>Internationalization support of messages</li> + * </ul> + * <p>Pending features:</p> + * <ul> + * <li>Images inside the list</li> + * <li>Autocomplete on key input</li> + * </ul> + * + * @event beforeInitialOpen {qx.event.type.Event} + */ +qx.OO.defineClass('qx.ui.form.ComboBoxEx', qx.ui.layout.HorizontalBoxLayout, function() { + qx.ui.layout.HorizontalBoxLayout.call(this); + + // ************************************************************************ + // POPUP + // ************************************************************************ + var p = this._popup = new qx.ui.popup.Popup; + p.setAppearance('combo-box-ex-popup'); + + // ************************************************************************ + // LIST + // ************************************************************************ + this._createList([ this.tr("ID"), this.tr("Description") ]); + + // ************************************************************************ + // FIELD + // ************************************************************************ + var f = this._field = new qx.ui.form.TextField; + f.setAppearance('combo-box-ex-text-field'); + f.addEventListener("input", this._oninput, this); + this.add(f); + this.setEditable(false); + + // ************************************************************************ + // BUTTON + // ************************************************************************ + + // Use qx.ui.basic.Atom instead of qx.ui.form.Button here to omit the registration + // of the unneeded and complex button events. + var b = this._button = new qx.ui.basic.Atom(null, "widget/arrows/down.gif"); + b.set({ + appearance: "combo-box-button", + tabIndex: -1 + }); + this.add(b); + + // ************************************************************************ + // BEHAVIOR + // ************************************************************************ + this.setTabIndex(1); + + // ************************************************************************ + // WIDGET MOUSE EVENTS + // ************************************************************************ + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("mousewheel", this._onmousewheel); + this.addEventListener("dblclick", function() { + if (this.getAllowSearch()) { + this.openSearchDialog(); + } + }); + + // ************************************************************************ + // WIDGET KEY EVENTS + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + + // ************************************************************************ + // WIDGET STATE EVENTS + // ************************************************************************ + this.addEventListener("beforeDisappear", this._testClosePopup); + + // ************************************************************************ + // CHILDREN EVENTS + // ************************************************************************ + this._popup.addEventListener("appear", this._onpopupappear, this); +}); + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "combo-box-ex" }); + +/*!Is the text field component editable or the user can only select from the list?*/ +qx.OO.addProperty({ name: "editable", type: "boolean", getAlias: "isEditable" }); + +/*!0 based. -1 means no selected index. It retrieves always the value column of the selection, not the description.*/ +qx.OO.addProperty({ name: "value", type : "string" }); + +/*!How many items to transverse with PageUp and PageDn.*/ +qx.OO.addProperty({ name: "pagingInterval", type: "number", defaultValue: 10 }); + +/*!Show the ID column (column 0) of the selection data?*/ +qx.OO.addProperty({ name: "idColumnVisible", type: "boolean", getAlias: "isIdColumnVisible", defaultValue: false }); + +/*!Only used when editable is false. It determines what to show in the text field of the combo box.*/ +qx.OO.addProperty({ name: "showOnTextField", type: "string", defaultValue: 'description', possibleValues : [ 'description', 'idAndDescription' ] }); + +/*!Only used when editable is false and showOnTextField=='idAndDescription'.*/ +qx.OO.addProperty({ name: "idDescriptionSeparator", type: "string", defaultValue: '- ' }); + +/*!Ensures that always an item is selected (in case the selection isn't empty). Only used when editable is false.*/ +qx.OO.addProperty({ name: 'ensureSomethingSelected', type: "boolean", defaultValue: true }); + +/*!Allow the search dialog when double clicking the combo, or pressing special keys?.*/ +qx.OO.addProperty({ name: 'allowSearch', type: "boolean", defaultValue: true }); + +/*!Maximum number of visible rows in the popup list.*/ +qx.OO.addProperty({ name: 'maxVisibleRows', type: "number", defaultValue: 10 }); + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getPopup = function() { + return this._popup; +} + +qx.Proto.getList = function() { + return this._list; +} + +qx.Proto.getField = function() { + return this._field; +} + +qx.Proto.getButton = function() { + return this._button; +} + +qx.Proto._getComboSetting = function(key) { + return qx.Settings.getValueOfClass('qx.ui.form.ComboBoxEx', key); +} + +/**Gets the current selected row of the selection. + * @return null if nothing selected or an array*/ +qx.Proto.getSelectedRow = function() { + var ind = this.getSelectedIndex(); + return ind < 0 ? null : this._model.getData()[ind]; +} + +/**Creates the list component.*/ +qx.Proto._createList = function(columns) { + this._model = new qx.ui.table.SimpleTableModel; + // Default column titles + this._model.setColumns(columns); + var l = this._list = new qx.ui.table.Table(this._model); + l.setFocusedCell = function() {} + l.setAppearance('combo-box-ex-list'); + // We receive this: Modification of property "keepFirstVisibleRowComplete" failed with exception: TypeError - vCurrentChild has no properties or + // this: Modification of property "keepFirstVisibleRowComplete" failed with exception: TypeError - this.getParent() has no properties + l.forceKeepFirstVisibleRowComplete(false); + var selMan = l._getSelectionManager(); + var oldHandle = selMan.handleMouseUp, me = this; + selMan.handleMouseUp = function(vItem, e) { + oldHandle.apply(selMan, arguments); + if (e.isLeftButtonPressed()) { + me._testClosePopup(); + } + } + this._modifyIdColumnVisible(this.getIdColumnVisible()); + this._manager = l.getSelectionModel(); + this._manager.addEventListener('changeSelection', this._onChangeSelection, this); + // Avoid deselection from user + this._manager.removeSelectionInterval = function() {}; + this._manager.setSelectionMode(qx.ui.table.SelectionModel.SINGLE_SELECTION); + this._popup.add(l); + // Invalidate calculation of column widths + delete this._calcDimensions; +} + + +/* +--------------------------------------------------------------------------- + PSEUDO-PROPERTIES +--------------------------------------------------------------------------- +*/ + +/**Sets the header for each column. + * @param columns {String[]}*/ +qx.Proto.setColumnHeaders = function(columns) { + if (!this._list || columns.length != this._model.getColumnCount()) { + if (this._list) { + var data = this._model.getData(); + this._list.setParent(null); + this._list.dispose(); + this._list = null; + } + this._createList(columns); + if (data && data.length) { + this._model.setData(data); + } + } else { + this._model.setColumns(columns); + this._list.getTableColumnModel().init(columns.length); + delete this._calcDimensions; + } + this._modifyIdColumnVisible(this.getIdColumnVisible()); +} + +/**Getter for {@link #setColumnHeaders}. + * @return {String[]}*/ +qx.Proto.getColumnHeaders = function(propVal) { + var cols = []; + cols.length = this._model.getColumnCount(); + for (var col = 0; col < cols.length; col++) { + cols[col] = this._model.getColumnName(col); + } + return cols; +} + +/**Sets the list of selectable items. + * @param data {var[][]} Array of values. Its value is an array, with the following info:<ul>. + * <li>Column 0 represents the ID, i.e. the value that is stored internally and used by the app.</li> + * <li>Column 1 represents the description, the text that the end user normally sees.</li> + * <li>Columns > 1 will also be shown in the popup list, it you have set the appropiate column headers with {@link #setColumnHeaders}.</li> + * </ul>*/ +qx.Proto.setSelection = function(data) { + // Invalidate calculation of column widths + delete this._calcDimensions; + this._model.setData(data); + // Try to preserve currently selected value + if (!this.getEditable()) { + this._modifyValue(this.getValue()); + } +} + +/**Getter for {@link #setSelection}. + * @return {Array}*/ +qx.Proto.getSelection = function() { + return this._model.getData(); +} + +/**Sets the index of the currently selected item in the list. + * @param index {number} -1 means no selected index*/ +qx.Proto.setSelectedIndex = function(index) { + var items = this.getSelection().length; + if (items >= 0) { + if (index < 0 && !this.getEditable() && this.getEnsureSomethingSelected()) { + index = 0; + } + if (index >= 0) { + index = qx.lang.Number.limit(index, 0, items-1); + this._manager.setSelectionInterval(index, index); + if (this._popup.isSeeable()) { + this._list.scrollCellVisible(0, index); + } + } else { + this._manager.clearSelection(); + } + } + return true; +} + +/**Getter for {@link #setSelectedIndex}.*/ +qx.Proto.getSelectedIndex = function() { + var index = this._manager.getAnchorSelectionIndex(); + return this._manager.isSelectedIndex(index) ? index:-1; +} + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyShowOnTextField = function(propVal) { + if (!this.getEditable()) { + this.setSelectedIndex(this.getSelectedIndex()); + delete this._calcDimensions; // Invalidate this._neededTextFieldWidth + } + return true; +} + +qx.Proto._modifyMaxVisibleRows = function() { + delete this._calcDimensions; // Invalidate this._list.height + return true; +} + +qx.Proto._checkIdDescriptionSeparator = function(propVal) { + // For measuring widths, it is better to replace spaces with non-breakable spaces + return String(propVal).replace(/ /g, '\u00A0') +} + +qx.Proto._modifyIdDescriptionSeparator = function(propVal) { + if (!this.getEditable() && this.getShowOnTextField() == 'idAndDescription') { + this.setSelectedIndex(this.getSelectedIndex()); + delete this._calcDimensions; // Invalidate this._neededTextFieldWidth + } + return true; +} + +qx.Proto._modifyIdColumnVisible = function(propVal) { + this._list.getTableColumnModel().setColumnVisible(0, propVal); + delete this._calcDimensions; + return true; +} + +qx.Proto._modifyEditable = function(propValue/*, propOldValue, propData*/) { + var f = this._field; + f.setReadOnly(!propValue); + f.setCursor(propValue ? null : "default"); + f.setSelectable(propValue); + return true; +} + +qx.Proto._modifyValue = function(propValue/*, propOldValue, propData*/) { + this._fromValue = true; + + var values = this._model.getData(); + var i = -1; + if (propValue != null) { + for (var i = 0; i < values.length; i++) { + if (propValue == values[i][0]) { + break; + } + } + if (i == values.length) { + i = -1; + } + } + if (this.getEditable()) { + this._field.setValue(propValue); + } + // only do this if we called setValue separately + // and not from the property "selected". + if (!this._fromSelected) { + this.setSelectedIndex(i); + } + // reset hint + delete this._fromValue; + return true; +} + +qx.Proto._modifyEnabled = function(propValue/*, propOldValue, propData*/) { + if (this._button) { + this._button.setEnabled(propValue); + } + if (this._field) { + this._field.setEnabled(propValue); + } + return qx.ui.layout.HorizontalBoxLayout.prototype._modifyEnabled.apply(this, arguments); +} + + +/* +--------------------------------------------------------------------------- + POPUP HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto._oldSelected = null; + +qx.Proto._openPopup = function() { + if (this.isSearchInProgress()) { + return; + } + var p = this._popup; + p.setAutoHide(false); + var el = this.getElement(); + if (!p.isCreated()) { + this.createDispatchEvent("beforeInitialOpen"); + } + if (!this.getSelection().length) { + return; + } + p.positionRelativeTo(el, 1, qx.html.Dimension.getBoxHeight(el)); + this._calculateDimensions(); + p.setParent(this.getTopLevelWidget()); + p.auto(); + p.show(); + this._oldSelected = this.getSelectedIndex(); + window.setInterval(function() { + p.setAutoHide(true); + }, 0); +} + +/**Hide the popup list.*/ +qx.Proto._closePopup = function() { + this._popup.hide(); +} + +/**Hide the popup list only when needed.*/ +qx.Proto._testClosePopup = function() { + if (this._popup.isSeeable()) { + this._closePopup(); + } +} + +/**Toggle the visibility of the popup list.*/ +qx.Proto._togglePopup = function() { + this._popup.isSeeable() ? this._closePopup() : this._openPopup(); +} + +/* +--------------------------------------------------------------------------- + DIMENSIONING +--------------------------------------------------------------------------- +*/ + +/**Sizes the width of the text field component to the needed value to show any selection item.*/ +qx.Proto.sizeTextFieldToContent = function() { + this._calculateDimensions(); + this._field.setWidth(this._neededTextFieldWidth); +} + +/**Calculates the needed dimensions for the text field and list components*/ +qx.Proto._calculateDimensions = function() { + if (this._calcDimensions) { + // Already calculated + return; + } + var data = this.getSelection(); + var cols = this.getColumnHeaders(), nCols = cols.length; + var columnWidths = []; + this._neededTextFieldWidth = 0; + columnWidths.length = cols.length; + for (var col = 0; col < cols.length; col++) { + columnWidths[col] = 0; + } + var withDescript = this.getShowOnTextField() == 'idAndDescription'; + for (var row = 0, rows = Math.min(data.length, 50); row < rows; row++) { + var r = data[row], wi0, wi1; + for (col = 0; col < nCols; col++) { + var wi = this._getTextWidth(r[col]); + if (col == 0) { + wi0 = wi; + } else if (col == 1) { + wi1 = wi; + } + columnWidths[col] = Math.max(wi, columnWidths[col]); + } + this._neededTextFieldWidth = Math.max(this._neededTextFieldWidth, + wi1+(withDescript ? wi0:0)); + } + if (this.getShowOnTextField() == 'idAndDescription') { + this._neededTextFieldWidth += this._getTextWidth(this.getIdDescriptionSeparator()); + } + this._neededTextFieldWidth += 8; /*Extra margins*/ + var maxRows = this.getMaxVisibleRows(), + // Only assign room for the vertical scrollbar when needed + width = data.length > maxRows ? (new qx.ui.core.ScrollBar)._getScrollBarWidth():0, + colModel = this._list.getTableColumnModel(), + countVisible = 0; + + // ##Only show headers if we have more than 1 column visible + for (col = 0; col < nCols; col++) { + if (colModel.isColumnVisible(col)) { + countVisible++; + } + } + var hasHeaders = countVisible > 1; + this._list.getPaneScroller(0).getHeader().setHeight(hasHeaders ? 'auto' : 1); + + // ##Size each column + for (col = 0; col < nCols; col++) { + if (colModel.isColumnVisible(col)) { + var w = columnWidths[col]; + if (hasHeaders) { + w = Math.max(w, this._getTextWidth(cols[col])); + } + w += 8; + this._list.setColumnWidth(col, w); + width += w; + } + } + + // ##Final width and height + this._list.set({ + width: width, + height: this._list.getRowHeight()* + Math.min(maxRows, (hasHeaders ? 1:0)+data.length)+2+(hasHeaders ? 2:0) + }); + // This denotes dimensions are already calculated + this._calcDimensions = true; +} + +/**Calculates the width of the given text. + * The default font is used. + * @return {Integer}*/ +qx.Proto._getTextWidth = function(text) { + var lab = new qx.ui.basic.Label(text); + var res = lab.getPreferredBoxWidth(); + lab.dispose(); + return res; +} + + +/* +--------------------------------------------------------------------------- + SEARCHING +--------------------------------------------------------------------------- +*/ + +/**Does this combo have the searched dialog open?*/ +qx.Proto.isSearchInProgress = function() { + return !this._popup.contains(this._list); +} + +/**Searches the given text. Called from the search dialog. + * @param startIndex {number} Start index, 0 based + * @param txt {String} Text to find + * @param caseSens {Boolean} Case sensivity flag.*/ +qx.Proto._search = function(startIndex, txt, caseSens) { + if (txt == null || !txt.length) { + return; + } + var row = startIndex, + nCols = this._model.getColumnCount(), + nRows = this.getSelection().length, + data = this._model.getData(); + if (!caseSens) { + txt = txt.toLowerCase(); + } + var colModel = this._list.getTableColumnModel(); + while (true) { + var dataRow = data[row]; + if (dataRow) { + for (var col = 0; col < nCols; col++) { + if (colModel.isColumnVisible(col)) { + var txtCol = dataRow[col]; + if (!caseSens) { + txtCol = txtCol.toLowerCase(); + } + if (txtCol.indexOf(txt) >= 0) { + this._manager.setSelectionInterval(row, row); + this._list.scrollCellVisible(1, row); + return; + } + } + } + } + row = (row+1)% nRows; + if (row == startIndex) { + break; + } + } +} + +/**Opens a popup search dialog, useful when the combo has a lot of items. + * This dialog is triggered by double clicking the combo, pressing F3 or Ctrl+F.*/ +qx.Proto.openSearchDialog = function() { + var sel = this.getSelection(); + if (!sel || !sel.length || this.isSearchInProgress()) { + return; + } + this._testClosePopup(); + + var me = this, + oldSelectedIndex = this.getSelectedIndex(), + startIndex = oldSelectedIndex; + + //###searchField + function search() { + me._search(startIndex, searchField.getComputedValue(), checkCase.isChecked()); + } + var searchField = new qx.ui.form.TextField; + searchField.set({ + minWidth: this._field.getWidth(), + width: '100%' + }); + searchField.addEventListener("input", function() { + search(); + }); + + //###checkCase + var checkCase = new qx.ui.form.CheckBox(this.tr("Case sensitive")); + checkCase.set({ + horizontalAlign: 'center', + marginBottom: 4 + }); + + //###vbox + var vbox = new qx.ui.layout.VerticalBoxLayout; + vbox.set({ + spacing: 6, + horizontalChildrenAlign: 'center', + height: '100%' + }); + vbox.auto(); + vbox.add(searchField, checkCase); + + //###list, we reuse the same list in the popup + this._calculateDimensions(); + var border = qx.renderer.border.BorderPresets.getInstance().inset; + var newListSettings = { + /*minHeight: border.getTopWidth()+this._list.getHeight()+border.getBottomWidth(), + height: '1*',*/ + height: border.getTopWidth()+this._list.getHeight()+border.getBottomWidth(), + width: border.getLeftWidth()+this._list.getWidth()+border.getRightWidth(), + border: border, + parent: vbox + }; + // Save old list settings + var oldListSettings = {}; + for (var prop in newListSettings) { + oldListSettings[prop] = this._list[qx.OO.getter[prop]](); + } + this._list.set(newListSettings); + + //###buttons + var butNext = new qx.ui.form.Button('', 'icon/16/actions/edit-find.png'); + butNext.set({ + toolTip: new qx.ui.popup.ToolTip(this.tr("Search next occurrence")) + }); + butNext.addEventListener("execute", function() { + startIndex = (this.getSelectedIndex()+1) % sel.length; + search(); + }, this); + + var butOk = new qx.ui.form.Button('', 'icon/16/actions/dialog-ok.png'); + butOk.addEventListener('execute', function() { + oldSelectedIndex = null; + win.close(); + }, this); + + var butCancel = new qx.ui.form.Button('', 'icon/16/actions/dialog-cancel.png'); + butCancel.addEventListener('execute', function() { + win.close(); + }, this); + + var butBox = new qx.ui.layout.VerticalBoxLayout; + butBox.auto(); + butBox.set({ + spacing: 10 + }); + butBox.add(butNext, butOk, butCancel); + + //###hbox + var hbox = new qx.ui.layout.BoxLayout; + hbox.auto(); + hbox.setPadding(10); + hbox.set({ + spacing: 8, + minHeight: 'auto', + height: '100%' + }); + hbox.add(vbox, butBox); + + //###Window + var win = new qx.ui.window.Window(this.tr("Search items in list"), 'icon/16/actions/edit-find.png'); + win.add(hbox); + win.positionRelativeTo(this); + win.set({ + autoHide: true, + allowMaximize: false, + showMaximize: false, + allowMinimize: false, + showMinimize: false + }); + win.addEventListener("appear", function() { + searchField.focus(); + }); + win.addEventListener("disappear", function() { + if (oldSelectedIndex != null) { + // Hit Cancel button + this.setSelectedIndex(oldSelectedIndex); + } + this._list.set(oldListSettings); + this.focus(); + }, this); + win.addEventListener("keydown", function(e) { + switch (e.getKeyIdentifier()) { + case "Enter": + butOk.createDispatchEvent('execute'); + break; + case "Escape": + butCancel.createDispatchEvent('execute'); + break; + case "F3": + butNext.createDispatchEvent('execute'); + break; + default: + return; + } + e.preventDefault(); + }, this); + win.auto(); + win.addToDocument(); + win.open(); +} + +/* +--------------------------------------------------------------------------- + OTHER EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onChangeSelection = function(e) { + this._fromSelected = true; + + // only do this if we called setValue separately + // and not from the event "input". + if (!this._fromInput) { + var index = this.getSelectedIndex(); + if (index >= 0) { + var row = this._model.getData()[index]; + } + if (row || !this.getEditable()) { + this.setValue(row && row[0]); + } + // In case of editable, this.setValue() already calls this._field.setValue() + if (!this.getEditable()) { + var val = ""; + if (row) { + val = this.getShowOnTextField() == 'description' ? + row[1] : + (row[0] != null && row[0] != '' ? row[0] + this.getIdDescriptionSeparator() + row[1]:row[1]); + } + this._field.setValue(val); + } + } + // reset hint + delete this._fromSelected; +} + +qx.Proto._onpopupappear = function(e) { + var index = this.getSelectedIndex(); + if (index >= 0) { + this._list.scrollCellVisible(0, index); + } +} + +qx.Proto._oninput = function(e) { + // Hint for modifier + this._fromInput = true; + this.setValue(this._field.getComputedValue()); + delete this._fromInput; +} + + +/* +--------------------------------------------------------------------------- + MOUSE EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) { + switch(e.getTarget()) { + case this._field: + if (this.getEditable()) { + break; + } + // no break here + case this._button: + this._button.addState("pressed"); + this._togglePopup(); + // Assure we receive the mouse up event + this.setCapture(true); + break; + } +} + +qx.Proto._onmouseup = function(e) { + switch(e.getTarget()) { + case this._field: + if (this.getEditable()) { + break; + } + // no break here + default: + this._button.removeState("pressed"); + break; + } + this.setCapture(false); +} + +qx.Proto._onmousewheel = function(e) { + if (!this._popup.isSeeable()) { + this.setSelectedIndex(Math.max(0, this.getSelectedIndex()+(e.getWheelDelta() < 0 ? -1:1))); + } +} + + +/* +--------------------------------------------------------------------------- + KEY EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) { + var vVisible = this._popup.isSeeable(); + + switch (e.getKeyIdentifier()) { + case "Enter": + if (vVisible) { + this._closePopup(); + this.setFocused(true); + } else { + this._openPopup(); + } + break; + + case "Escape": + if (vVisible) { + this.setSelectedIndex(this._oldSelected); + this._closePopup(); + this.setFocused(true); + } + break; + + case "Home": + this.setSelectedIndex(0); + break; + + case "End": + var items = this.getSelection().length; + if (items) { + this.setSelectedIndex(items-1); + } + break; + + case "Down": + if (e.isAltPressed()) { + this._togglePopup(); + } + break; + + case "F3": + if (this.getAllowSearch()) { + this.openSearchDialog(); + } + break; + + case "F": + if (e.isCtrlPressed()) { + if (this.getAllowSearch()) { + this.openSearchDialog(); + } + break; + } + return; + + default: + if (vVisible) { + this._list.dispatchEvent(e); + } + return; + } + e.preventDefault(); +} + + +qx.Proto._onkeypress = function(e) { + var vVisible = this._popup.isSeeable(); + + switch (e.getKeyIdentifier()) { + case "Up": + this.setSelectedIndex(Math.max(0, this.getSelectedIndex()-1)); + break; + + case "Down": + this.setSelectedIndex(Math.max(0, this.getSelectedIndex()+1)); + break; + + case "PageUp": + this.setSelectedIndex(Math.max(0, this.getSelectedIndex()-this.getPagingInterval())); + break; + + case "PageDown": + this.setSelectedIndex(this.getSelectedIndex()+this.getPagingInterval()); + break; + + default: + if (vVisible) { + this._list.dispatchEvent(e); + } + return; + } + e.preventDefault(); + + if (!this.isEditable() && this._list.isSeeable()) { + this._list.dispatchEvent(e); + } + +} + + +/* +--------------------------------------------------------------------------- + FOCUS HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._visualizeBlur = function() { + // Force blur, even if mouseFocus is not active because we + // need to be sure that the previous focus rect gets removed. + // But this only needs to be done, if there is no new focused element. + if (qx.core.Client.getInstance().isMshtml()) { + if (this.getEnableElementFocus() && !this.getFocusRoot().getFocusedChild()) { + try { + if (this.getEditable()) { + this.getField().getElement().blur(); + } else { + this.getElement().blur(); + } + } + catch(ex) {}; + } + } else { + if (this.getEnableElementFocus()) { + try { + if (this.getEditable()) { + this.getField().getElement().blur(); + } else if (!this.getFocusRoot().getFocusedChild()) { + this.getElement().blur(); + } + } + catch(ex) {}; + } + } + this.removeState("focused"); + return true; +} + +qx.Proto._visualizeFocus = function() { + if (!qx.event.handler.FocusHandler.mouseFocus && this.getEnableElementFocus()) { + try { + if (this.getEditable()) { + this.getField().getElement().focus(); + this.getField()._ontabfocus(); + } else { + this.getElement().focus(); + } + } catch(ex) { + } + } + this.addState("focused"); + return true; +} + +/* +--------------------------------------------------------------------------- + DISPOSE +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return; + } + + // ************************************************************************ + // WIDGET MOUSE EVENTS + // ************************************************************************ + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("mousewheel", this._onmousewheel); + + + // ************************************************************************ + // WIDGET KEY EVENTS + // ************************************************************************ + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + + + this._model = null; + if (this._manager) { + this._manager.removeEventListener('changeSelection', this._onChangeSelection); + this._manager = null; + } + if (this._list) { + this._list.dispose(); + this._list = null; + } + if (this._popup) { + this._popup.removeEventListener("appear", this._onpopupappear, this); + this._popup.dispose(); + this._popup = null; + } + if (this._field) { + if (this.getEditable()) { + this._field.removeEventListener("input", this._oninput, this); + } + this._field.dispose(); + this._field = null; + } + if (this._button) { + this._button.dispose(); + this._button = null; + } + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/InputCheckSymbol.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/InputCheckSymbol.js new file mode 100644 index 0000000000..32e269e55a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/InputCheckSymbol.js @@ -0,0 +1,95 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.form.InputCheckSymbol", qx.ui.basic.Terminator, +function() +{ + qx.ui.basic.Terminator.call(this); + + this.setTagName("input"); + this.setSelectable(false); + + if (qx.core.Client.getInstance().isMshtml()) + { + // Take control over size of element (mshtml) + this.setWidth(13); + this.setHeight(13); + } + else if (qx.core.Client.getInstance().isGecko()) + { + // Remove gecko default margin + this.setMargin(0); + } + + // we need to be sure that the dom protection of this is added + this.forceTabIndex(1); + this.setTabIndex(-1); + this.setChecked(false); +}); + +qx.OO.addProperty({ name : "name", type : "string", impl : "apply" }); +qx.OO.addProperty({ name : "value", impl : "apply" }); +qx.OO.addProperty({ name : "type", impl : "apply" }); +qx.OO.addProperty({ name : "checked", type : "boolean", impl : "apply", getAlias : "isChecked" }); + +qx.Proto._modifyApply = function(propValue, propOldValue, propData) { + return this.setHtmlProperty(propData.name, propValue); +} + +qx.Proto.getPreferredBoxWidth = function() { + return 13; +} + +qx.Proto.getPreferredBoxHeight = function() { + return 13; +} + +qx.Proto.getBoxWidth = qx.Proto.getPreferredBoxWidth; +qx.Proto.getBoxHeight = qx.Proto.getPreferredBoxHeight; + +qx.Proto.getInnerWidth = qx.Proto.getPreferredBoxWidth; +qx.Proto.getInnerHeight = qx.Proto.getPreferredBoxHeight; + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._afterAppear = function() + { + qx.ui.basic.Terminator.prototype._afterAppear.call(this); + + var vElement = this.getElement(); + vElement.checked = this.getChecked(); + + if (!this.getEnabled()) { + vElement.disabled = true; + } + } +} + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + propValue ? this.removeHtmlAttribute("disabled") : this.setHtmlAttribute("disabled", "disabled"); + return qx.ui.basic.Terminator.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/List.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/List.js new file mode 100644 index 0000000000..23f4051023 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/List.js @@ -0,0 +1,385 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.form.List", qx.ui.layout.VerticalBoxLayout, +function() +{ + qx.ui.layout.VerticalBoxLayout.call(this); + + + // ************************************************************************ + // INITILISIZE MANAGER + // ************************************************************************ + this._manager = new qx.manager.selection.SelectionManager(this); + + + // ************************************************************************ + // BEHAVIOR + // ************************************************************************ + this.setSelectable(false); + this.setTabIndex(1); + + + // ************************************************************************ + // MOUSE EVENT LISTENER + // ************************************************************************ + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("click", this._onclick); + this.addEventListener("dblclick", this._ondblclick); + + + // ************************************************************************ + // KEY EVENT LISTENER + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + this.addEventListener("keyinput", this._onkeyinput); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list" }); + +qx.OO.addProperty({ name : "enableInlineFind", type : "boolean", defaultValue : true }); +qx.OO.addProperty({ name : "markLeadingItem", type : "boolean", defaultValue : false }); + +qx.Proto._pressedString = ""; + + + + + +/* +--------------------------------------------------------------------------- + MANAGER BINDING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + +qx.Proto.getListItemTarget = function(vItem) +{ + while (vItem != null && vItem.getParent() != this) { + vItem = vItem.getParent(); + } + + return vItem; +} + +qx.Proto.getSelectedItem = function() { + return this.getSelectedItems()[0]; +} + +qx.Proto.getSelectedItems = function() { + return this._manager.getSelectedItems(); +} + + + +/* +--------------------------------------------------------------------------- + MOUSE EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseover = function(e) +{ + var vItem = this.getListItemTarget(e.getTarget()); + + if (vItem) { + this._manager.handleMouseOver(vItem, e); + } +} + +qx.Proto._onmousedown = function(e) +{ + var vItem = this.getListItemTarget(e.getTarget()); + + if (vItem) { + this._manager.handleMouseDown(vItem, e); + } +} + +qx.Proto._onmouseup = function(e) +{ + var vItem = this.getListItemTarget(e.getTarget()); + + if (vItem) { + this._manager.handleMouseUp(vItem, e); + } +} + +qx.Proto._onclick = function(e) +{ + var vItem = this.getListItemTarget(e.getTarget()); + + if (vItem) { + this._manager.handleClick(vItem, e); + } +} + +qx.Proto._ondblclick = function(e) +{ + var vItem = this.getListItemTarget(e.getTarget()); + + if (vItem) { + this._manager.handleDblClick(vItem, e); + } +} + + + + +/* +--------------------------------------------------------------------------- + KEY EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) +{ + // Execute action on press <ENTER> + if (e.getKeyIdentifier() == "Enter" && !e.isAltPressed()) + { + var items = this.getSelectedItems(); + var currentItem; + + for (var i=0; i<items.length; i++) { + items[i].createDispatchEvent("action"); + } + } +}; + + +qx.Proto._onkeypress = function(e) +{ + // Give control to selectionManager + this._manager.handleKeyPress(e); +}; + + +qx.Proto._lastKeyPress = 0; + +qx.Proto._onkeyinput = function(e) +{ + if (!this.getEnableInlineFind()) { + return; + } + + // Reset string after a second of non pressed key + if (((new Date).valueOf() - this._lastKeyPress) > 1000) { + this._pressedString = ""; + } + + // Combine keys the user pressed to a string + this._pressedString += String.fromCharCode(e.getCharCode()); + + // Find matching item + var matchedItem = this.findString(this._pressedString, null); + + if (matchedItem) + { + var oldVal = this._manager._getChangeValue(); + + // Temporary disable change event + var oldFireChange = this._manager.getFireChange(); + this._manager.setFireChange(false); + + // Reset current selection + this._manager._deselectAll(); + + // Update manager + this._manager.setItemSelected(matchedItem, true); + this._manager.setAnchorItem(matchedItem); + this._manager.setLeadItem(matchedItem); + + // Scroll to matched item + matchedItem.scrollIntoView(); + + // Recover event status + this._manager.setFireChange(oldFireChange); + + // Dispatch event if there were any changes + if (oldFireChange && this._manager._hasChanged(oldVal)) { + this._manager._dispatchChange(); + } + } + + // Store timestamp + this._lastKeyPress = (new Date).valueOf(); + e.preventDefault(); +} + + + + +/* +--------------------------------------------------------------------------- + FIND SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto._findItem = function(vUserValue, vStartIndex, vType) +{ + var vAllItems = this.getChildren(); + + // If no startIndex given try to get it by current selection + if (vStartIndex == null) + { + vStartIndex = vAllItems.indexOf(this.getSelectedItem()); + + if (vStartIndex == -1) { + vStartIndex = 0; + } + } + + var methodName = "matches" + vType; + + // Mode #1: Find all items after the startIndex + for (var i=vStartIndex; i<vAllItems.length; i++) { + if (vAllItems[i][methodName](vUserValue)) { + return vAllItems[i]; + } + } + + // Mode #2: Find all items before the startIndex + for (var i=0; i<vStartIndex; i++) { + if (vAllItems[i][methodName](vUserValue)) { + return vAllItems[i]; + } + } + + return null; +} + +qx.Proto.findString = function(vText, vStartIndex) { + return this._findItem(vText, vStartIndex || 0, "String"); +} + +qx.Proto.findStringExact = function(vText, vStartIndex) { + return this._findItem(vText, vStartIndex || 0, "StringExact"); +} + +qx.Proto.findValue = function(vText, vStartIndex) { + return this._findItem(vText, vStartIndex || 0, "Value"); +} + +qx.Proto.findValueExact = function(vText, vStartIndex) { + return this._findItem(vText, vStartIndex || 0, "ValueExact"); +} + + + + + + +/* +--------------------------------------------------------------------------- + SORT SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto._sortItemsCompare = function(a, b) { + return a.key < b.key ? -1 : a.key == b.key ? 0 : 1; +} + +qx.Proto.sortItemsByString = function(vReverse) +{ + var sortitems = []; + var items = this.getChildren(); + + for(var i=0, l=items.length; i<l; i++) { + sortitems[i] = { key : items[i].getLabel(), item : items[i] } + } + + sortitems.sort(this._sortItemsCompare); + if (vReverse) { + sortitems.reverse(); + } + + for(var i=0; i<l; i++) { + this.addAt(sortitems[i].item, i); + } +} + +qx.Proto.sortItemsByValue = function(vReverse) +{ + var sortitems = []; + var items = this.getChildren(); + + for(var i=0, l=items.length; i<l; i++) { + sortitems[i] = { key : items[i].getValue(), item : items[i] } + } + + sortitems.sort(this._sortItemsCompare); + if (vReverse) { + sortitems.reverse(); + } + + for(var i=0; i<l; i++) { + this.addAt(sortitems[i].item, i); + } +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("click", this._onclick); + this.removeEventListener("dblclick", this._ondblclick); + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + this.removeEventListener("keyinput", this._onkeyinput); + + return qx.ui.layout.VerticalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ListItem.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ListItem.js new file mode 100644 index 0000000000..4d8bc34977 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ListItem.js @@ -0,0 +1,117 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +/** + * @event action {qx.event.type.Event} (Fired by {@link qx.ui.form.List}) + */ +qx.OO.defineClass("qx.ui.form.ListItem", qx.ui.basic.Atom, +function(vText, vIcon, vValue) +{ + qx.ui.basic.Atom.call(this, vText, vIcon); + + if (vValue != null) { + this.setValue(vValue); + } + + + // ************************************************************************ + // EVENT LISTENER + // ************************************************************************ + this.addEventListener("dblclick", this._ondblclick); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-item" }); +qx.OO.addProperty({ name : "value" }); + + + + + +/* +--------------------------------------------------------------------------- + STATE +--------------------------------------------------------------------------- +*/ + +qx.Proto.handleStateChange = function() +{ + if (this.hasState("lead")) + { + this.setStyleProperty("MozOutline", "1px dotted invert"); + this.setStyleProperty("outline", "1px dotted invert"); + } + else + { + this.removeStyleProperty("MozOutline"); + this.setStyleProperty("outline", "0px none"); + } +} + +// Remove default outline focus border +qx.Proto._applyStateStyleFocus = function(vStates) {}; + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.matchesString = function(vText) { + return vText != "" && this.getLabel().toLowerCase().indexOf(vText.toLowerCase()) == 0; +} + +qx.Proto.matchesStringExact = function(vText) { + return vText != "" && this.getLabel().toLowerCase() == String(vText).toLowerCase(); +} + +qx.Proto.matchesValue = function(vText) { + return vText != "" && this.getValue().toLowerCase().indexOf(vText.toLowerCase()) == 0; +} + +qx.Proto.matchesValueExact = function(vText) { + return vText != "" && this.getValue().toLowerCase() == String(vText).toLowerCase(); +} + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._ondblclick = function(e) +{ + var vCommand = this.getCommand(); + if (vCommand) { + vCommand.execute(); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/PasswordField.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/PasswordField.js new file mode 100644 index 0000000000..9c0bc3b006 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/PasswordField.js @@ -0,0 +1,33 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.form.PasswordField", qx.ui.form.TextField, +function(vText) +{ + qx.ui.form.TextField.call(this, vText); + + this.setHtmlProperty("type", "password"); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/RadioButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/RadioButton.js new file mode 100644 index 0000000000..d17bd7046b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/RadioButton.js @@ -0,0 +1,187 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.form.RadioButton", qx.ui.form.CheckBox, +function(vText, vValue, vName, vChecked) { + qx.ui.form.CheckBox.call(this, vText, vValue, vName, vChecked); + + this.addEventListener("keypress", this._onkeypress); +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The assigned qx.manager.selection.RadioManager which handles the switching between registered buttons +*/ +qx.OO.addProperty({ name : "manager", type : "object", instance : "qx.manager.selection.RadioManager", allowNull : true }); + + + + + +/* +--------------------------------------------------------------------------- + ICON HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.INPUT_TYPE = "radio"; + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) +{ + if (this._iconObject) { + this._iconObject.setChecked(propValue); + } + + var vManager = this.getManager(); + if (vManager) { + vManager.handleItemChecked(this, propValue); + } + + return true; +} + +qx.Proto._modifyManager = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) { + propValue.add(this); + } + + return true; +} + +qx.Proto._modifyName = function(propValue, propOldValue, propData) +{ + if (this._iconObject) { + this._iconObject.setName(propValue); + } + + if (this.getManager()) { + this.getManager().setName(propValue); + } + + return true; +} + +qx.Proto._modifyValue = function(propValue, propOldValue, propData) +{ + if (this.isCreated() && this._iconObject) { + this._iconObject.setValue(propValue); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT-HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) +{ + if (e.getKeyIdentifier() == "Enter" && !e.isAltPressed()) { + this.setChecked(true); + } +}; + + +qx.Proto._onkeypress = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Left": + case "Up": + qx.event.handler.FocusHandler.mouseFocus = false; + // we want to have a focus border when using arrows to select + qx.event.handler.FocusHandler.mouseFocus = false; + + return this.getManager() ? this.getManager().selectPrevious(this) : true; + + case "Right": + case "Down": + // we want to have a focus border when using arrows to select + qx.event.handler.FocusHandler.mouseFocus = false; + + return this.getManager() ? this.getManager().selectNext(this) : true; + } +}; + + +qx.Proto._onclick = function(e) { + this.setChecked(true); +} + +qx.Proto._onkeyup = function(e) +{ + if(e.getKeyIdentifier() == "Space") { + this.setChecked(true); + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + this.removeEventListener("keypress", this._onkeypress); + return qx.ui.form.CheckBox.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/RepeatButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/RepeatButton.js new file mode 100755 index 0000000000..bee201cf1f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/RepeatButton.js @@ -0,0 +1,129 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +/** + * @event execute {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.form.RepeatButton", qx.ui.form.Button, +function(vText, vIcon, vIconWidth, vIconHeight, vFlash) +{ + qx.ui.form.Button.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); + + this._timer = new qx.client.Timer; + this._timer.setInterval(this.getInterval()); + this._timer.addEventListener("interval", this._oninterval, this); +}); + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "interval", type : "number", defaultValue : 100 }); +qx.OO.addProperty({ name : "firstInterval", type : "number", defaultValue : 500 }); + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + if (e.getTarget() != this || !e.isLeftButtonPressed()) { + return; + } + + this._executed = false; + + this._timer.setInterval(this.getFirstInterval()); + this._timer.start(); + + this.removeState("abandoned"); + this.addState("pressed"); +} + +qx.Proto._onmouseup = function(e) +{ + this.setCapture(false); + + if (!this.hasState("abandoned")) + { + this.addState("over"); + + if (this.hasState("pressed") && !this._executed) { + this.execute(); + } + } + + this._timer.stop(); + + this.removeState("abandoned"); + this.removeState("pressed"); +} + +qx.Proto._oninterval = function(e) +{ + this._timer.stop(); + this._timer.setInterval(this.getInterval()); + this._timer.start(); + + this._executed = true; + this.createDispatchEvent("execute"); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._timer) + { + this._timer.stop(); + this._timer.dispose(); + this._timer = null; + } + + return qx.ui.form.Button.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/Spinner.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/Spinner.js new file mode 100644 index 0000000000..651c173c93 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/Spinner.js @@ -0,0 +1,694 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) +#embed(qx.widgettheme/arrows/up_small.gif) +#embed(qx.widgettheme/arrows/down_small.gif) + +************************************************************************ */ + +/** + * @event change {qx.event.type.Event} + */ +qx.OO.defineClass("qx.ui.form.Spinner", qx.ui.layout.HorizontalBoxLayout, +function(vMin, vValue, vMax) +{ + qx.ui.layout.HorizontalBoxLayout.call(this); + + // ************************************************************************ + // BEHAVIOR + // ************************************************************************ + this.setTabIndex(-1); + + if (qx.core.Client.getInstance().isMshtml()) { + this.setStyleProperty("fontSize", "0px"); + } + + + // ************************************************************************ + // MANAGER + // ************************************************************************ + this._manager = new qx.type.Range(); + + + // ************************************************************************ + // TEXTFIELD + // ************************************************************************ + this._textfield = new qx.ui.form.TextField; + this._textfield.setAppearance("spinner-field"); + this._textfield.setValue(String(this._manager.getValue())); + + this.add(this._textfield); + + + // ************************************************************************ + // BUTTON LAYOUT + // ************************************************************************ + this._buttonlayout = new qx.ui.layout.VerticalBoxLayout; + this._buttonlayout.setWidth("auto"); + this.add(this._buttonlayout); + + + // ************************************************************************ + // UP-BUTTON + // ************************************************************************ + this._upbutton = new qx.ui.basic.Image("widget/arrows/up_small.gif"); + this._upbutton.setAppearance("spinner-button-up"); + this._buttonlayout.add(this._upbutton); + + + // ************************************************************************ + // DOWN-BUTTON + // ************************************************************************ + this._downbutton = new qx.ui.basic.Image("widget/arrows/down_small.gif"); + this._downbutton.setAppearance("spinner-button-down"); + this._buttonlayout.add(this._downbutton); + + + // ************************************************************************ + // TIMER + // ************************************************************************ + this._timer = new qx.client.Timer(this.getInterval()); + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + this.addEventListener("keypress", this._onkeypress, this); + this.addEventListener("keydown", this._onkeydown, this); + this.addEventListener("keyup", this._onkeyup, this); + this.addEventListener("mousewheel", this._onmousewheel, this); + + this._textfield.addEventListener("input", this._oninput, this); + this._textfield.addEventListener("blur", this._onblur, this); + this._upbutton.addEventListener("mousedown", this._onmousedown, this); + this._downbutton.addEventListener("mousedown", this._onmousedown, this); + this._manager.addEventListener("change", this._onchange, this); + this._timer.addEventListener("interval", this._oninterval, this); + + + // ************************************************************************ + // INITIALIZATION + // ************************************************************************ + + if(vMin != null) { + this.setMin(vMin); + } + + if(vMax != null) { + this.setMax(vMax); + } + + if(vValue != null) { + this.setValue(vValue); + } +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "spinner" }); + +/*! + The amount to increment on each event (keypress or mousedown). +*/ +qx.OO.addProperty({ name : "incrementAmount", type : "number", defaultValue : 1 }); + +/*! + The amount to increment on each event (keypress or mousedown). +*/ +qx.OO.addProperty({ name : "wheelIncrementAmount", type : "number", defaultValue : 1 }); + +/*! + The amount to increment on each pageup / pagedown keypress +*/ +qx.OO.addProperty({ name : "pageIncrementAmount", type : "number", defaultValue : 10 }); + +/*! + The current value of the interval (this should be used internally only). +*/ +qx.OO.addProperty({ name : "interval", type : "number", defaultValue : 100 }); + +/*! + The first interval on event based shrink/growth of the value. +*/ +qx.OO.addProperty({ name : "firstInterval", type : "number", defaultValue : 500 }); + +/*! + This configures the minimum value for the timer interval. +*/ +qx.OO.addProperty({ name : "minTimer", type : "number", defaultValue : 20 }); + +/*! + Decrease of the timer on each interval (for the next interval) until minTimer reached. +*/ +qx.OO.addProperty({ name : "timerDecrease", type : "number", defaultValue : 2 }); + +/*! + If minTimer was reached, how much the amount of each interval should growth (in relation to the previous interval). +*/ +qx.OO.addProperty({ name : "amountGrowth", type : "number", defaultValue : 1.01 }); + + +qx.Proto._modifyIncrementAmount = function(propValue, propOldValue, propData) +{ + this._computedIncrementAmount = propValue; + return true; +}; + + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computePreferredInnerWidth = function() { + return 50; +} + +qx.Proto._computePreferredInnerHeight = function() { + return 14; +} + + + + + +/* +--------------------------------------------------------------------------- + KEY EVENT-HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeypress = function(e) +{ + var vIdentifier = e.getKeyIdentifier(); + + if (vIdentifier == "Enter" && !e.isAltPressed()) + { + this._checkValue(true, false, false); + this._textfield.selectAll(); + } + else + { + switch (vIdentifier) + { + case "Up": + case "Down": + + case "Left": + case "Right": + + case "Shift": + case "Control": + case "Alt": + + case "Escape": + case "Delete": + case "Backspace": + + case "Insert": + + case "Home": + case "End": + + case "PageUp": + case "PageDown": + + case "NumLock": + case "Tab": + break; + + default: + if (vIdentifier >= "0" && vIdentifier <= "9") { + return; + } + + e.preventDefault(); + } + } +} + +qx.Proto._onkeydown = function(e) +{ + var vIdentifier = e.getKeyIdentifier(); + + if (this._intervalIncrease == null) + { + switch(vIdentifier) + { + case "Up": + case "Down": + this._intervalIncrease = vIdentifier == "Up"; + this._intervalMode = "single"; + + this._resetIncrements(); + this._checkValue(true, false, false); + + this._increment(); + this._timer.startWith(this.getFirstInterval()); + + break; + + case "PageUp": + case "PageDown": + this._intervalIncrease = vIdentifier == "PageUp"; + this._intervalMode = "page"; + + this._resetIncrements(); + this._checkValue(true, false, false); + + this._pageIncrement(); + this._timer.startWith(this.getFirstInterval()); + + break; + } + } +} + +qx.Proto._onkeyup = function(e) +{ + if (this._intervalIncrease != null) + { + switch(e.getKeyIdentifier()) + { + case "Up": + case "Down": + case "PageUp": + case "PageDown": + this._timer.stop(); + + this._intervalIncrease = null; + this._intervalMode = null; + } + } +} + + + + + +/* +--------------------------------------------------------------------------- + MOUSE EVENT-HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + if (!e.isLeftButtonPressed()) { + return; + } + + this._checkValue(true); + + var vButton = e.getCurrentTarget(); + + vButton.addState("pressed"); + + vButton.addEventListener("mouseup", this._onmouseup, this); + vButton.addEventListener("mouseout", this._onmouseup, this); + + this._intervalIncrease = vButton == this._upbutton; + this._resetIncrements(); + this._increment(); + + this._textfield.selectAll(); + + this._timer.setInterval(this.getFirstInterval()); + this._timer.start(); +} + +qx.Proto._onmouseup = function(e) +{ + var vButton = e.getCurrentTarget(); + + vButton.removeState("pressed"); + + vButton.removeEventListener("mouseup", this._onmouseup, this); + vButton.removeEventListener("mouseout", this._onmouseup, this); + + this._textfield.selectAll(); + this._textfield.setFocused(true); + + this._timer.stop(); + this._intervalIncrease = null; +} + +qx.Proto._onmousewheel = function(e) +{ + this._manager.setValue(this._manager.getValue() + this.getWheelIncrementAmount() * e.getWheelDelta()); + this._textfield.selectAll(); +} + + + + +/* +--------------------------------------------------------------------------- + OTHER EVENT-HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._oninput = function(e) { + this._checkValue(true, true); +} + +qx.Proto._onchange = function(e) +{ + var vValue = this._manager.getValue(); + + this._textfield.setValue(String(vValue)); + + if (vValue == this.getMin()) + { + this._downbutton.removeState("pressed"); + this._downbutton.setEnabled(false); + this._timer.stop(); + } + else + { + this._downbutton.setEnabled(true); + } + + if (vValue == this.getMax()) + { + this._upbutton.removeState("pressed"); + this._upbutton.setEnabled(false); + this._timer.stop(); + } + else + { + this._upbutton.setEnabled(true); + } + + if (this.hasEventListeners("change")) { + this.dispatchEvent(new qx.event.type.Event("change"), true); + } +} + +qx.Proto._onblur = function(e) { + this._checkValue(false); +} + + + + + + +/* +--------------------------------------------------------------------------- + MAPPING TO RANGE MANAGER +--------------------------------------------------------------------------- +*/ + +qx.Proto.setValue = function(nValue) { + this._manager.setValue(nValue); +} + +qx.Proto.getValue = function() { + this._checkValue(true); + return this._manager.getValue(); +} + +qx.Proto.resetValue = function() { + return this._manager.resetValue(); +} + +qx.Proto.setMax = function(vMax) { + return this._manager.setMax(vMax); +} + +qx.Proto.getMax = function() { + return this._manager.getMax(); +} + +qx.Proto.setMin = function(vMin) { + return this._manager.setMin(vMin); +} + +qx.Proto.getMin = function() { + return this._manager.getMin(); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + INTERVAL HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._intervalIncrease = null; + +qx.Proto._oninterval = function(e) +{ + this._timer.stop(); + this.setInterval(Math.max(this.getMinTimer(), this.getInterval()-this.getTimerDecrease())); + + if (this._intervalMode == "page") + { + this._pageIncrement(); + } + else + { + if (this.getInterval() == this.getMinTimer()) { + this._computedIncrementAmount = this.getAmountGrowth() * this._computedIncrementAmount; + } + + this._increment(); + } + + switch(this._intervalIncrease) + { + case true: + if (this.getValue() == this.getMax()) { + return; + } + + case false: + if (this.getValue() == this.getMin()) { + return; + } + } + + this._timer.restartWith(this.getInterval()); +} + + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto._checkValue = function(acceptEmpty, acceptEdit) +{ + var el = this._textfield.getElement(); + + if (!el) { + return; + } + + if (el.value == "") + { + if (!acceptEmpty) + { + el.value = this.resetValue(); + this._textfield.selectAll(); + + return; + } + } + else + { + // cache working variable + var val = el.value; + + // fix leading '0' + if (val.length > 1) + { + while(val.charAt(0) == "0") { + val = val.substr(1, val.length); + } + + var f1 = parseInt(val) || 0; + + if (f1 != el.value) { + el.value = f1; + return; + } + } + + // fix for negative integer handling + if (val == "-" && acceptEmpty && this.getMin() < 0) + { + if (el.value != val) { + el.value = val; + } + + return; + } + + // parse the string + val = parseInt(val); + + // main check routine + var doFix = true; + var fixedVal = this._manager._checkValue(val); + + if (isNaN(fixedVal)) { + fixedVal = this._manager.getValue(); + } + + // handle empty string + if (acceptEmpty && val == "") + { + doFix = false; + } + else if (!isNaN(val)) + { + // check for editmode in keypress events + if (acceptEdit) + { + // fix min/max values + if (val > fixedVal && !(val > 0 && fixedVal <= 0) && String(val).length < String(fixedVal).length) + { + doFix = false; + } + else if (val < fixedVal && !(val < 0 && fixedVal >= 0) && String(val).length < String(fixedVal).length) + { + doFix = false; + } + } + } + + // apply value fix + if (doFix && el.value != fixedVal) { + el.value = fixedVal; + } + + // inform manager + if (!acceptEdit) { + this._manager.setValue(fixedVal); + } + } +} + +qx.Proto._increment = function() { + this._manager.setValue(this._manager.getValue() + ((this._intervalIncrease ? 1 : - 1) * this._computedIncrementAmount)); +} + +qx.Proto._pageIncrement = function() { + this._manager.setValue(this._manager.getValue() + ((this._intervalIncrease ? 1 : - 1) * this.getPageIncrementAmount())); +} + +qx.Proto._resetIncrements = function() +{ + this._computedIncrementAmount = this.getIncrementAmount(); + this.resetInterval(); +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("keypress", this._onkeypress, this); + this.removeEventListener("keydown", this._onkeydown, this); + this.removeEventListener("keyup", this._onkeyup, this); + this.removeEventListener("mousewheel", this._onmousewheel, this); + + if (this._textfield) + { + this._textfield.removeEventListener("blur", this._onblur, this); + this._textfield.removeEventListener("input", this._oninput, this); + this._textfield.dispose(); + this._textfield = null; + } + + if (this._buttonlayout) + { + this._buttonlayout.dispose(); + this._buttonlayout = null; + } + + if (this._upbutton) + { + this._upbutton.removeEventListener("mousedown", this._onmousedown, this); + this._upbutton.dispose(); + this._upbutton = null; + } + + if (this._downbutton) + { + this._downbutton.removeEventListener("mousedown", this._onmousedown, this); + this._downbutton.dispose(); + this._downbutton = null; + } + + if (this._timer) + { + this._timer.removeEventListener("interval", this._oninterval, this); + this._timer.stop(); + this._timer.dispose(); + this._timer = null; + } + + if (this._manager) + { + this._manager.removeEventListener("change", this._onchange, this); + this._manager.dispose(); + this._manager = null; + } + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +}
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/TextArea.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/TextArea.js new file mode 100644 index 0000000000..e3ceae4aa6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/TextArea.js @@ -0,0 +1,58 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +/** + * @param vValue {String} this string is ddisplayed as the value of the TextArea. + */ +qx.OO.defineClass("qx.ui.form.TextArea", qx.ui.form.TextField, +function(vValue) +{ + qx.ui.form.TextField.call(this, vValue); + + this.setTagName("textarea"); + this.removeHtmlProperty("type"); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "text-area" }); + +qx.OO.addProperty({ name : "wrap", type : "boolean" }); + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._modifyWrap = function(propValue, propOldValue, propData) { + return this.setStyleProperty("whiteSpace", propValue ? "normal" : "nowrap"); + } +} +else +{ + qx.Proto._modifyWrap = function(propValue, propOldValue, propData) { + return this.setHtmlProperty("wrap", propValue ? "soft" : "off"); + } +} + +qx.Proto._computePreferredInnerHeight = function() { + return 60; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/TextField.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/TextField.js new file mode 100644 index 0000000000..b11eeb1870 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/TextField.js @@ -0,0 +1,540 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) +#require(qx.renderer.font.FontCache) +#after(qx.renderer.font.FontObject) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.form.TextField", qx.ui.basic.Terminator, +function(vValue) +{ + // ************************************************************************ + // INIT + // ************************************************************************ + qx.ui.basic.Terminator.call(this); + + if (typeof vValue === "string") { + this.setValue(vValue); + } + + + // ************************************************************************ + // BEHAVIOR + // ************************************************************************ + this.setTagName("input"); + this.setHtmlProperty("type", "text"); + this.setHtmlAttribute("autocomplete", "OFF"); + this.setTabIndex(1); + this.setSelectable(true); + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + this.enableInlineEvent("input"); + + this.addEventListener("blur", this._onblur); + this.addEventListener("focus", this._onfocus); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "text-field" }); + +qx.OO.addProperty({ name : "value", type : "string", defaultValue : "" }); +qx.OO.addProperty({ name : "maxLength", type : "number" }); +qx.OO.addProperty({ name : "readOnly", type : "boolean" }); + +qx.OO.addProperty({ name : "selectionStart", type : "number" }); +qx.OO.addProperty({ name : "selectionLength", type : "number" }); +qx.OO.addProperty({ name : "selectionText", type : "string" }); + +qx.OO.addProperty({ name : "validator", type : "function" }); + +/*! + The font property describes how to paint the font on the widget. +*/ +qx.OO.addProperty({ name : "font", type : "object", instance : "qx.renderer.font.Font", convert : qx.renderer.font.FontCache, allowMultipleArguments : true }); + + + + +/* +--------------------------------------------------------------------------- + CLONING +--------------------------------------------------------------------------- +*/ + +// Extend ignore list with selection properties +qx.Proto._clonePropertyIgnoreList += ",selectionStart,selectionLength,selectionText"; + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + propValue ? this.removeHtmlAttribute("disabled") : this.setHtmlAttribute("disabled", "disabled"); + return qx.ui.basic.Terminator.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); +} + +qx.Proto._modifyValue = function(propValue, propOldValue, propData) +{ + this._inValueProperty = true; + this.setHtmlProperty(propData.name, propValue == null ? "" : propValue); + delete this._inValueProperty; + + return true; +} + +qx.Proto._modifyMaxLength = function(propValue, propOldValue, propData) { + return propValue ? this.setHtmlProperty(propData.name, propValue) : this.removeHtmlProperty(propData.name); +} + +qx.Proto._modifyReadOnly = function(propValue, propOldValue, propData) { + return propValue ? this.setHtmlProperty(propData.name, propData.name) : this.removeHtmlProperty(propData.name); +} + +qx.Proto._modifyFont = function(propValue, propOldValue, propData) +{ + this._invalidatePreferredInnerDimensions(); + + if (propValue) { + propValue._applyWidget(this); + } else if (propOldValue) { + propOldValue._resetWidget(this); + } + + return true; +} + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getComputedValue = function(e) +{ + this._visualPropertyCheck(); + return this.getElement().value; +} + + + + + +/* +--------------------------------------------------------------------------- + VALIDATION +--------------------------------------------------------------------------- +*/ + +qx.ui.form.TextField.createRegExpValidator = function(vRegExp) +{ + return function(s) { + return vRegExp.test(s); + } +} + +qx.Proto.isValid = function() +{ + var vValidator = this.getValidator(); + return !vValidator || vValidator(this.getValue()); +} + +qx.Proto.isComputedValid = function() +{ + var vValidator = this.getValidator(); + return !vValidator || vValidator(this.getComputedValue()); +} + + + + + + +/* +--------------------------------------------------------------------------- + PREFERRED DIMENSIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computePreferredInnerWidth = function() { + return 120; +} + +qx.Proto._computePreferredInnerHeight = function() { + return 15; +} + + + + + +/* +--------------------------------------------------------------------------- + BROWSER QUIRKS +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto._firstInputFixApplied = false; + + qx.Proto._afterAppear = function() + { + qx.ui.basic.Terminator.prototype._afterAppear.call(this); + + if (!this._firstInputFixApplied) { + qx.client.Timer.once(this._ieFirstInputFix, this, 1); + } + } + + /*! + Fix IE's input event for filled text fields + */ + qx.Proto._ieFirstInputFix = function() + { + this._inValueProperty = true; + this.getElement().value = this.getValue() === null ? "" : this.getValue(); + this._firstInputFixApplied = true; + delete this._inValueProperty; + } +} + + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT-HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._textOnFocus = null; + +qx.Proto._ontabfocus = function(e) { + this.selectAll(); +} + +qx.Proto._onfocus = function(e) { + this._textOnFocus = this.getComputedValue(); +} + +qx.Proto._onblur = function(e) +{ + var vValue = this.getComputedValue().toString(); + + if (this._textOnFocus != vValue) { + this.setValue(vValue); + } + + this.setSelectionLength(0); +} + + + + + + + +/* +--------------------------------------------------------------------------- + CROSS-BROWSER SELECTION HANDLING +--------------------------------------------------------------------------- +*/ + +if (qx.core.Client.getInstance().isMshtml()) +{ + /*! + Microsoft Documentation: + http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createrange.asp + http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/obj_textrange.asp + */ + + qx.Proto._getRange = function() + { + this._visualPropertyCheck(); + return this.getElement().createTextRange(); + } + + qx.Proto._getSelectionRange = function() + { + this._visualPropertyCheck(); + return this.getTopLevelWidget().getDocumentElement().selection.createRange(); + } + + qx.Proto.setSelectionStart = function(vStart) + { + this._visualPropertyCheck(); + + var vText = this.getElement().value; + + // a bit hacky, special handling for line-breaks + var i = 0; + while (i<vStart) + { + // find next line break + i = vText.indexOf("\r\n", i); + + if (i == -1) { + break; + } + + vStart--; + i++; + } + + var vRange = this._getRange(); + + vRange.collapse(); + vRange.move("character", vStart); + vRange.select(); + } + + qx.Proto.getSelectionStart = function() + { + this._visualPropertyCheck(); + + var vSelectionRange = this._getSelectionRange(); + + if (!this.getElement().contains(vSelectionRange.parentElement())) { + return -1; + } + + var vRange = this._getRange(); + + vRange.setEndPoint("EndToStart", vSelectionRange); + return vRange.text.length; + } + + qx.Proto.setSelectionLength = function(vLength) + { + this._visualPropertyCheck(); + + var vSelectionRange = this._getSelectionRange(); + + if (!this.getElement().contains(vSelectionRange.parentElement())) { + return; + } + + vSelectionRange.collapse(); + vSelectionRange.moveEnd("character", vLength); + vSelectionRange.select(); + } + + qx.Proto.getSelectionLength = function() + { + this._visualPropertyCheck(); + + var vSelectionRange = this._getSelectionRange(); + + if (!this.getElement().contains(vSelectionRange.parentElement())) { + return 0; + } + + return vSelectionRange.text.length; + } + + qx.Proto.setSelectionText = function(vText) + { + this._visualPropertyCheck(); + + var vStart = this.getSelectionStart(); + var vSelectionRange = this._getSelectionRange(); + + if (!this.getElement().contains(vSelectionRange.parentElement())) { + return; + } + + vSelectionRange.text = vText; + + // apply text to internal storage + this.setValue(this.getElement().value); + + // recover selection (to behave the same gecko does) + this.setSelectionStart(vStart); + this.setSelectionLength(vText.length); + + return true; + } + + qx.Proto.getSelectionText = function() + { + this._visualPropertyCheck(); + + var vSelectionRange = this._getSelectionRange(); + + if (!this.getElement().contains(vSelectionRange.parentElement())) { + return ""; + } + + return vSelectionRange.text; + } + + qx.Proto.selectAll = function() + { + this._visualPropertyCheck(); + + if (this.getValue() != null) + { + this.setSelectionStart(0); + this.setSelectionLength(this.getValue().length); + } + + // to be sure we get the element selected + this.getElement().select(); + } + + qx.Proto.selectFromTo = function(vStart, vEnd) + { + this._visualPropertyCheck(); + + this.setSelectionStart(vStart); + this.setSelectionLength(vEnd-vStart); + } +} +else +{ + qx.Proto.setSelectionStart = function(vStart) + { + this._visualPropertyCheck(); + this.getElement().selectionStart = vStart; + } + + qx.Proto.getSelectionStart = function() + { + this._visualPropertyCheck(); + return this.getElement().selectionStart; + } + + qx.Proto.setSelectionLength = function(vLength) + { + this._visualPropertyCheck(); + + var el = this.getElement(); + if (qx.util.Validation.isValidString(el.value)) { + el.selectionEnd = el.selectionStart + vLength; + } + } + + qx.Proto.getSelectionLength = function() + { + this._visualPropertyCheck(); + + var el = this.getElement(); + return el.selectionEnd - el.selectionStart; + } + + qx.Proto.setSelectionText = function(vText) + { + this._visualPropertyCheck(); + + var el = this.getElement(); + + var vOldText = el.value; + var vStart = el.selectionStart; + + var vOldTextBefore = vOldText.substr(0, vStart); + var vOldTextAfter = vOldText.substr(el.selectionEnd); + + var vValue = el.value = vOldTextBefore + vText + vOldTextAfter; + + // recover selection + el.selectionStart = vStart; + el.selectionEnd = vStart + vText.length; + + // apply new value to internal cache + this.setValue(vValue); + + return true; + } + + qx.Proto.getSelectionText = function() + { + this._visualPropertyCheck(); + + return this.getElement().value.substr(this.getSelectionStart(), this.getSelectionLength()); + } + + qx.Proto.selectAll = function() + { + this._visualPropertyCheck(); + + this.getElement().select(); + } + + qx.Proto.selectFromTo = function(vStart, vEnd) + { + this._visualPropertyCheck(); + + var el = this.getElement(); + el.selectionStart = vStart; + el.selectionEnd = vEnd; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("blur", this._onblur); + this.removeEventListener("focus", this._onfocus); + + qx.ui.basic.Terminator.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/CheckGroupBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/CheckGroupBox.js new file mode 100644 index 0000000000..eef301457c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/CheckGroupBox.js @@ -0,0 +1,41 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.groupbox.CheckGroupBox", qx.ui.groupbox.GroupBox, +function(vLegend) { + qx.ui.groupbox.GroupBox.call(this, vLegend); +}); + +qx.Proto._createLegendObject = function() +{ + this._legendObject = new qx.ui.form.CheckBox; + this._legendObject.setAppearance("check-box-field-set-legend"); + this._legendObject.setChecked(true); + + this.add(this._legendObject); +} + +qx.Proto.setIcon = qx.Proto.getIcon = null; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/GroupBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/GroupBox.js new file mode 100644 index 0000000000..93651d63a8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/GroupBox.js @@ -0,0 +1,158 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.groupbox.GroupBox", qx.ui.layout.CanvasLayout, +function(vLegend, vIcon) +{ + qx.ui.layout.CanvasLayout.call(this); + + + // ************************************************************************ + // SUB WIDGETS + // ************************************************************************ + this._createFrameObject(); + this._createLegendObject(); + + + // ************************************************************************ + // INIT + // ************************************************************************ + this.setLegend(vLegend); + + if (vIcon != null) { + this.setIcon(vIcon); + } + + + // ************************************************************************ + // REMAPPING + // ************************************************************************ + this.remapChildrenHandlingTo(this._frameObject); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "field-set" }); + + + + +/* +--------------------------------------------------------------------------- + SUB WIDGET CREATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._createLegendObject = function() +{ + this._legendObject = new qx.ui.basic.Atom; + this._legendObject.setAppearance("field-set-legend"); + + this.add(this._legendObject); +} + +qx.Proto._createFrameObject = function() +{ + this._frameObject = new qx.ui.layout.CanvasLayout; + this._frameObject.setAppearance("field-set-frame"); + + this.add(this._frameObject); +} + + + + + +/* +--------------------------------------------------------------------------- + GETTER FOR SUB WIDGETS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getFrameObject = function() { + return this._frameObject; +} + +qx.Proto.getLegendObject = function() { + return this._legendObject; +} + + + + + + +/* +--------------------------------------------------------------------------- + SETTER/GETTER +--------------------------------------------------------------------------- +*/ + +qx.Proto.setLegend = function(vLegend) { + this._legendObject.setLabel(vLegend); +} + +qx.Proto.getLegend = function() { + return this._legendObject.getLabel(); +} + +qx.Proto.setIcon = function(vIcon) { + this._legendObject.setIcon(vIcon); +} + +qx.Proto.getIcon = function() { + this._legendObject.getIcon(); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._legendObject) + { + this._legendObject.dispose(); + this._legendObject = null; + } + + if (this._frameObject) + { + this._frameObject.dispose(); + this._frameObject = null; + } + + return qx.ui.layout.CanvasLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/RadioGroupBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/RadioGroupBox.js new file mode 100644 index 0000000000..0761d78fc3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/groupbox/RadioGroupBox.js @@ -0,0 +1,41 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_form) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.groupbox.RadioGroupBox", qx.ui.groupbox.GroupBox, +function(vLegend) { + qx.ui.groupbox.GroupBox.call(this, vLegend); +}); + +qx.Proto._createLegendObject = function() +{ + this._legendObject = new qx.ui.form.RadioButton; + this._legendObject.setAppearance("radio-button-field-set-legend"); + this._legendObject.setChecked(true); + + this.add(this._legendObject); +} + +qx.Proto.setIcon = qx.Proto.getIcon = null; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/BoxLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/BoxLayout.js new file mode 100644 index 0000000000..728b6c5e24 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/BoxLayout.js @@ -0,0 +1,275 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.BoxLayout", qx.ui.core.Parent, +function(vOrientation) +{ + qx.ui.core.Parent.call(this); + + // apply orientation + if (vOrientation != null) { + this.setOrientation(vOrientation); + } +}); + +qx.ui.layout.BoxLayout.STR_REVERSED = "-reversed"; + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The orientation of the layout control. Allowed values are "horizontal" (default) and "vertical". +*/ +qx.OO.addProperty({ name : "orientation", type : "string", possibleValues : [ "horizontal", "vertical" ], addToQueueRuntime : true }); + +/*! + The spacing between childrens. Could be any positive integer value. +*/ +qx.OO.addProperty({ name : "spacing", type : "number", defaultValue : 0, addToQueueRuntime : true, impl : "layout" }); + +/*! + The horizontal align of the children. Allowed values are: "left", "center" and "right" +*/ +qx.OO.addProperty({ name : "horizontalChildrenAlign", type : "string", defaultValue : "left", possibleValues : [ "left", "center", "right" ], impl : "layoutOrder", addToQueueRuntime : true }); + +/*! + The vertical align of the children. Allowed values are: "top", "middle" and "bottom" +*/ +qx.OO.addProperty({ name : "verticalChildrenAlign", type : "string", defaultValue : "top", possibleValues : [ "top", "middle", "bottom" ], impl : "layoutOrder", addToQueueRuntime : true }); + +/*! + Should the children be layouted in reverse order? +*/ +qx.OO.addProperty({ name : "reverseChildrenOrder", type : "boolean", defaultValue : false, impl : "layoutOrder", addToQueueRuntime : true }); + +/*! + Should the widgets be stretched to the available width (orientation==vertical) or height (orientation==horizontal)? + This only applies if the child has not configured a own value for this axis. +*/ +qx.OO.addProperty({ name : "stretchChildrenOrthogonalAxis", type : "boolean", defaultValue : true, addToQueueRuntime : true }); + +/*! + If there are min/max values in combination with flex try to optimize placement. + This is more complex and produces more time for the layouter but sometimes this feature is needed. +*/ +qx.OO.addProperty({ name : "useAdvancedFlexAllocation", type : "boolean", defaultValue : false, addToQueueRuntime : true }); + + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return this.getOrientation() == "vertical" ? new qx.renderer.layout.VerticalBoxLayoutImpl(this) : new qx.renderer.layout.HorizontalBoxLayoutImpl(this); +} + + + + + + +/* +--------------------------------------------------------------------------- + HELPERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._layoutHorizontal = false; +qx.Proto._layoutVertical = false; +qx.Proto._layoutMode = "left"; + +qx.Proto.isHorizontal = function() { + return this._layoutHorizontal; +} + +qx.Proto.isVertical = function() { + return this._layoutVertical; +} + +qx.Proto.getLayoutMode = function() +{ + if (this._layoutMode == null) { + this._updateLayoutMode(); + } + + return this._layoutMode; +} + +qx.Proto._updateLayoutMode = function() +{ + this._layoutMode = this._layoutVertical ? this.getVerticalChildrenAlign() : this.getHorizontalChildrenAlign(); + + if (this.getReverseChildrenOrder()) { + this._layoutMode += qx.ui.layout.BoxLayout.STR_REVERSED; + } +} + +qx.Proto._invalidateLayoutMode = function() { + this._layoutMode = null; +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyOrientation = function(propValue, propOldValue, propData) +{ + // update fast access variables + this._layoutHorizontal = propValue == "horizontal"; + this._layoutVertical = propValue == "vertical"; + + // Layout Implementation + if (this._layoutImpl) + { + this._layoutImpl.dispose(); + this._layoutImpl = null; + } + + if (qx.util.Validation.isValidString(propValue)) { + this._layoutImpl = this._createLayoutImpl(); + } + + // call other core modifier + return this._modifyLayoutOrder(propValue, propOldValue, propData); +} + +qx.Proto._modifyLayoutOrder = function(propValue, propOldValue, propData) +{ + // update layout mode + this._invalidateLayoutMode(); + + // call other core modifier + return this._modifyLayout(propValue, propOldValue, propData); +} + +qx.Proto._modifyLayout = function(propValue, propOldValue, propData) +{ + // invalidate inner preferred dimensions + this._invalidatePreferredInnerDimensions(); + + // accumulated width needs to be invalidated + this._invalidateAccumulatedChildrenOuterWidth(); + this._invalidateAccumulatedChildrenOuterHeight(); + + // make property handling happy :) + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + ACCUMULATED CHILDREN WIDTH/HEIGHT +-------------------------------------------------------------------------------- + + Needed for center/middle and right/bottom alignment + +--------------------------------------------------------------------------- +*/ + +qx.OO.addCachedProperty({ name : "accumulatedChildrenOuterWidth", defaultValue : null }); +qx.OO.addCachedProperty({ name : "accumulatedChildrenOuterHeight", defaultValue : null }); + +qx.Proto._computeAccumulatedChildrenOuterWidth = function() +{ + var ch=this.getVisibleChildren(), chc, i=-1, sp=this.getSpacing(), s=-sp; + + while(chc=ch[++i]) { + s += chc.getOuterWidth() + sp; + } + + return s; +} + +qx.Proto._computeAccumulatedChildrenOuterHeight = function() +{ + var ch=this.getVisibleChildren(), chc, i=-1, sp=this.getSpacing(), s=-sp; + + while(chc=ch[++i]) { + s += chc.getOuterHeight() + sp; + } + + return s; +} + + + + + + + +/* +--------------------------------------------------------------------------- + STRETCHING SUPPORT +--------------------------------------------------------------------------- +*/ + +qx.Proto._recomputeChildrenStretchingX = function() +{ + var ch=this.getVisibleChildren(), chc, i=-1; + + while(chc=ch[++i]) + { + if (chc._recomputeStretchingX() && chc._recomputeBoxWidth()) { + chc._recomputeOuterWidth(); + } + } +} + +qx.Proto._recomputeChildrenStretchingY = function() +{ + var ch=this.getVisibleChildren(), chc, i=-1; + + while(chc=ch[++i]) + { + if (chc._recomputeStretchingY() && chc._recomputeBoxHeight()) { + chc._recomputeOuterHeight(); + } + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/CanvasLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/CanvasLayout.js new file mode 100644 index 0000000000..9b27f57247 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/CanvasLayout.js @@ -0,0 +1,47 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.CanvasLayout", qx.ui.core.Parent, +function() { + qx.ui.core.Parent.call(this); +}); + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return new qx.renderer.layout.CanvasLayoutImpl(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/DockLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/DockLayout.js new file mode 100644 index 0000000000..dc208a69f5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/DockLayout.js @@ -0,0 +1,118 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.DockLayout", qx.ui.core.Parent, +function() { + qx.ui.core.Parent.call(this); +}); + +/*! + The layout mode (in which order the children should be layouted) +*/ +qx.OO.addProperty({ name : "mode", type : "string", defaultValue : "vertical", possibleValues : [ "vertical", "horizontal", "ordered" ], addToQueueRuntime : true }); + +/* + Overwrite from qx.ui.core.Widget, we do not support 'auto' and 'flex' +*/ +qx.OO.changeProperty({ name : "width", addToQueue : true, unitDetection : "pixelPercent" }); +qx.OO.changeProperty({ name : "minWidth", defaultValue : -Infinity, addToQueue : true, unitDetection : "pixelPercent" }); +qx.OO.changeProperty({ name : "minWidth", defaultValue : -Infinity, addToQueue : true, unitDetection : "pixelPercent" }); +qx.OO.changeProperty({ name : "height", addToQueue : true, unitDetection : "pixelPercent" }); +qx.OO.changeProperty({ name : "minHeight", defaultValue : -Infinity, addToQueue : true, unitDetection : "pixelPercent" }); +qx.OO.changeProperty({ name : "minHeight", defaultValue : -Infinity, addToQueue : true, unitDetection : "pixelPercent" }); + + + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return new qx.renderer.layout.DockLayoutImpl(this); +} + + + + +/* +--------------------------------------------------------------------------- + ENHANCED CHILDREN FEATURES +--------------------------------------------------------------------------- +*/ + +/*! + Add multiple childrens and make them left aligned +*/ +qx.Proto.addLeft = function() { + this._addAlignedHorizontal("left", arguments); +} + +/*! + Add multiple childrens and make them right aligned +*/ +qx.Proto.addRight = function() { + this._addAlignedHorizontal("right", arguments); +} + +/*! + Add multiple childrens and make them top aligned +*/ +qx.Proto.addTop = function() { + this._addAlignedVertical("top", arguments); +} + +/*! + Add multiple childrens and make them bottom aligned +*/ +qx.Proto.addBottom = function() { + this._addAlignedVertical("bottom", arguments); +} + +qx.Proto._addAlignedVertical = function(vAlign, vArgs) +{ + for (var i=0, l=vArgs.length; i<l; i++) { + vArgs[i].setVerticalAlign(vAlign); + } + + this.add.apply(this, vArgs); +} + +qx.Proto._addAlignedHorizontal = function(vAlign, vArgs) +{ + for (var i=0, l=vArgs.length; i<l; i++) { + vArgs[i].setHorizontalAlign(vAlign); + } + + this.add.apply(this, vArgs); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/FlowLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/FlowLayout.js new file mode 100644 index 0000000000..8bf343a6fe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/FlowLayout.js @@ -0,0 +1,108 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.FlowLayout", qx.ui.core.Parent, +function() { + qx.ui.core.Parent.call(this); +}); + +/*! + The spacing between childrens. Could be any positive integer value. +*/ +qx.OO.addProperty({ name : "horizontalSpacing", type : "number", defaultValue : 0, addToQueueRuntime : true, impl : "layout" }); + +/*! + The spacing between childrens. Could be any positive integer value. +*/ +qx.OO.addProperty({ name : "verticalSpacing", type : "number", defaultValue : 0, addToQueueRuntime : true, impl : "layout" }); + +/*! + The horizontal align of the children. Allowed values are: "left" and "right" +*/ +qx.OO.addProperty({ name : "horizontalChildrenAlign", type : "string", defaultValue : "left", possibleValues : [ "left", "right" ], addToQueueRuntime : true }); + +/*! + The vertical align of the children. Allowed values are: "top" and "bottom" +*/ +qx.OO.addProperty({ name : "verticalChildrenAlign", type : "string", defaultValue : "top", possibleValues : [ "top", "bottom" ], addToQueueRuntime : true }); + +/*! + Should the children be layouted in reverse order? +*/ +qx.OO.addProperty({ name : "reverseChildrenOrder", type : "boolean", defaultValue : false, addToQueueRuntime : true, impl : "layout" }); + + + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return new qx.renderer.layout.FlowLayoutImpl(this); +} + + + + + +/* +--------------------------------------------------------------------------- + DIMENSION CACHE +--------------------------------------------------------------------------- +*/ + +qx.Proto._changeInnerWidth = function(vNew, vOld) +{ + qx.ui.core.Parent.prototype._changeInnerWidth.call(this, vNew, vOld); + + // allow 'auto' values for height to update when the inner width changes + this._invalidatePreferredInnerHeight(); +} + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyLayout = function(propValue, propOldValue, propData) +{ + // invalidate inner preferred dimensions + this._invalidatePreferredInnerDimensions(); + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/GridLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/GridLayout.js new file mode 100644 index 0000000000..e8e980a298 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/GridLayout.js @@ -0,0 +1,866 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.GridLayout", qx.ui.core.Parent, +function() +{ + qx.ui.core.Parent.call(this); + + this._columnData = []; + this._rowData = []; + + this._spans = []; +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The spacing between childrens. Could be any positive integer value. +*/ +qx.OO.addProperty({ name : "horizontalSpacing", type : "number", defaultValue : 0, addToQueueRuntime : true, impl : "layout" }); + +/*! + The spacing between childrens. Could be any positive integer value. +*/ +qx.OO.addProperty({ name : "verticalSpacing", type : "number", defaultValue : 0, addToQueueRuntime : true, impl : "layout" }); + +/*! + The horizontal align of the children. Allowed values are: "left", "center" and "right" +*/ +qx.OO.addProperty({ name : "horizontalChildrenAlign", type : "string", defaultValue : "left", possibleValues : [ "left", "center", "right" ], addToQueueRuntime : true }); + +/*! + The vertical align of the children. Allowed values are: "top", "middle" and "bottom" +*/ +qx.OO.addProperty({ name : "verticalChildrenAlign", type : "string", defaultValue : "top", possibleValues : [ "top", "middle", "bottom" ], addToQueueRuntime : true }); + +/*! + Cell padding top of all cells, if not locally defined +*/ +qx.OO.addProperty({ name : "cellPaddingTop", type : "number" }); + +/*! + Cell padding right of all cells, if not locally defined +*/ +qx.OO.addProperty({ name : "cellPaddingRight", type : "number" }); + +/*! + Cell padding bottom of all cells, if not locally defined +*/ +qx.OO.addProperty({ name : "cellPaddingBottom", type : "number" }); + +/*! + Cell padding left of all cells, if not locally defined +*/ +qx.OO.addProperty({ name : "cellPaddingLeft", type : "number" }); + + + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return new qx.renderer.layout.GridLayoutImpl(this); +} + + + + + + + +/* +--------------------------------------------------------------------------- + CORE FUNCTIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = function(vChild, vCol, vRow) +{ + vChild._col = vCol; + vChild._row = vRow; + + if (this.isFillCell(vCol, vRow)) { + throw new Error("Could not insert child " + vChild + " into a fill cell: " + vCol + "x" + vRow); + } + + qx.ui.core.Parent.prototype.add.call(this, vChild); +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyLayout = function(propValue, propOldValue, propData) +{ + // invalidate inner preferred dimensions + this._invalidatePreferredInnerDimensions(); + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + GRID SETUP +--------------------------------------------------------------------------- +*/ + +qx.Proto._syncDataFields = function(vData, vOldLength, vNewLength) +{ + if (vNewLength > vOldLength) + { + for (var i=vOldLength; i<vNewLength; i++) { + vData[i] = {}; + } + } + else if (vOldLength > vNewLength) + { + vData.splice(vNewLength, vOldLength - vNewLength); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + GRID SETUP: COLUMNS +--------------------------------------------------------------------------- +*/ + +qx.Proto._columnCount = 0; + +qx.Proto.setColumnCount = function(vCount) +{ + this._columnCount = vCount; + this._syncColumnDataFields(); +} + +qx.Proto.getColumnCount = function() { + return this._columnCount; +} + +qx.Proto.addColumn = function() +{ + this._columnCount++; + this._syncColumnDataFields(); +} + +qx.Proto.removeColumn = function() +{ + if (this._columnCount > 0) + { + this._columnCount--; + this._syncColumnDataFields(); + } +} + +qx.Proto._syncColumnDataFields = function() +{ + var vData = this._columnData; + var vOldLength = vData.length; + var vNewLength = this._columnCount; + + this._syncDataFields(vData, vOldLength, vNewLength); +} + + + + + +/* +--------------------------------------------------------------------------- + GRID SETUP: ROWS +--------------------------------------------------------------------------- +*/ + +qx.Proto._rowCount = 0; + +qx.Proto.setRowCount = function(vCount) +{ + this._rowCount = vCount; + this._syncRowDataFields(); +} + +qx.Proto.getRowCount = function() { + return this._rowCount; +} + +qx.Proto.addRow = function() +{ + this._rowCount++; + this._syncRowDataFields(); +} + +qx.Proto.removeRow = function() +{ + if (this._rowCount > 0) + { + this._rowCount--; + this._syncRowDataFields(); + } +} + +qx.Proto._syncRowDataFields = function() +{ + var vData = this._rowData; + var vOldLength = vData.length; + var vNewLength = this._rowCount; + + this._syncDataFields(vData, vOldLength, vNewLength); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DATA HANDLING: COLUMNS +--------------------------------------------------------------------------- +*/ + +qx.Proto._getColumnProperty = function(vColumnIndex, vProperty) +{ + try + { + return this._columnData[vColumnIndex][vProperty] || null; + } + catch(ex) + { + this.error("Error while getting column property (" + vColumnIndex + "|" + vProperty + ")", ex); + return null; + } +} + +qx.Proto._setupColumnProperty = function(vColumnIndex, vProperty, vValue) +{ + this._columnData[vColumnIndex][vProperty] = vValue; + this._invalidateColumnLayout(); +} + +qx.Proto._removeColumnProperty = function(vColumnIndex, vProperty, vValue) +{ + delete this._columnData[vColumnIndex][vProperty]; + this._invalidateColumnLayout(); +} + +qx.Proto._invalidateColumnLayout = function() +{ + if (!this._initialLayoutDone || !this._isDisplayable) { + return; + } + + this.forEachVisibleChild(function() { + this.addToQueue("width"); + }); +} + + + + + + +/* +--------------------------------------------------------------------------- + DATA HANDLING: ROWS +--------------------------------------------------------------------------- +*/ + +qx.Proto._getRowProperty = function(vRowIndex, vProperty) +{ + try + { + return this._rowData[vRowIndex][vProperty] || null; + } + catch(ex) + { + this.error("Error while getting row property (" + vRowIndex + "|" + vProperty + ")", ex); + return null; + } +} + +qx.Proto._setupRowProperty = function(vRowIndex, vProperty, vValue) +{ + this._rowData[vRowIndex][vProperty] = vValue; + this._invalidateRowLayout(); +} + +qx.Proto._removeRowProperty = function(vRowIndex, vProperty, vValue) +{ + delete this._rowData[vRowIndex][vProperty]; + this._invalidateRowLayout(); +} + +qx.Proto._invalidateRowLayout = function() +{ + if (!this._initialLayoutDone || !this._isDisplayable) { + return; + } + + this.forEachVisibleChild(function() { + this.addToQueue("height"); + }); +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES: CELL DIMENSIONS +--------------------------------------------------------------------------- +*/ + +// SETTER + +qx.Proto.setColumnWidth = function(vIndex, vValue) +{ + this._setupColumnProperty(vIndex, "widthValue", vValue); + + var vType = qx.ui.core.Parent.prototype._evalUnitsPixelPercentAutoFlex(vValue); + + this._setupColumnProperty(vIndex, "widthType", vType); + + var vParsed, vComputed; + + switch(vType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + vParsed = vComputed = Math.round(vValue); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + case qx.ui.core.Widget.TYPE_FLEX: + vParsed = parseFloat(vValue); + vComputed = null; + break; + + case qx.ui.core.Widget.TYPE_AUTO: + vParsed = vComputed = null; + break; + + default: + vParsed = vComputed = null; + } + + this._setupColumnProperty(vIndex, "widthParsed", vParsed); + this._setupColumnProperty(vIndex, "widthComputed", vComputed); +} + +qx.Proto.setRowHeight = function(vIndex, vValue) +{ + this._setupRowProperty(vIndex, "heightValue", vValue); + + var vType = qx.ui.core.Widget.prototype._evalUnitsPixelPercentAutoFlex(vValue); + this._setupRowProperty(vIndex, "heightType", vType); + + var vParsed, vComputed; + + switch(vType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + vParsed = vComputed = Math.round(vValue); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + case qx.ui.core.Widget.TYPE_FLEX: + vParsed = parseFloat(vValue); + vComputed = null; + break; + + case qx.ui.core.Widget.TYPE_AUTO: + vParsed = vComputed = null; + break; + + default: + vParsed = vComputed = null; + } + + this._setupRowProperty(vIndex, "heightParsed", vParsed); + this._setupRowProperty(vIndex, "heightComputed", vComputed); +} + + + +// GETTER: BOX + +qx.Proto.getColumnBoxWidth = function(vIndex) +{ + var vComputed = this._getColumnProperty(vIndex, "widthComputed"); + + if (vComputed != null) { + return vComputed; + } + + var vType = this._getColumnProperty(vIndex, "widthType"); + var vParsed = this._getColumnProperty(vIndex, "widthParsed"); + var vComputed = null; + + switch(vType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + vComputed = Math.max(0, vParsed); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + vComputed = this.getInnerWidth() * Math.max(0, vParsed) * 0.01; + break; + + case qx.ui.core.Widget.TYPE_AUTO: + // TODO + vComputed = null; + break; + + case qx.ui.core.Widget.TYPE_FLEX: + // TODO + vComputed = null; + break; + } + + this._setupColumnProperty(vIndex, "widthComputed", vComputed); + return vComputed; +} + +qx.Proto.getRowBoxHeight = function(vIndex) +{ + var vComputed = this._getRowProperty(vIndex, "heightComputed"); + + if (vComputed != null) { + return vComputed; + } + + var vType = this._getRowProperty(vIndex, "heightType"); + var vParsed = this._getRowProperty(vIndex, "heightParsed"); + var vComputed = null; + + switch(vType) + { + case qx.ui.core.Widget.TYPE_PIXEL: + vComputed = Math.max(0, vParsed); + break; + + case qx.ui.core.Widget.TYPE_PERCENT: + vComputed = this.getInnerHeight() * Math.max(0, vParsed) * 0.01; + break; + + case qx.ui.core.Widget.TYPE_AUTO: + // TODO + vComputed = null; + break; + + case qx.ui.core.Widget.TYPE_FLEX: + // TODO + vComputed = null; + break; + } + + this._setupRowProperty(vIndex, "heightComputed", vComputed); + return vComputed; +} + + +// GETTER: PADDING + +qx.Proto.getComputedCellPaddingLeft = function(vCol, vRow) { + return this.getColumnPaddingLeft(vCol) || this.getRowPaddingLeft(vRow) || this.getCellPaddingLeft() || 0; +} + +qx.Proto.getComputedCellPaddingRight = function(vCol, vRow) { + return this.getColumnPaddingRight(vCol) || this.getRowPaddingRight(vRow) || this.getCellPaddingRight() || 0; +} + +qx.Proto.getComputedCellPaddingTop = function(vCol, vRow) { + return this.getRowPaddingTop(vRow) || this.getColumnPaddingTop(vCol) || this.getCellPaddingTop() || 0; +} + +qx.Proto.getComputedCellPaddingBottom = function(vCol, vRow) { + return this.getRowPaddingBottom(vRow) || this.getColumnPaddingBottom(vCol) || this.getCellPaddingBottom() || 0; +} + + +// GETTER: INNER + +qx.Proto.getColumnInnerWidth = function(vCol, vRow) { + return this.getColumnBoxWidth(vCol) - this.getComputedCellPaddingLeft(vCol, vRow) - this.getComputedCellPaddingRight(vCol, vRow); +} + +qx.Proto.getRowInnerHeight = function(vCol, vRow) { + return this.getRowBoxHeight(vRow) - this.getComputedCellPaddingTop(vCol, vRow) - this.getComputedCellPaddingBottom(vCol, vRow); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES: CELL ALIGNMENT +--------------------------------------------------------------------------- +*/ + +// SETTER + +qx.Proto.setColumnHorizontalAlignment = function(vIndex, vValue) { + this._setupColumnProperty(vIndex, "horizontalAlignment", vValue); +} + +qx.Proto.setColumnVerticalAlignment = function(vIndex, vValue) { + this._setupColumnProperty(vIndex, "verticalAlignment", vValue); +} + +qx.Proto.setRowHorizontalAlignment = function(vIndex, vValue) { + this._setupRowProperty(vIndex, "horizontalAlignment", vValue); +} + +qx.Proto.setRowVerticalAlignment = function(vIndex, vValue) { + this._setupRowProperty(vIndex, "verticalAlignment", vValue); +} + + + +// GETTER + +qx.Proto.getColumnHorizontalAlignment = function(vIndex) { + return this._getColumnProperty(vIndex, "horizontalAlignment"); +} + +qx.Proto.getColumnVerticalAlignment = function(vIndex) { + return this._getColumnProperty(vIndex, "verticalAlignment"); +} + +qx.Proto.getRowHorizontalAlignment = function(vIndex) { + return this._getRowProperty(vIndex, "horizontalAlignment"); +} + +qx.Proto.getRowVerticalAlignment = function(vIndex) { + return this._getRowProperty(vIndex, "verticalAlignment"); +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES: CELL PADDING +--------------------------------------------------------------------------- +*/ + +// SETTER + +qx.Proto.setColumnPaddingTop = function(vIndex, vValue) { + this._setupColumnProperty(vIndex, "paddingTop", vValue); +} + +qx.Proto.setColumnPaddingRight = function(vIndex, vValue) { + this._setupColumnProperty(vIndex, "paddingRight", vValue); +} + +qx.Proto.setColumnPaddingBottom = function(vIndex, vValue) { + this._setupColumnProperty(vIndex, "paddingBottom", vValue); +} + +qx.Proto.setColumnPaddingLeft = function(vIndex, vValue) { + this._setupColumnProperty(vIndex, "paddingLeft", vValue); +} + +qx.Proto.setRowPaddingTop = function(vIndex, vValue) { + this._setupRowProperty(vIndex, "paddingTop", vValue); +} + +qx.Proto.setRowPaddingRight = function(vIndex, vValue) { + this._setupRowProperty(vIndex, "paddingRight", vValue); +} + +qx.Proto.setRowPaddingBottom = function(vIndex, vValue) { + this._setupRowProperty(vIndex, "paddingBottom", vValue); +} + +qx.Proto.setRowPaddingLeft = function(vIndex, vValue) { + this._setupRowProperty(vIndex, "paddingLeft", vValue); +} + + + +// GETTER + +qx.Proto.getColumnPaddingTop = function(vIndex) { + return this._getColumnProperty(vIndex, "paddingTop"); +} + +qx.Proto.getColumnPaddingRight = function(vIndex) { + return this._getColumnProperty(vIndex, "paddingRight"); +} + +qx.Proto.getColumnPaddingBottom = function(vIndex) { + return this._getColumnProperty(vIndex, "paddingBottom"); +} + +qx.Proto.getColumnPaddingLeft = function(vIndex) { + return this._getColumnProperty(vIndex, "paddingLeft"); +} + +qx.Proto.getRowPaddingTop = function(vIndex) { + return this._getRowProperty(vIndex, "paddingTop"); +} + +qx.Proto.getRowPaddingRight = function(vIndex) { + return this._getRowProperty(vIndex, "paddingRight"); +} + +qx.Proto.getRowPaddingBottom = function(vIndex) { + return this._getRowProperty(vIndex, "paddingBottom"); +} + +qx.Proto.getRowPaddingLeft = function(vIndex) { + return this._getRowProperty(vIndex, "paddingLeft"); +} + + + + + + +/* +--------------------------------------------------------------------------- + DIMENSION CACHE +--------------------------------------------------------------------------- +*/ + +qx.Proto._changeInnerWidth = function(vNew, vOld) +{ + for (var i=0, l=this.getColumnCount(); i<l; i++) { + if (this._getColumnProperty(i, "widthType") == qx.ui.core.Widget.TYPE_PERCENT) { + this._setupColumnProperty(i, "widthComputed", null); + } + } + + qx.ui.core.Parent.prototype._changeInnerWidth.call(this, vNew, vOld); +} + +qx.Proto._changeInnerHeight = function(vNew, vOld) +{ + for (var i=0, l=this.getRowCount(); i<l; i++) { + if (this._getRowProperty(i, "heightType") == qx.ui.core.Widget.TYPE_PERCENT) { + this._setupRowProperty(i, "heightComputed", null); + } + } + + qx.ui.core.Parent.prototype._changeInnerHeight.call(this, vNew, vOld); +} + + + + + + +/* +--------------------------------------------------------------------------- + DIMENSION CACHE +--------------------------------------------------------------------------- +*/ + +qx.Proto.getInnerWidthForChild = function(vChild) { + return this._getColumnProperty(vChild._col, "widthComputed"); +} + +qx.Proto.getInnerHeightForChild = function(vChild) { + return this._getRowProperty(vChild._row, "heightComputed"); +} + + + + + +/* +--------------------------------------------------------------------------- + SPAN CELLS +--------------------------------------------------------------------------- +*/ + +qx.Proto.mergeCells = function(vStartCol, vStartRow, vColLength, vRowLength) +{ + var vSpans = this._spans; + var vLength = vSpans.length; + + // Find end cols/rows + var vEndCol = vStartCol + vColLength - 1; + var vEndRow = vStartRow + vRowLength - 1; + + if (this._collidesWithSpans(vStartCol, vStartRow, vEndCol, vEndRow)) + { + this.debug("Span collision detected!"); + + // Send out warning + return false; + } + + // Finally store new span entry + vSpans.push({ startCol : vStartCol, startRow : vStartRow, endCol : vEndCol, endRow : vEndRow, colLength : vColLength, rowLength : vRowLength }); + + // Send out ok + return true; +} + +qx.Proto.hasSpans = function() { + return this._spans.length > 0; +} + +qx.Proto.getSpanEntry = function(vCol, vRow) +{ + for (var i=0, s=this._spans, l=s.length, c; i<l; i++) + { + c = s[i]; + + if (vCol >= c.startCol && vCol <= c.endCol && vRow >= c.startRow && vRow <= c.endRow) { + return c; + } + } + + return null; +} + +qx.Proto.isSpanStart = function(vCol, vRow) +{ + for (var i=0, s=this._spans, l=s.length, c; i<l; i++) + { + c = s[i]; + + if (c.startCol == vCol && c.startRow == vRow) { + return true; + } + } + + return false; +} + +qx.Proto.isSpanCell = function(vCol, vRow) +{ + for (var i=0, s=this._spans, l=s.length, c; i<l; i++) + { + c = s[i]; + + if (vCol >= c.startCol && vCol <= c.endCol && vRow >= c.startRow && vRow <= c.endRow) { + return true; + } + } + + return false; +} + +qx.Proto.isFillCell = function(vCol, vRow) +{ + for (var i=0, s=this._spans, l=s.length, c; i<l; i++) + { + c = s[i]; + + if (vCol >= c.startCol && vCol <= c.endCol && vRow >= c.startRow && vRow <= c.endRow && (vCol > c.startCol || vRow > c.startRow)) { + return true; + } + } + + return false; +} + +qx.Proto._collidesWithSpans = function(vStartCol, vStartRow, vEndCol, vEndRow) +{ + for (var i=0, s=this._spans, l=s.length, c; i<l; i++) + { + c = s[i]; + + if (vEndCol >= c.startCol && vStartCol <= c.endCol && vEndRow >= c.startRow && vStartRow <= c.endRow ) { + return true; + } + } + + return false; +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + + delete this._columnData; + delete this._rowData; + + delete this._spans; + + return qx.ui.core.Parent.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/HorizontalBoxLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/HorizontalBoxLayout.js new file mode 100644 index 0000000000..637d9eab29 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/HorizontalBoxLayout.js @@ -0,0 +1,31 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.HorizontalBoxLayout", qx.ui.layout.BoxLayout, +function() { + qx.ui.layout.BoxLayout.call(this, "horizontal"); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/VerticalBoxLayout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/VerticalBoxLayout.js new file mode 100644 index 0000000000..8135e9c65e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/layout/VerticalBoxLayout.js @@ -0,0 +1,31 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_basic) +#module(ui_layout) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.layout.VerticalBoxLayout", qx.ui.layout.BoxLayout, +function() { + qx.ui.layout.BoxLayout.call(this, "vertical"); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellHtml.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellHtml.js new file mode 100644 index 0000000000..53286a66ef --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellHtml.js @@ -0,0 +1,39 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ContentCellHtml", qx.ui.embed.HtmlEmbed, +function(vHtml) +{ + qx.ui.embed.HtmlEmbed.call(this, vHtml); + + this.setSelectable(false); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-content-cell-html" }); + +qx.ui.listview.ContentCellHtml.empty = { + html : "" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellIconHtml.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellIconHtml.js new file mode 100644 index 0000000000..7cf839cb0c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellIconHtml.js @@ -0,0 +1,41 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ContentCellIconHtml", qx.ui.embed.IconHtmlEmbed, +function(vHtml, vIcon, vIconWidth, vIconHeight) +{ + qx.ui.embed.IconHtmlEmbed.call(this, vHtml, vIcon, vIconWidth, vIconHeight); + + this.setSelectable(false); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-content-cell-icon-html" }); + +qx.ui.listview.ContentCellIconHtml.empty = +{ + icon : "", + html : "" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellImage.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellImage.js new file mode 100644 index 0000000000..de9672ca22 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellImage.js @@ -0,0 +1,60 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ContentCellImage", qx.ui.basic.Image, +function(vSource, vWidth, vHeight) { + qx.ui.basic.Image.call(this, vSource, vWidth, vHeight); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-content-cell-image" }); + +qx.ui.listview.ContentCellImage.empty = { + source : "static/image/blank.gif" +} + + + +/* +--------------------------------------------------------------------------- + CUSTOM SETTER +--------------------------------------------------------------------------- +*/ + +qx.Proto.setSource = function(vSource) +{ + if (this._initialLayoutDone) + { + return this._updateContent(qx.manager.object.AliasManager.getInstance().resolvePath(vSource == "" ? "static/image/blank.gif" : vSource)); + } + else + { + return qx.ui.basic.Image.prototype.setSource.call(this, vSource); + } +} + +// Omit dimension setup in list-view +qx.Proto._postApplyDimensions = qx.lang.Function.returnTrue; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellLink.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellLink.js new file mode 100644 index 0000000000..3931cb3a7f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellLink.js @@ -0,0 +1,42 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ContentCellLink", qx.ui.embed.LinkEmbed, +function(vHtml) +{ + qx.ui.embed.LinkEmbed.call(this, vHtml); + + // selectable = false will break links in gecko based browsers + this.setSelectable(true); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-content-cell-link" }); + +qx.ui.listview.ContentCellLink.empty = +{ + html : "", + uri : "#" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellText.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellText.js new file mode 100644 index 0000000000..d77abf72a3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ContentCellText.js @@ -0,0 +1,42 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ContentCellText", qx.ui.embed.TextEmbed, +function(vText) +{ + qx.ui.embed.TextEmbed.call(this, vText); + + this.setStyleProperty("whiteSpace", "nowrap"); + this.setStyleProperty("textOverflow", "ellipsis"); + + this.setSelectable(false); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-content-cell-text" }); + +qx.ui.listview.ContentCellText.empty = { + text : "" +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/Header.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/Header.js new file mode 100644 index 0000000000..73824e5448 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/Header.js @@ -0,0 +1,296 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.Header", qx.ui.layout.HorizontalBoxLayout, +function(vColumns) +{ + qx.ui.layout.HorizontalBoxLayout.call(this); + + // This fixes the innerWidth calculation difference between the grid(pane) and the head. + this.setPaddingRight(qx.ui.core.Widget.SCROLLBAR_SIZE); + + + // ************************************************************************ + // STORE REFERENCE TO CONFIG ENTRY + // ************************************************************************ + this._columns = vColumns; + + + // ************************************************************************ + // CREATE HEADER CELLS + // ************************************************************************ + var vHeadCell, vHeadSeparator; + + for (var vCol in vColumns) + { + vHeadCell = new qx.ui.listview.HeaderCell(vColumns[vCol], vCol); + vHeadSeparator = new qx.ui.listview.HeaderSeparator; + + this.add(vHeadCell, vHeadSeparator); + + if (vColumns[vCol].align) { + vHeadCell.setHorizontalChildrenAlign(vColumns[vCol].align); + + if (vColumns[vCol].align == "right") { + vHeadCell.setReverseChildrenOrder(true); + } + } + + // store some additional data + vColumns[vCol].contentClass = qx.OO.classes["qx.ui.listview.ContentCell" + qx.lang.String.toFirstUp(vColumns[vCol].type || "text")]; + vColumns[vCol].headerCell = vHeadCell; + } + + + // ************************************************************************ + // ADD EVENT LISTENERS + // ************************************************************************ + this.addEventListener("mousemove", this._onmousemove); + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("mouseout", this._onmouseout); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-header" }); + + + +/* +--------------------------------------------------------------------------- + RESIZE SYNC +--------------------------------------------------------------------------- +*/ + +qx.Proto._syncColumnWidth = function(vWidth) +{ + var vChildren = this.getChildren(); + var vColumn = Math.ceil(vChildren.indexOf(this._resizeCell) / 2); + + this.getParent().getPane().setColumnWidth(vColumn, vWidth); +} + +qx.Proto._syncResizeLine = function() +{ + qx.ui.core.Widget.flushGlobalQueues(); + + var vParent = this.getParent(); + var vLine = vParent.getResizeLine(); + var vLeft = qx.html.Location.getPageBoxLeft(this._resizeSeparator.getElement()) - qx.html.Location.getPageInnerLeft(this.getElement()); + var vTop = qx.html.Dimension.getBoxHeight(vParent.getHeader().getElement()); + var vHeight = qx.html.Dimension.getBoxHeight(vParent.getElement()) - vTop; + + vLine._applyRuntimeTop(vTop); + vLine._applyRuntimeHeight(vHeight); + vLine._applyRuntimeLeft(vLeft); + + vLine.removeStyleProperty("visibility"); +} + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._mshtml = qx.core.Client.getInstance().isMshtml(); + +qx.Proto._onmousemove = function(e) +{ + if (!this.getParent().getResizable()) { + return; + } + + if (this._resizingActive) + { + // Slow down mshtml a bit + if (this._mshtml) + { + if ((new Date).valueOf() - this._last < 50) { + return; + } + + this._last = (new Date).valueOf(); + } + + var vNewLeft = e.getPageX(); + var vSizeDiff = vNewLeft - this._resizeStart; + var vCell = this._resizeCell; + + vCell.setWidth(Math.max(4, vCell.getWidth() + vSizeDiff)); + this._resizeStart = vNewLeft; + + if (this.getParent().getLiveResize()) + { + this._syncColumnWidth(vCell._computeBoxWidth()); + } + else + { + this._syncResizeLine(); + } + } + else + { + var vTarget = e.getTarget(); + var vEventPos = e.getPageX(); + var vTargetPosLeft = qx.html.Location.getPageBoxLeft(vTarget.getElement()); + var vTargetPosRight = vTargetPosLeft + qx.html.Dimension.getBoxWidth(vTarget.getElement()); + + var vResizeCursor = false; + var vResizeSeparator = null; + + if (vTarget instanceof qx.ui.listview.HeaderSeparator) + { + vResizeCursor = true; + vResizeSeparator = vTarget; + } + else if ((vEventPos - vTargetPosLeft) <= 10) + { + // Ignore first column + if (!vTarget.isFirstChild()) + { + vResizeCursor = true; + vResizeSeparator = vTarget.getPreviousSibling(); + } + } + else if ((vTargetPosRight - vEventPos) <= 10) + { + vResizeCursor = true; + vResizeSeparator = vTarget.getNextSibling(); + } + + if (!(vResizeSeparator instanceof qx.ui.listview.HeaderSeparator)) + { + vResizeSeparator = vTarget = vResizeCursor = null; + } + + // Check if child is marked as resizable + else if (vResizeSeparator) + { + var vResizeCell = vResizeSeparator.getPreviousSibling(); + + if (vResizeCell && (vResizeCell._computedWidthTypePercent || vResizeCell._config.resizable == false)) { + vResizeSeparator = vTarget = vResizeCursor = null; + } + } + + // Apply global cursor + this.getTopLevelWidget().setGlobalCursor(vResizeCursor ? "e-resize" : null); + + // Store data for mousedown + this._resizeSeparator = vResizeSeparator; + this._resizeTarget = vTarget; + } +} + +qx.Proto._onmousedown = function(e) +{ + if (!this._resizeSeparator) { + return; + } + + this._resizingActive = true; + this._resizeStart = e.getPageX(); + this._resizeCell = this._resizeSeparator.getPreviousSibling(); + + if (!this.getParent().getLiveResize()) { + this._syncResizeLine(); + } + + this.setCapture(true); +} + +qx.Proto._onmouseup = function(e) +{ + if (!this._resizingActive) { + return; + } + + this._syncColumnWidth(this._resizeCell.getBoxWidth()); + + this.setCapture(false); + this.getTopLevelWidget().setGlobalCursor(null); + + // Remove hover effect + this._resizeTarget.removeState("over"); + + // Hide resize line + this.getParent().getResizeLine().setStyleProperty("visibility", "hidden"); + + this._cleanupResizing(); +} + +qx.Proto._onmouseout = function(e) +{ + if (!this.getCapture()) { + this.getTopLevelWidget().setGlobalCursor(null); + } +} + +qx.Proto._cleanupResizing = function() +{ + delete this._resizingActive; + + delete this._resizeSeparator; + delete this._resizeTarget; + delete this._resizeStart; + delete this._resizeCell; +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._cleanupResizing(); + + this.removeEventListener("mousemove", this._onmousemove); + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("mouseout", this._onmouseout); + + this._columns = null; + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/HeaderCell.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/HeaderCell.js new file mode 100644 index 0000000000..3d0e21cb42 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/HeaderCell.js @@ -0,0 +1,259 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) +#embed(qx.widgettheme/arrows/up.gif) +#embed(qx.widgettheme/arrows/down.gif) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.HeaderCell", qx.ui.basic.Atom, +function(vConfig, vId) +{ + qx.ui.basic.Atom.call(this, vConfig.label, vConfig.icon, vConfig.iconWidth, vConfig.iconHeight, vConfig.flash); + + // Text Overflow + this.setStyleProperty("textOverflow", "ellipsis"); + + + // ************************************************************************ + // STORE REFERENCE TO CONFIG ENTRY + // ************************************************************************ + this._config = vConfig; + this._id = vId; + + + // ************************************************************************ + // ARGUMENTS + // ************************************************************************ + this.setWidth(typeof vConfig.width === "undefined" ? "auto" : vConfig.width); + + if (vConfig.minWidth != null) { + this.setMinWidth(vConfig.minWidth); + } + + if (vConfig.maxWidth != null) { + this.setMaxWidth(vConfig.maxWidth); + } + + + // ************************************************************************ + // ADDITIONAL CHILDREN + // ************************************************************************ + + // Re-Enable flex support + this.getLayoutImpl().setEnableFlexSupport(true); + + this._spacer = new qx.ui.basic.HorizontalSpacer; + + this._arrowup = new qx.ui.basic.Image("widget/arrows/up.gif"); + this._arrowup.setVerticalAlign("middle"); + this._arrowup.setDisplay(false); + + this._arrowdown = new qx.ui.basic.Image("widget/arrows/down.gif"); + this._arrowdown.setVerticalAlign("middle"); + this._arrowdown.setDisplay(false); + + this.add(this._spacer, this._arrowup, this._arrowdown); + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mouseout", this._onmouseout); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-header-cell" }); +qx.OO.addProperty({ name : "sortOrder", type : "string", allowNull : true, possibleValues : [ "ascending", "descending" ] }); + +qx.Class.C_SORT_ASCENDING = "ascending"; +qx.Class.C_SORT_DESCENDING = "descending"; + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getView = function() { + return this.getParent().getParent(); +} + +qx.Proto.getNextSortOrder = function() +{ + var vCurrentSortOrder = this.getSortOrder(); + + switch(vCurrentSortOrder) + { + case qx.ui.listview.HeaderCell.C_SORT_ASCENDING: + return qx.ui.listview.HeaderCell.C_SORT_DESCENDING; + + default: + return qx.ui.listview.HeaderCell.C_SORT_ASCENDING; + } +} + +qx.Proto.updateSort = function() +{ + + var vListView = this.getView(); + var vData = vListView.getData(); + var vFieldId = this._id; + var vSortProp = this._config.sortProp || "text"; + var vSortMethod = this._config.sortMethod || qx.util.Compare.byString; + + vData.sort(function(a, b) { + return vSortMethod(a[vFieldId][vSortProp], b[vFieldId][vSortProp]); + }); + + if (this.getSortOrder() == qx.ui.listview.HeaderCell.C_SORT_DESCENDING) { + vData.reverse(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifySortOrder = function(propValue, propOldValue, propData) +{ + var vListView = this.getView(); + + switch(propValue) + { + case qx.ui.listview.HeaderCell.C_SORT_ASCENDING: + this._arrowup.setDisplay(true); + this._arrowdown.setDisplay(false); + + vListView.setSortBy(this._id); + break; + + case qx.ui.listview.HeaderCell.C_SORT_DESCENDING: + this._arrowup.setDisplay(false); + this._arrowdown.setDisplay(true); + + vListView.setSortBy(this._id); + break; + + default: + this._arrowup.setDisplay(false); + this._arrowdown.setDisplay(false); + + if (vListView.getSortBy() == this._id) { + vListView.setSortBy(null); + } + } + + if (propValue) + { + this.updateSort(); + vListView.update(); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseover = function(e) { + this.addState("over"); +} + +qx.Proto._onmouseout = function(e) { + this.removeState("over"); +} + +qx.Proto._onmouseup = function(e) +{ + if (!this._config.sortable || this.getParent()._resizeSeparator) { + return; + } + + this.setSortOrder(this.getNextSortOrder()); + e.stopPropagation(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + delete this._config; + + if (this._spacer) + { + this._spacer.dispose(); + this._spacer = null; + } + + if (this._arrowup) + { + this._arrowup.dispose(); + this._arrowup = null; + } + + if (this._arrowdown) + { + this._arrowdown.dispose(); + this._arrowdown = null; + } + + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mouseout", this._onmouseout); + + return qx.ui.basic.Atom.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/HeaderSeparator.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/HeaderSeparator.js new file mode 100644 index 0000000000..b2124fda0f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/HeaderSeparator.js @@ -0,0 +1,32 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.HeaderSeparator", qx.ui.basic.Terminator, +function() { + qx.ui.basic.Terminator.call(this); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view-header-separator" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ListView.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ListView.js new file mode 100644 index 0000000000..a4226b88e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ListView.js @@ -0,0 +1,375 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ListView", qx.ui.layout.VerticalBoxLayout, +function(vData, vColumns) +{ + // ************************************************************************ + // REFERENCES + // ************************************************************************ + + this._data = vData; + this._columns = vColumns; + + + + // ************************************************************************ + // OBJECTS + // ************************************************************************ + + this._header = new qx.ui.listview.Header(vColumns); + this._frame = new qx.ui.layout.HorizontalBoxLayout; + this._pane = new qx.ui.listview.ListViewPane(vData, vColumns); + this._scroll = new qx.ui.layout.CanvasLayout; + this._scrollContent = new qx.ui.basic.Terminator; + this._resizeLine = new qx.ui.basic.Terminator; + + + + // ************************************************************************ + // SUPERCLASS CONSTRUCTOR + // ************************************************************************ + + qx.ui.layout.VerticalBoxLayout.call(this); + + + + // ************************************************************************ + // HEADER + // ************************************************************************ + + this._header.setParent(this); + + + + // ************************************************************************ + // FRAME + // ************************************************************************ + + this._frame.setParent(this); + this._frame.setHeight("1*"); + this._frame.setWidth(null); + + + + // ************************************************************************ + // PANE + // ************************************************************************ + + this._pane.setParent(this._frame); + + + + // ************************************************************************ + // SCROLL AREA + // ************************************************************************ + + this._scroll.setWidth("auto"); + this._scroll.setOverflow("scrollY"); + this._scroll.setParent(this._frame); + this._scroll.enableInlineEvent("scroll"); + this._scroll.addEventListener("scroll", this._onscroll, this); + + + + // ************************************************************************ + // SCROLL CONTENT + // ************************************************************************ + + this._scrollContent.setWidth(1); + this._scrollContent.setParent(this._scroll); + + + + + // ************************************************************************ + // RESIZE LINE + // ************************************************************************ + + this._resizeLine.setBackgroundColor("#D6D5D9"); + this._resizeLine.setWidth(1); + this._resizeLine.setParent(this); + + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + + this.addEventListener("mousedown", this._onmousedown); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "list-view" }); + +qx.OO.addProperty({ name : "resizable", type : "boolean", defaultValue : true }); +qx.OO.addProperty({ name : "liveResize", type : "boolean", defaultValue : false }); +qx.OO.addProperty({ name : "sortBy", type : "string" }); + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getData = function() { + return this._data; +} + +qx.Proto.getColumns = function() { + return this._columns; +} + +qx.Proto.getHeader = function() { + return this._header; +} + +qx.Proto.getFrame = function() { + return this._frame; +} + +qx.Proto.getPane = function() { + return this._pane; +} + +qx.Proto.getScroll = function() { + return this._scroll; +} + +qx.Proto.getScrollContent = function() { + return this._scrollContent; +} + +qx.Proto.getResizeLine = function() { + return this._resizeLine; +} + +qx.Proto.update = function() +{ + this.updateScrollBar(); + this.updateContent(); + + // ignore updateLayout here, as it is mostly initially used +} + +qx.Proto.updateScrollBar = function() { + this._scrollContent.setHeight((this._data.length * this._pane._rowHeight) + this._pane._rowHeight); +} + +/*! + Bugfix for gecko 1.8 (the one released with firefox 1.5) + Overflow updates if content gets smaller are problematic + https://bugzilla.mozilla.org/show_bug.cgi?id=320106 +*/ +if (qx.core.Client.getInstance().isGecko() && qx.core.Client.getInstance().getVersion() >= 1.8) +{ + qx.Proto._updateScrollBar = qx.Proto.updateScrollBar; + + qx.Proto.updateScrollBar = function() + { + this._updateScrollBar(); + + this._scroll.setStyleProperty("height", "0px"); + this._scroll.forceHeight(0); + this._scroll.setHeight(null); + } +} + +qx.Proto.updateContent = function() { + this.getPane()._updateRendering(true); +} + +qx.Proto.updateLayout = function() { + this.getPane()._updateLayout(); +} + +qx.Proto.updateSort = function() +{ + var vSortBy = this.getSortBy(); + + if (!vSortBy) { + return; + } + + var vCell = this._getHeaderCell(vSortBy); + + if (vCell) { + vCell.updateSort(); + } +} + +qx.Proto._getHeaderCell = function(vCellId) +{ + var vNewEntry = this._columns[vCellId]; + return vNewEntry ? vNewEntry.headerCell : null; +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifySortBy = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + var vOldCell = this._getHeaderCell(propOldValue); + + if (vOldCell) { + vOldCell.setSortOrder(null); + } + } + + if (propValue) + { + var vNewCell = this._getHeaderCell(propValue); + + if (vNewCell && vNewCell.getSortOrder() == null) { + vNewCell.setSortOrder(qx.ui.listview.HeaderCell.C_SORT_ASCENDING); + } + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onscroll = function(e) { + this._pane._onscroll(e); +} + +qx.Proto._onmousedown = function(e) { + this.getFocusRoot().setActiveChild(this.getPane()); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPLAYBLE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._handleDisplayableCustom = function(vDisplayable, vParent, vHint) +{ + qx.ui.layout.VerticalBoxLayout.prototype._handleDisplayableCustom.call(this, vDisplayable, vParent, vHint); + + if (vDisplayable) + { + this.updateLayout(); + this.updateScrollBar(); + this.updateContent(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._header) + { + this._header.dispose(); + this._header = null; + } + + if (this._frame) + { + this._frame.dispose(); + this._frame = null; + } + + if (this._pane) + { + this._pane.dispose(); + this._pane = null; + } + + if (this._scroll) + { + this._scroll.dispose(); + this._scroll = null; + } + + if (this._scrollContent) + { + this._scrollContent.dispose(); + this._scrollContent = null; + } + + if (this._resizeLine) + { + this._resizeLine.dispose(); + this._resizeLine = null; + } + + delete this._columns; + delete this._data; + + this.removeEventListener("mousedown", this._onmousedown); + + return qx.ui.layout.VerticalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ListViewPane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ListViewPane.js new file mode 100644 index 0000000000..afd5077c3e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/listview/ListViewPane.js @@ -0,0 +1,563 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_listview) +#load(qx.ui.listview.ContentCellHtml) +#load(qx.ui.listview.ContentCellIconHtml) +#load(qx.ui.listview.ContentCellImage) +#load(qx.ui.listview.ContentCellLink) +#load(qx.ui.listview.ContentCellText) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.listview.ListViewPane", qx.ui.layout.GridLayout, +function(vData, vColumns) +{ + qx.ui.layout.GridLayout.call(this); + + // ************************************************************************ + // DATA + // ************************************************************************ + // Add aliases for data tables + this._data = vData; + this._columns = vColumns; + + + // ************************************************************************ + // INITIALIZE MANAGER + // ************************************************************************ + this._manager = new qx.manager.selection.VirtualSelectionManager(this); + + + // ************************************************************************ + // MOUSE EVENT LISTENER + // ************************************************************************ + // Add handling for mouse wheel events + // Needed because the virtual scroll area does not fire browser + // understandable events above this pane. + this.addEventListener("mousewheel", this._onmousewheel); + + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("click", this._onclick); + this.addEventListener("dblclick", this._ondblclick); + + + // ************************************************************************ + // KEY EVENT LISTENER + // ************************************************************************ + this.addEventListener("keypress", this._onkeypress); +}); + +qx.OO.changeProperty({ name : "appearance", + type : "string", + defaultValue : "list-view-pane" + }); + +qx.Proto._rowHeight = 16; + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getView = function() { + return this.getParent().getParent(); +} + + + + + + +/* +--------------------------------------------------------------------------- + UPDATER +--------------------------------------------------------------------------- +*/ + +qx.Proto._lastRowCount = 0; + +qx.Proto._updateLayout = function(vUpdate) +{ + // this.debug("InnerHeight: " + this._computeInnerHeight()); + // this.debug("BoxHeight: " + this._computeBoxHeight()); + // return + + var vColumns = this._columns; + var vRowCount = Math.ceil(this.getInnerHeight() / this._rowHeight); + var vData = this._data; + var vCell; + + // this.debug("Row-Count: " + this._lastRowCount + " => " + vRowCount); + + // Sync cells: Add new ones and configure them + if (vRowCount > this._lastRowCount) + { + for (var i=this._lastRowCount, j=0; i<vRowCount; i++, j=0) + { + for (var vCol in vColumns) + { + vCell = new vColumns[vCol].contentClass; + + this.add(vCell, j++, i); + + if (vColumns[vCol].align) { + vCell.setStyleProperty("textAlign", + vColumns[vCol].align); + } + } + } + } + + // Sync cells: Remove existing ones and dispose them + else if (this._lastRowCount > vRowCount) + { + var vChildren = this.getChildren(); + var vChildrenLength = vChildren.length - 1; + + for (var i=this._lastRowCount; i>vRowCount; i--) + { + for (var vCol in vColumns) + { + vCell = vChildren[vChildrenLength--]; + this.remove(vCell); + vCell.dispose(); + } + } + } + + // Update row and column count + this.setRowCount(vRowCount); + if (!vUpdate) { + this.setColumnCount(qx.lang.Object.getLength(vColumns)); + } + + // Apply height to all rows + for (var i=0; i<vRowCount; i++) { + this.setRowHeight(i, this._rowHeight); + } + + if (!vUpdate) + { + // Apply width and alignment to all columns + var vCount = 0; + for (var vCol in vColumns) + { + this.setColumnHorizontalAlignment(vCount, vColumns[vCol].align); + this.setColumnWidth(vCount, vColumns[vCol].width); + + vCount++; + } + } + + // Store last row count + this._lastRowCount = vRowCount; +} + +qx.Proto._currentScrollTop = -1; + +qx.Proto._updateRendering = function(vForce) +{ + if (this._updatingRendering) { + return; + } + + var vScrollTop = (this._initialLayoutDone + ? this.getView().getScroll().getScrollTop() + : 0); + + this._updatingRendering = true; + this._currentScrollTop = vScrollTop; + + for (var i=0; i<this._rowCount; i++) { + this._updateRow(i); + } + + delete this._updatingRendering; +} + +qx.Proto._updateRow = function(vRelativeRow) +{ + var vData = this._data; + var vRowOffset = Math.floor(this._currentScrollTop / this._rowHeight); + + var vColumnCount = this.getColumnCount(); + var vColumns = this._columns; + + var vChildren = this.getVisibleChildren(); + var vChild, vEntry, vCol; + + var j=0; + + for (vCol in vColumns) + { + vEntry = vData[vRowOffset+vRelativeRow]; + vChild = vChildren[vColumnCount*vRelativeRow+(j++)]; + + if (vChild) + { + if (vEntry && vEntry._selected) { + vChild.addState("selected"); + } else { + vChild.removeState("selected"); + } + vChild.set(vEntry + ? vEntry[vCol] + : vColumns[vCol].empty || vColumns[vCol].contentClass.empty); + } + } +} + +qx.Proto._onscroll = function(e) { + this._updateRendering(); +} + + + + + +/* +--------------------------------------------------------------------------- + DIMENSION CACHE +--------------------------------------------------------------------------- +*/ + +qx.Proto._changeInnerHeight = function(vNew, vOld) +{ + this._updateLayout(true); + this._updateRendering(true); + + return qx.ui.layout.GridLayout.prototype._changeInnerHeight.call(this, + vNew, + vOld); +} + + + + + + +/* +--------------------------------------------------------------------------- + MANAGER BINDING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + +qx.Proto.getListViewTarget = function(e) +{ + var vEventTop = e.getPageY(); + var vPaneTop = qx.html.Location.getPageInnerTop(this.getElement()); + var vItemNo = Math.floor(this._currentScrollTop / this._rowHeight) + + Math.floor((vEventTop - vPaneTop) / this._rowHeight); + + return this._data[vItemNo]; +} + +qx.Proto.getSelectedItem = function() { + return this.getSelectedItems()[0]; +} + +qx.Proto.getSelectedItems = function() { + return this._manager.getSelectedItems(); +} + +qx.Proto.getData = function() { + return this._data; +} + +// use static row height +qx.Proto.getItemHeight = function(vItem) { + return this._rowHeight; +} + +// use the full inner width of the pane +qx.Proto.getItemWidth = function(vItem) { + return qx.html.Dimension.getInnerWidth(this.getElement()); +} + +qx.Proto.getItemLeft = function(vItem) { + return 0; +} + +qx.Proto.getItemTop = function(vItem) { + return this._data.indexOf(vItem) * this._rowHeight; +} + + + + +/* +--------------------------------------------------------------------------- + MOUSE EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousewheel = function(e) +{ + var vScroll = this.getView().getScroll(); + vScroll.setScrollTop(vScroll.getScrollTop() - (e.getWheelDelta() * 20)); +} + +qx.Proto._onmouseover = function(e) +{ + var vTarget = this.getListViewTarget(e); + if (vTarget) { + this._manager.handleMouseOver(vTarget, e); + } +} + +qx.Proto._onmousedown = function(e) +{ + var vTarget = this.getListViewTarget(e); + if (vTarget) { + this._manager.handleMouseDown(vTarget, e); + } +} + +qx.Proto._onmouseup = function(e) +{ + var vTarget = this.getListViewTarget(e); + if (vTarget) { + this._manager.handleMouseUp(vTarget, e); + } +} + +qx.Proto._onclick = function(e) +{ + var vTarget = this.getListViewTarget(e); + if (vTarget) { + this._manager.handleClick(vTarget, e); + } +} + +qx.Proto._ondblclick = function(e) +{ + var vTarget = this.getListViewTarget(e); + if (vTarget) { + this._manager.handleDblClick(vTarget, e); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + KEY EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeypress = function(e) +{ + this._manager.handleKeyPress(e); + e.preventDefault(); +} + + + + + + +/* +--------------------------------------------------------------------------- + MANAGER SELECTION +--------------------------------------------------------------------------- +*/ + +qx.Proto._updateSelectionState = function(vItem, vIsSelected) +{ + vItem._selected = vIsSelected; + this._updateItem(vItem); +} + +qx.Proto._updateAnchorState = function(vItem, vIsAnchor) +{ + vItem._anchor = vIsAnchor; + this._updateItem(vItem); +} + +qx.Proto._updateLeadState = function(vItem, vIsLead) +{ + vItem._lead = vIsLead; + this._updateItem(vItem); +} + +qx.Proto.scrollItemIntoView = function(vItem, vAlignLeftTop) +{ + this.scrollItemIntoViewX(vItem, vAlignLeftTop); + this.scrollItemIntoViewY(vItem, vAlignLeftTop); +} + +qx.Proto.scrollItemIntoViewX = function(vItem, vAlignLeft) { + // this.error("Not implemented in qx.ui.listview.ListViewPane!"); +} + +qx.Proto.scrollItemIntoViewY = function(vItem, vAlignTop) +{ + var vItems = this._data; + var vOffset = vItems.indexOf(vItem) * this._rowHeight; + var vHeight = this._rowHeight; + + // normalize client height (we want that the item is fully visible) + var vParentHeight = (Math.floor(this.getClientHeight() / this._rowHeight) * + this._rowHeight); + var vParentScrollTop = this._currentScrollTop; + + var vNewScrollTop = null; + + if (vAlignTop) + { + vNewScrollTop = vOffset; + } + else if (vAlignTop == false) + { + vNewScrollTop = vOffset + vHeight - vParentHeight; + } + else if (vHeight > vParentHeight || vOffset < vParentScrollTop) + { + vNewScrollTop = vOffset; + } + else if ((vOffset + vHeight) > (vParentScrollTop + vParentHeight)) + { + vNewScrollTop = vOffset + vHeight - vParentHeight; + } + + if (vNewScrollTop != null) { + this.getView().getScroll().setScrollTop(vNewScrollTop); + } +} + +qx.Proto.setScrollTop = function(vScrollTop) +{ + this.getView().getScroll().setScrollTop(vScrollTop); + this._updateRendering(); +} + +qx.Proto.getScrollTop = function() { + return this._currentScrollTop; +} + +qx.Proto.setScrollLeft = function() { + this.error("Not implemented in qx.ui.listview.ListViewPane!"); +} + +qx.Proto.getScrollLeft = function() { + return 0; +} + +qx.Proto.isItemVisible = function(vItem) +{ + var vIndex = this._data.indexOf(vItem); + var vRowStart = Math.floor(this._currentScrollTop / this._rowHeight); + var vRowLength = Math.ceil(this.getClientHeight() / this._rowHeight); + + return vIndex >= vRowStart && vIndex <= (vRowStart + vRowLength); +} + +qx.Proto.getRelativeItemPosition = function(vItem) +{ + var vIndex = this._data.indexOf(vItem); + var vRowStart = Math.floor(this._currentScrollTop / this._rowHeight); + + return vIndex - vRowStart; +} + +qx.Proto._updateItem = function(vItem) +{ + var vIndex = this._data.indexOf(vItem); + var vRowStart = Math.floor(this._currentScrollTop / this._rowHeight); + var vRowLength = Math.ceil(this.getClientHeight() / this._rowHeight); + + if (vIndex < vRowStart || vIndex > (vRowStart + vRowLength)) { + return; + } + + this._updateRow(vIndex - vRowStart); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + + // ************************************************************************ + // MOUSE EVENT LISTENER + // ************************************************************************ + this.removeEventListener("mousewheel", this._onmousewheel); + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + this.removeEventListener("click", this._onclick); + this.removeEventListener("dblclick", this._ondblclick); + + + // ************************************************************************ + // KEY EVENT LISTENER + // ************************************************************************ + this.removeEventListener("keypress", this._onkeypress); + + + // ************************************************************************ + // DATA + // ************************************************************************ + delete this._data; + delete this._columns; + + + // ************************************************************************ + // MANAGER + // ************************************************************************ + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + return qx.ui.layout.GridLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Button.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Button.js new file mode 100644 index 0000000000..55a8b5795f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Button.js @@ -0,0 +1,360 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) +#embed(qx.widgettheme/arrows/next.gif) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.menu.Button", qx.ui.layout.HorizontalBoxLayout, +function(vLabel, vIcon, vCommand, vMenu) +{ + qx.ui.layout.HorizontalBoxLayout.call(this); + + + // ************************************************************************ + // LAYOUT + // ************************************************************************ + + var io = this._iconObject = new qx.ui.basic.Image; + io.setWidth(16); + io.setAnonymous(true); + + var lo = this._labelObject = new qx.ui.basic.Label; + lo.setAnonymous(true); + lo.setSelectable(false); + + var so = this._shortcutObject = new qx.ui.basic.Label; + so.setAnonymous(true); + so.setSelectable(false); + + var ao = this._arrowObject = new qx.ui.basic.Image("widget/arrows/next.gif"); + ao.setAnonymous(true); + + + // ************************************************************************ + // INIT + // ************************************************************************ + + if (vLabel != null) { + this.setLabel(vLabel); + } + + if (vIcon != null) { + this.setIcon(vIcon); + } + + if (vCommand != null) { + this.setCommand(vCommand); + qx.locale.Manager.getInstance().addEventListener("changeLocale", function(e) { + this._modifyCommand(vCommand, vCommand); + }, this) + } + + if (vMenu != null) { + this.setMenu(vMenu); + } + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + + this.addEventListener("mouseup", this._onmouseup); +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "menu-button" }); + +qx.OO.addProperty({ name : "icon", type : "string" }); +qx.OO.addProperty({ name : "label" }); +qx.OO.addProperty({ name : "menu", type : "object" }); + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto._hasIcon = false; +qx.Proto._hasLabel = false; +qx.Proto._hasShortcut = false; +qx.Proto._hasMenu = false; + +qx.Proto.hasIcon = function() { + return this._hasIcon; +} + +qx.Proto.hasLabel = function() { + return this._hasLabel; +} + +qx.Proto.hasShortcut = function() { + return this._hasShortcut; +} + +qx.Proto.hasMenu = function() { + return this._hasMenu; +} + +qx.Proto.getIconObject = function() { + return this._iconObject; +} + +qx.Proto.getLabelObject = function() { + return this._labelObject; +} + +qx.Proto.getShortcutObject = function() { + return this._shortcutObject; +} + +qx.Proto.getArrowObject = function() { + return this._arrowObject; +} + +qx.Proto.getParentMenu = function() +{ + var vParent = this.getParent(); + if (vParent) + { + vParent = vParent.getParent(); + + if (vParent && vParent instanceof qx.ui.menu.Menu) { + return vParent; + } + } + + return null; +} + + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return new qx.renderer.layout.MenuButtonLayoutImpl(this); +} + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyEnabled = function(propValue, propOldValue, propData) +{ + if (this._iconObject) { + this._iconObject.setEnabled(propValue); + } + + if (this._labelObject) { + this._labelObject.setEnabled(propValue); + } + + if (this._shortcutObject) { + this._shortcutObject.setEnabled(propValue); + } + + return qx.ui.layout.HorizontalBoxLayout.prototype._modifyEnabled.call(this, propValue, propOldValue, propData); +} + +qx.Proto._modifyIcon = function(propValue, propOldValue, propData) +{ + this._iconObject.setSource(propValue); + + if (qx.util.Validation.isValidString(propValue)) + { + this._hasIcon = true; + + if (qx.util.Validation.isInvalidString(propOldValue)) { + this.addAtBegin(this._iconObject); + } + } + else + { + this._hasIcon = false; + this.remove(this._iconObject); + } + + return true; +} + +qx.Proto._modifyLabel = function(propValue, propOldValue, propData) +{ + this._labelObject.setHtml(propValue); + + if ((typeof propValue == "string" && propValue != "") || propValue instanceof qx.locale.LocalizedString) + { + this._hasLabel = true; + + if (!((typeof propOldValue == "string" && propOldValue != "") || propOldValue instanceof qx.locale.LocalizedString)) { + this.addAt(this._labelObject, this.getFirstChild() == this._iconObject ? 1 : 0); + } + } + else + { + this._hasLabel = false; + this.remove(this._labelObject); + } + + return true; +} + +qx.Proto._modifyCommand = function(propValue, propOldValue, propData) +{ + var vHtml = propValue ? propValue.toString() : ""; + + this._shortcutObject.setHtml(vHtml); + + if (qx.util.Validation.isValidString(vHtml)) + { + this._hasShortcut = true; + + var vOldHtml = propOldValue ? propOldValue.getShortcut() : ""; + + if (qx.util.Validation.isInvalidString(vOldHtml)) + { + if (this.getLastChild() == this._arrowObject) + { + this.addBefore(this._shortcutObject, this._arrowObject); + } + else + { + this.addAtEnd(this._shortcutObject); + } + } + } + else + { + this._hasShortcut = false; + this.remove(this._shortcutObject); + } + + return true; +} + +qx.Proto._modifyMenu = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._hasMenu = true; + + if (qx.util.Validation.isInvalidObject(propOldValue)) { + this.addAtEnd(this._arrowObject); + } + } + else + { + this._hasMenu = false; + this.remove(this._arrowObject); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseup = function(e) { + this.execute(); +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + // Dispose children + if (this._iconObject) + { + this._iconObject.dispose(); + this._iconObject = null; + } + + if (this._labelObject) + { + this._labelObject.dispose(); + this._labelObject = null; + } + + if (this._shortcutObject) + { + this._shortcutObject.dispose(); + this._shortcutObject = null; + } + + if (this._arrowObject) + { + this._arrowObject.dispose(); + this._arrowObject = null; + } + + // Remove event listeners + this.removeEventListener("mouseup", this._onmouseup); + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/CheckBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/CheckBox.js new file mode 100644 index 0000000000..efb02c035f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/CheckBox.js @@ -0,0 +1,89 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) +#embed(qx.widgettheme/menu/checkbox.gif) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/*! + A checkbox for the menu system. +*/ +qx.OO.defineClass("qx.ui.menu.CheckBox", qx.ui.menu.Button, +function(vLabel, vCommand, vChecked) +{ + qx.ui.menu.Button.call(this, vLabel, "static/image/blank.gif", vCommand); + + if (vChecked != null) { + this.setChecked(vChecked); + } + + qx.manager.object.ImageManager.getInstance().preload("widget/menu/checkbox.gif"); +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "menu-check-box" }); +qx.OO.addProperty({ name : "name", type : "string" }); +qx.OO.addProperty({ name : "value", type : "string" }); +qx.OO.addProperty({ name : "checked", type : "boolean", defaultValue : false, getAlias : "isChecked" }); + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) +{ + propValue ? this.addState("checked") : this.removeState("checked"); + this.getIconObject().setSource(propValue ? "widget/menu/checkbox.gif" : "static/image/blank.gif"); + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + EXECUTE +--------------------------------------------------------------------------- +*/ + +qx.Proto.execute = function() +{ + this.setChecked(!this.getChecked()); + qx.ui.menu.Button.prototype.execute.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Layout.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Layout.js new file mode 100644 index 0000000000..23b060d821 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Layout.js @@ -0,0 +1,58 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +/*! + A small helper class to create a special layout handler for qx.ui.menu.Menus +*/ +qx.OO.defineClass("qx.ui.menu.Layout", qx.ui.layout.VerticalBoxLayout, +function() +{ + qx.ui.layout.VerticalBoxLayout.call(this); + + this.setAnonymous(true); +}); + + +/*! + Appearance of the widget +*/ +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "menu-layout" }); + + + + +/* +--------------------------------------------------------------------------- + INIT LAYOUT IMPL +--------------------------------------------------------------------------- +*/ + +/*! + This creates an new instance of the layout impl this widget uses +*/ +qx.Proto._createLayoutImpl = function() { + return new qx.renderer.layout.MenuLayoutImpl(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Menu.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Menu.js new file mode 100644 index 0000000000..bf4d584ae9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Menu.js @@ -0,0 +1,922 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.menu.Menu", qx.ui.popup.Popup, +function() +{ + qx.ui.popup.Popup.call(this); + + + // ************************************************************************ + // LAYOUT + // ************************************************************************ + + var l = this._layout = new qx.ui.menu.Layout; + this.add(l); + + + // ************************************************************************ + // TIMER + // ************************************************************************ + this._openTimer = new qx.client.Timer(this.getOpenInterval()); + this._openTimer.addEventListener("interval", this._onopentimer, this); + + this._closeTimer = new qx.client.Timer(this.getCloseInterval()); + this._closeTimer.addEventListener("interval", this._onclosetimer, this); + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mousemove", this._onmouseover); + this.addEventListener("mouseout", this._onmouseout); + + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + + + // ************************************************************************ + // REMAPPING + // ************************************************************************ + + this.remapChildrenHandlingTo(this._layout); +}); + +qx.Proto._remappingChildTable = [ "add", "remove", "addAt", "addAtBegin", "addAtEnd", "removeAt", "addBefore", "addAfter", "removeAll", "getFirstChild", "getFirstActiveChild", "getLastChild", "getLastActiveChild" ]; +qx.Proto._isFocusRoot = false; + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "menu" }); + +qx.OO.addProperty({ name : "iconContentGap", type : "number", defaultValue : 4 }); +qx.OO.addProperty({ name : "labelShortcutGap", type : "number", defaultValue : 10 }); +qx.OO.addProperty({ name : "contentArrowGap", type : "number", defaultValue : 8 }); +qx.OO.addProperty({ name : "contentNonIconPadding", type : "number", defaultValue : 20 }); +qx.OO.addProperty({ name : "contentNonArrowPadding", type : "number", defaultValue : 8 }); + +qx.OO.addProperty({ name : "hoverItem", type : "object" }); +qx.OO.addProperty({ name : "openItem", type : "object" }); + +/** Widget that opened the menu */ +qx.OO.addProperty({ name : "opener", type : "object" }); + +/** reference to the parent menu if the menu is a submenu */ +qx.OO.addProperty({ name : "parentMenu", type : "object" }); + +qx.OO.addProperty({ name : "fastReopen", type : "boolean", defaultValue : false }); +qx.OO.addProperty({ name : "openInterval", type : "number", defaultValue : 250 }); +qx.OO.addProperty({ name : "closeInterval", type : "number", defaultValue : 250 }); + +qx.OO.addProperty({ name : "subMenuHorizontalOffset", type : "number", defaultValue : -3 }); +qx.OO.addProperty({ name : "subMenuVerticalOffset", type : "number", defaultValue : -2 }); + +qx.OO.addProperty({ name : "indentShortcuts", type : "boolean", defaultValue : true }); + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getLayout = function() { + return this._layout; +} + +/** + * Returns if the given element is a child of this menu + * + * @param vElement {Object} element to test + * @param vButtonsOnly {boolean ? false} if true, child elements other than buttons + * will be ignored + */ +qx.Proto.isSubElement = function(vElement, vButtonsOnly) +{ + if ((vElement.getParent() === this._layout) + + //accept this as child, this can happen if a scrollbar is clicked upon in + //a context menu + ||((!vButtonsOnly) && (vElement === this))) { + return true; + } + + for (var a=this._layout.getChildren(), l=a.length, i=0; i<l; i++) + { + if (a[i].getMenu && a[i].getMenu() && a[i].getMenu().isSubElement(vElement, vButtonsOnly)) { + return true; + } + } + + return false; +} + + +/* +--------------------------------------------------------------------------- + APPEAR/DISAPPEAR +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeAppear = function() +{ + // Intentionally bypass superclass and call super.super._beforeAppear + qx.ui.layout.CanvasLayout.prototype._beforeAppear.call(this); + + // register to menu manager as active widget + qx.manager.object.MenuManager.getInstance().add(this); + + // zIndex handling + this.bringToFront(); + + //setup as global active widget + this._makeActive(); +} + +qx.Proto._beforeDisappear = function() +{ + // Intentionally bypass superclass and call super.super._beforeDisappear + qx.ui.layout.CanvasLayout.prototype._beforeDisappear.call(this); + + // deregister as opened from qx.manager.object.MenuManager + qx.manager.object.MenuManager.getInstance().remove(this); + + // reset global active widget + this._makeInactive(); + + // reset properties on close + this.setHoverItem(null); + this.setOpenItem(null); + + // be sure that the opener button gets the correct state + var vOpener = this.getOpener(); + if (vOpener) { + vOpener.removeState("pressed"); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyHoverItem = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.removeState("over"); + } + + if (propValue) { + propValue.addState("over"); + } + + return true; +} + +qx.Proto._modifyOpenItem = function(propValue, propOldValue, propData) +{ + var vMakeActive = false; + + if (propOldValue) + { + var vOldSub = propOldValue.getMenu(); + + if (vOldSub) + { + vOldSub.setParentMenu(null); + vOldSub.setOpener(null); + vOldSub.hide(); + } + } + + if (propValue) + { + var vSub = propValue.getMenu(); + + if (vSub) + { + vSub.setOpener(propValue); + vSub.setParentMenu(this); + + var pl = propValue.getElement(); + var el = this.getElement(); + + vSub.setTop(qx.html.Location.getPageBoxTop(pl) + this.getSubMenuVerticalOffset()); + vSub.setLeft(qx.html.Location.getPageBoxLeft(el) + qx.html.Dimension.getBoxWidth(el) + this.getSubMenuHorizontalOffset()); + + vSub.show(); + + qx.ui.core.Widget.flushGlobalQueues(); + } + } + + return true; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + LOCATIONS AND DIMENSIONS OF CHILDRENS CHILDREN: + CREATE VARIABLES +--------------------------------------------------------------------------- +*/ + +qx.OO.addCachedProperty({ name : "maxIconWidth" }); +qx.OO.addCachedProperty({ name : "maxLabelWidth" }); +qx.OO.addCachedProperty({ name : "maxLabelWidthIncShortcut" }); +qx.OO.addCachedProperty({ name : "maxShortcutWidth" }); +qx.OO.addCachedProperty({ name : "maxArrowWidth" }); +qx.OO.addCachedProperty({ name : "maxContentWidth" }); + +qx.OO.addCachedProperty({ name : "iconPosition", defaultValue : 0 }); +qx.OO.addCachedProperty({ name : "labelPosition" }); +qx.OO.addCachedProperty({ name : "shortcutPosition" }); +qx.OO.addCachedProperty({ name : "arrowPosition" }); + +qx.OO.addCachedProperty({ name : "menuButtonNeededWidth" }); + + + + + + +/* +--------------------------------------------------------------------------- + LOCATIONS AND DIMENSIONS OF CHILDRENS CHILDREN: + MAX WIDTH COMPUTERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computeMaxIconWidth = function() +{ + var ch=this.getLayout().getChildren(), chl=ch.length, chc, m=0; + + for (var i=0; i<chl; i++) + { + chc = ch[i]; + + if (chc.hasIcon()) { + // Make static as long as not supported well + // m = Math.max(m, chc.getIconObject().getPreferredBoxWidth()); + m = Math.max(m, 16); + } + } + + return m; +} + +qx.Proto._computeMaxLabelWidth = function() +{ + var ch=this.getLayout().getChildren(), chl=ch.length, chc, m=0; + + for (var i=0; i<chl; i++) + { + chc = ch[i]; + + if (chc.hasLabel()) { + m = Math.max(m, chc.getLabelObject().getPreferredBoxWidth()); + } + } + + return m; +} + +qx.Proto._computeMaxLabelWidthIncShortcut = function() +{ + var ch=this.getLayout().getChildren(), chl=ch.length, chc, m=0; + + for (var i=0; i<chl; i++) + { + chc = ch[i]; + + if (chc.hasLabel() && chc.hasShortcut()) { + m = Math.max(m, chc.getLabelObject().getPreferredBoxWidth()); + } + } + + return m; +} + +qx.Proto._computeMaxShortcutWidth = function() +{ + var ch=this.getLayout().getChildren(), chl=ch.length, chc, m=0; + + for (var i=0; i<chl; i++) + { + chc = ch[i]; + + if (chc.hasShortcut()) { + m = Math.max(m, chc.getShortcutObject().getPreferredBoxWidth()); + } + } + + return m; +} + +qx.Proto._computeMaxArrowWidth = function() +{ + var ch=this.getLayout().getChildren(), chl=ch.length, chc, m=0; + + for (var i=0; i<chl; i++) + { + chc = ch[i]; + + if (chc.hasMenu()) { + // Make static as long as not supported well + // m = Math.max(m, chc.getArrowObject().getPreferredBoxWidth()); + m = Math.max(m, 4); + } + } + + return m; +} + +qx.Proto._computeMaxContentWidth = function() +{ + var vSum; + + var lw = this.getMaxLabelWidth(); + var sw = this.getMaxShortcutWidth(); + + if (this.getIndentShortcuts()) + { + var vTemp = sw+this.getMaxLabelWidthIncShortcut(); + + if (sw > 0) { + vTemp += this.getLabelShortcutGap(); + } + + vSum = Math.max(lw, vTemp); + } + else + { + vSum = lw + sw; + + if (lw > 0 && sw > 0) { + vSum += this.getLabelShortcutGap(); + } + } + + return vSum; +} + + + + + + + +/* +--------------------------------------------------------------------------- + LOCATIONS AND DIMENSIONS OF CHILDRENS CHILDREN: + POSITION COMPUTERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computeIconPosition = function() { + return 0; +} + +qx.Proto._computeLabelPosition = function() +{ + var v = this.getMaxIconWidth(); + return v > 0 ? v + this.getIconContentGap() : this.getContentNonIconPadding(); +} + +qx.Proto._computeShortcutPosition = function() { + return this.getLabelPosition() + this.getMaxContentWidth() - this.getMaxShortcutWidth(); +} + +qx.Proto._computeArrowPosition = function() +{ + var v = this.getMaxContentWidth(); + return this.getLabelPosition() + (v > 0 ? v + this.getContentArrowGap() : v); +} + + + + + + + +/* +--------------------------------------------------------------------------- + LOCATIONS AND DIMENSIONS OF CHILDRENS CHILDREN: + INVALIDATION OF CACHE +--------------------------------------------------------------------------- +*/ + +qx.Proto._invalidateMaxIconWidth = function() +{ + this._cachedMaxIconWidth = null; + + this._invalidateLabelPosition(); + this._invalidateMenuButtonNeededWidth(); +} + +qx.Proto._invalidateMaxLabelWidth = function() +{ + this._cachedMaxLabelWidth = null; + + this._invalidateShortcutPosition(); + this._invalidateMaxLabelWidthIncShortcut(); + this._invalidateMaxContentWidth(); + this._invalidateMenuButtonNeededWidth(); +} + +qx.Proto._invalidateMaxShortcutWidth = function() +{ + this._cachedMaxShortcutWidth = null; + + this._invalidateArrowPosition(); + this._invalidateMaxContentWidth(); + this._invalidateMenuButtonNeededWidth(); +} + +qx.Proto._invalidateMaxLabelWidth = function() +{ + this._cachedMaxArrowWidth = null; + this._invalidateMenuButtonNeededWidth(); +} + +qx.Proto._invalidateLabelPosition = function() +{ + this._cachedLabelPosition = null; + this._invalidateShortcutPosition(); +} + +qx.Proto._invalidateShortcutPosition = function() +{ + this._cachedShortcutPosition = null; + this._invalidateArrowPosition(); +} + + + + + + +/* +--------------------------------------------------------------------------- + LOCATIONS AND DIMENSIONS OF CHILDRENS CHILDREN: + NEEDED WIDTH COMPUTERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._computeMenuButtonNeededWidth = function() +{ + var vSum = 0; + + var vMaxIcon = this.getMaxIconWidth(); + var vMaxContent = this.getMaxContentWidth(); + var vMaxArrow = this.getMaxArrowWidth(); + + if (vMaxIcon > 0) + { + vSum += vMaxIcon; + } + else + { + vSum += this.getContentNonIconPadding(); + } + + if (vMaxContent > 0) + { + if (vMaxIcon > 0) { + vSum += this.getIconContentGap(); + } + + vSum += vMaxContent; + } + + if (vMaxArrow > 0) + { + if (vMaxIcon > 0 || vMaxContent > 0) { + vSum += this.getContentArrowGap(); + } + + vSum += vMaxArrow; + } + else + { + vSum += this.getContentNonArrowPadding(); + } + + return vSum; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT-HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseover = function(e) +{ + /* ------------------------------ + HANDLE PARENT MENU + ------------------------------ */ + + // look if we have a parent menu + // if so we need to stop the close event started there + var vParent = this.getParentMenu(); + + if (vParent) + { + // stop the close event + vParent._closeTimer.stop(); + + // look if we have a opener, too (normally this should be) + var vOpener = this.getOpener(); + + // then setup it to look hovered + if (vOpener) { + vParent.setHoverItem(vOpener); + } + } + + + + + /* ------------------------------ + HANDLING FOR HOVERING MYSELF + ------------------------------ */ + + var t = e.getTarget(); + + if (t == this) + { + this._openTimer.stop(); + this._closeTimer.start(); + + this.setHoverItem(null); + + return; + } + + + + + /* ------------------------------ + HANDLING FOR HOVERING ITEMS + ------------------------------ */ + + var vOpen = this.getOpenItem(); + + // if we have a open item + if (vOpen) + { + this.setHoverItem(t); + this._openTimer.stop(); + + // if the new one has also a sub menu + if (t.hasMenu()) + { + // check if we should use fast reopen (this will open the menu instantly) + if (this.getFastReopen()) + { + this.setOpenItem(t); + this._closeTimer.stop(); + } + + // otherwise we use the default timer interval + else + { + this._openTimer.start(); + } + } + + // otherwise start the close timer for the old menu + else + { + this._closeTimer.start(); + } + } + + // otherwise handle the mouseover and restart the timer + else + { + this.setHoverItem(t); + + // stop timer for the last open request + this._openTimer.stop(); + + // and restart it if the new one has a menu, too + if (t.hasMenu()) { + this._openTimer.start(); + } + } +} + +qx.Proto._onmouseout = function(e) +{ + // stop the open timer (for any previous open requests) + this._openTimer.stop(); + + // start the close timer to hide a menu if needed + var t = e.getTarget(); + if (t != this && t.hasMenu()) { + this._closeTimer.start(); + } + + // reset the current hover item + this.setHoverItem(null); +} + +qx.Proto._onopentimer = function(e) +{ + // stop the open timer (we need only the first interval) + this._openTimer.stop(); + + // if we have a item which is currently hovered, open it + var vHover = this.getHoverItem(); + if (vHover && vHover.hasMenu()) { + this.setOpenItem(vHover); + } +} + +qx.Proto._onclosetimer = function(e) +{ + // stop the close timer (we need only the first interval) + this._closeTimer.stop(); + + // reset the current opened item + this.setOpenItem(null); +} + +/*! + Wraps key events to target functions +*/ +qx.Proto._onkeydown = function(e) +{ + if (e.getKeyIdentifier() == "Enter") { + this._onkeydown_enter(e); + } + e.preventDefault(); +}; + + +qx.Proto._onkeypress = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Up": + this._onkeypress_up(e); + break; + + case "Down": + this._onkeypress_down(e); + break; + + case "Left": + this._onkeypress_left(e); + break; + + case "Right": + this._onkeypress_right(e); + break; + + default: + return; + } + + // Stop all matching events + e.preventDefault(); +}; + + +qx.Proto._onkeypress_up = function(e) +{ + var vHover = this.getHoverItem(); + var vPrev = vHover ? vHover.isFirstChild() ? this.getLastActiveChild() : vHover.getPreviousActiveSibling([qx.ui.menu.Separator]) : this.getLastActiveChild(); + + this.setHoverItem(vPrev); +}; + +qx.Proto._onkeypress_down = function(e) +{ + var vHover = this.getHoverItem(); + var vNext = vHover ? vHover.isLastChild() ? this.getFirstActiveChild() : vHover.getNextActiveSibling([qx.ui.menu.Separator]) : this.getFirstActiveChild(); + + this.setHoverItem(vNext); +}; + + +qx.Proto._onkeypress_left = function(e) +{ + var vOpener = this.getOpener(); + + // Jump to the "parent" qx.ui.menu.Menu + if (vOpener instanceof qx.ui.menu.Button) + { + var vOpenerParent = this.getOpener().getParentMenu(); + + vOpenerParent.setOpenItem(null); + vOpenerParent.setHoverItem(vOpener); + + vOpenerParent._makeActive(); + } + + // Jump to the previous ToolBarMenuButton + else if (vOpener instanceof qx.ui.toolbar.MenuButton) + { + var vToolBar = vOpener.getParentToolBar(); + + // change active widget to new button + this.getFocusRoot().setActiveChild(vToolBar); + + // execute toolbars keydown implementation + vToolBar._onkeypress(e); + } +}; + + +qx.Proto._onkeypress_right = function(e) +{ + var vHover = this.getHoverItem(); + + if (vHover) + { + var vMenu = vHover.getMenu(); + + if (vMenu) + { + this.setOpenItem(vHover); + + // mark first item in new submenu + vMenu.setHoverItem(vMenu.getFirstActiveChild()); + + return; + } + } + else if (!this.getOpenItem()) + { + var vFirst = this.getLayout().getFirstActiveChild(); + + if (vFirst) { + vFirst.hasMenu() ? this.setOpenItem(vFirst) : this.setHoverItem(vFirst); + } + } + + // Jump to the next ToolBarMenuButton + var vOpener = this.getOpener(); + + if (vOpener instanceof qx.ui.toolbar.MenuButton) + { + var vToolBar = vOpener.getParentToolBar(); + + // change active widget to new button + this.getFocusRoot().setActiveChild(vToolBar); + + // execute toolbars keydown implementation + vToolBar._onkeypress(e); + } + else if (vOpener instanceof qx.ui.menu.Button && vHover) + { + // search for menubar if existing + // menu -> button -> menu -> button -> menu -> menubarbutton -> menubar + + var vOpenerParent = vOpener.getParentMenu(); + + while (vOpenerParent && vOpenerParent instanceof qx.ui.menu.Menu) + { + vOpener = vOpenerParent.getOpener(); + + if (vOpener instanceof qx.ui.menu.Button) + { + vOpenerParent = vOpener.getParentMenu(); + } + else + { + if (vOpener) { + vOpenerParent = vOpener.getParent(); + } + + break; + } + } + + if (vOpenerParent instanceof qx.ui.toolbar.Part) { + vOpenerParent = vOpenerParent.getParent(); + } + + if (vOpenerParent instanceof qx.ui.toolbar.ToolBar) + { + // jump to next menubarbutton + this.getFocusRoot().setActiveChild(vOpenerParent); + vOpenerParent._onkeypress(e); + } + } +} + +qx.Proto._onkeydown_enter = function(e) +{ + var vHover = this.getHoverItem(); + if (vHover) { + vHover.execute(); + } + + qx.manager.object.MenuManager.getInstance().update(); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._layout) + { + this._layout.dispose(); + this._layout = null; + } + + if (this._openTimer) + { + this._openTimer.dispose(); + this._openTimer = null; + } + + if (this._closeTimer) + { + this._closeTimer.dispose(); + this._closeTimer = null; + } + + // Remove event listeners + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mousemove", this._onmouseover); + this.removeEventListener("mouseout", this._onmouseout); + + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + + + return qx.ui.popup.Popup.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/RadioButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/RadioButton.js new file mode 100644 index 0000000000..216b6238c6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/RadioButton.js @@ -0,0 +1,122 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) +#embed(qx.widgettheme/menu/radiobutton.gif) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.menu.RadioButton", qx.ui.menu.CheckBox, +function(vLabel, vCommand, vChecked) +{ + qx.ui.menu.CheckBox.call(this, vLabel, vCommand, vChecked); + + qx.manager.object.ImageManager.getInstance().preload("widget/menu/radiobutton.gif"); +}); + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "menu-radio-button" }); + +/*! + The assigned qx.manager.selection.RadioManager which handles the switching between registered buttons +*/ +qx.OO.addProperty({ name : "manager", type : "object", instance : "qx.manager.selection.RadioManager", allowNull : true }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) +{ + var vManager = this.getManager(); + + if (vManager) + { + if (propValue) + { + vManager.setSelected(this); + } + else if (vManager.getSelected() == this) + { + vManager.setSelected(null); + } + } + + propValue ? this.addState("checked") : this.removeState("checked"); + this.getIconObject().setSource(propValue ? "widget/menu/radiobutton.gif" : "static/image/blank.gif"); + + return true; +} + +qx.Proto._modifyManager = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) { + propValue.add(this); + } + + return true; +} + +qx.Proto._modifyName = function(propValue, propOldValue, propData) +{ + if (this.getManager()) { + this.getManager().setName(propValue); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + EXECUTE +--------------------------------------------------------------------------- +*/ + +qx.Proto.execute = function() +{ + this.setChecked(true); + + // Intentionally bypass superclass and call super.super.execute + qx.ui.menu.Button.prototype.execute.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Separator.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Separator.js new file mode 100644 index 0000000000..16d4251c8a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menu/Separator.js @@ -0,0 +1,78 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.menu.Separator", qx.ui.layout.CanvasLayout, +function() +{ + qx.ui.layout.CanvasLayout.call(this); + + // Fix IE Styling Issues + this.setStyleProperty("fontSize", "0"); + this.setStyleProperty("lineHeight", "0"); + + // ************************************************************************ + // LINE + // ************************************************************************ + + this._line = new qx.ui.basic.Terminator; + this._line.setAnonymous(true); + this._line.setAppearance("menu-separator-line"); + this.add(this._line); + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + + // needed to stop the event, and keep the menu showing + this.addEventListener("mousedown", this._onmousedown); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "menu-separator" }); + +qx.Proto.hasIcon = qx.lang.Function.returnFalse; +qx.Proto.hasLabel = qx.lang.Function.returnFalse; +qx.Proto.hasShortcut = qx.lang.Function.returnFalse; +qx.Proto.hasMenu = qx.lang.Function.returnFalse; + +qx.Proto._onmousedown = function(e) { + e.stopPropagation(); +} + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._line) + { + this._line.dispose(); + this._line = null; + } + + return qx.ui.layout.CanvasLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menubar/Button.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menubar/Button.js new file mode 100644 index 0000000000..42bdac4499 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menubar/Button.js @@ -0,0 +1,30 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.menubar.Button", qx.ui.toolbar.MenuButton, +function(vText, vMenu, vIcon, vIconWidth, vIconHeight, vFlash) { + qx.ui.toolbar.MenuButton.call(this, vText, vMenu, vIcon, vIconWidth, vIconHeight, vFlash); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menubar/MenuBar.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menubar/MenuBar.js new file mode 100644 index 0000000000..967136683e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/menubar/MenuBar.js @@ -0,0 +1,30 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.menubar.MenuBar", qx.ui.toolbar.ToolBar, +function() { + qx.ui.toolbar.ToolBar.call(this); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractBar.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractBar.js new file mode 100755 index 0000000000..21f643a3b8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractBar.js @@ -0,0 +1,131 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.AbstractBar", qx.ui.layout.BoxLayout, +function() +{ + qx.ui.layout.BoxLayout.call(this); + + this._manager = new qx.manager.selection.RadioManager; + + this.addEventListener("mousewheel", this._onmousewheel); +}); + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._lastDate = (new Date(0)).valueOf(); + +qx.Proto._onmousewheel = function(e) +{ + // Make it a bit lazier than it could be + // Hopefully this is a better behaviour for fast scrolling users + var vDate = (new Date).valueOf(); + + if ((vDate - 50) < this._lastDate) { + return; + } + + this._lastDate = vDate; + + var vManager = this.getManager(); + var vItems = vManager.getEnabledItems(); + var vPos = vItems.indexOf(vManager.getSelected()); + + if (this.getWheelDelta(e) > 0) + { + var vNext = vItems[vPos+1]; + + if (!vNext) { + vNext = vItems[0]; + } + } + else if (vPos > 0) + { + var vNext = vItems[vPos-1]; + + if (!vNext) { + vNext = vItems[0]; + } + } + else + { + vNext = vItems[vItems.length-1]; + } + + vManager.setSelected(vNext); +} + +qx.Proto.getWheelDelta = function(e) { + return e.getWheelDelta(); +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + this.removeEventListener("mousewheel", this._onmousewheel); + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractButton.js new file mode 100755 index 0000000000..3a130a1268 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractButton.js @@ -0,0 +1,222 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + + ************************************************************************ */ + +/* ************************************************************************ + + + ************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.AbstractButton", qx.ui.basic.Atom, +function(vText, vIcon, vIconWidth, vIconHeight, vFlash) { + qx.ui.basic.Atom.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); + + this.setTabIndex(1); + + // ************************************************************************ + // MOUSE EVENTS + // ************************************************************************ + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mouseout", this._onmouseout); + this.addEventListener("mousedown", this._onmousedown); + + // ************************************************************************ + // KEY EVENTS + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- + */ + +/*! + If this tab is the currently selected/active one + */ +qx.OO.addProperty({ name : "checked", type : "boolean", defaultValue : false }); + +/*! + The attached page of this tab + */ +qx.OO.addProperty({ name : "page", type : "object" }); + +/*! + The assigned qx.manager.selection.RadioManager which handles the switching between registered buttons + */ +qx.OO.addProperty({ name : "manager", type : "object", instance : "qx.manager.selection.RadioManager", allowNull : true }); + +/*! + The name of the radio group. All the radio elements in a group (registered by the same manager) + have the same name (and could have a different value). + */ +qx.OO.addProperty({ name : "name", type : "string" }); + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- + */ + +qx.Proto.getView = function() { + return this.getParent().getParent(); +}; + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- + */ + +qx.Proto._modifyManager = function(propValue, propOldValue, propData) { + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) { + propValue.add(this); + } + + return true; +}; + +qx.Proto._modifyParent = function(propValue, propOldValue, propData) { + if (propOldValue) { + propOldValue.getManager().remove(this); + } + + if (propValue) { + propValue.getManager().add(this); + } + + return qx.ui.basic.Atom.prototype._modifyParent.call(this, propValue, propOldValue, propData); +}; + +qx.Proto._modifyPage = function(propValue, propOldValue, propData) { + if (propOldValue) { + propOldValue.setButton(null); + } + + if (propValue) { + propValue.setButton(this); + this.getChecked() ? propValue.show() : propValue.hide(); + } + + return true; +}; + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) { + if (this._hasParent) { + var vManager = this.getManager(); + if (vManager) { + vManager.handleItemChecked(this, propValue); + } + } + + propValue ? this.addState("checked") : this.removeState("checked"); + + var vPage = this.getPage(); + if (vPage) { + this.getChecked() ? vPage.show() : vPage.hide(); + } + + return true; +}; + +qx.Proto._modifyName = function(propValue, propOldValue, propData) { + if (this.getManager()) { + this.getManager().setName(propValue); + } + + return true; +}; + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- + */ + +qx.Proto._onmousedown = function(e) { + this.setChecked(true); +}; + +qx.Proto._onmouseover = function(e) { + this.addState("over"); +}; + +qx.Proto._onmouseout = function(e) { + this.removeState("over"); +}; + +qx.Proto._onkeydown = function(e) {}; +qx.Proto._onkeypress = function(e) {}; + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- + */ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + + // ************************************************************************ + // MOUSE EVENTS + // ************************************************************************ + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mouseout", this._onmouseout); + this.removeEventListener("mousedown", this._onmousedown); + + + // ************************************************************************ + // KEY EVENTS + // ************************************************************************ + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + + + return qx.ui.basic.Atom.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPage.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPage.js new file mode 100755 index 0000000000..fcf8a44029 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPage.js @@ -0,0 +1,77 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.AbstractPage", qx.ui.layout.CanvasLayout, +function(vButton) +{ + qx.ui.layout.CanvasLayout.call(this); + + if (vButton != null) { + this.setButton(vButton); + } +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The attached tab of this page. +*/ +qx.OO.addProperty({ name : "button", type : "object" }); + +/*! + Make element displayed (if switched to true the widget will be created, if needed, too). + Instead of qx.ui.core.Widget, the default is false here. +*/ +qx.OO.changeProperty({ name : "display", type : "boolean", defaultValue : false }); + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyButton = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.setPage(null); + } + + if (propValue) { + propValue.setPage(this); + } + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPageView.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPageView.js new file mode 100755 index 0000000000..1119bd109c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPageView.js @@ -0,0 +1,86 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.AbstractPageView", qx.ui.layout.BoxLayout, +function(vBarClass, vPaneClass) +{ + qx.ui.layout.BoxLayout.call(this); + + this._bar = new vBarClass; + this._pane = new vPaneClass; + + this.add(this._bar, this._pane); + this.setOrientation("vertical"); +}); + + + + + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Proto.getPane = function() { + return this._pane; +} + +qx.Proto.getBar = function() { + return this._bar; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._bar) + { + this._bar.dispose(); + this._bar = null; + } + + if (this._pane) + { + this._pane.dispose(); + this._pane = null; + } + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPane.js new file mode 100755 index 0000000000..6a97fef36e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/AbstractPane.js @@ -0,0 +1,29 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.AbstractPane", qx.ui.layout.CanvasLayout, +function() { + qx.ui.layout.CanvasLayout.call(this); +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Bar.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Bar.js new file mode 100644 index 0000000000..4a0cd8cd1a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Bar.js @@ -0,0 +1,77 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_buttonview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.buttonview.Bar", qx.ui.pageview.AbstractBar, +function() { + qx.ui.pageview.AbstractBar.call(this); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "bar-view-bar" }); + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getWheelDelta = function(e) +{ + var vWheelDelta = e.getWheelDelta(); + + switch(this.getParent().getBarPosition()) + { + case "left": + case "right": + vWheelDelta *= -1; + } + + return vWheelDelta; +} + + + + + +/* +--------------------------------------------------------------------------- + APPEARANCE ADDITIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyStateAppearance = function() +{ + var vPos = this.getParent().getBarPosition(); + + this._states.barLeft = vPos === "left"; + this._states.barRight = vPos === "right"; + this._states.barTop = vPos === "top"; + this._states.barBottom = vPos === "bottom"; + + qx.ui.pageview.AbstractButton.prototype._applyStateAppearance.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Button.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Button.js new file mode 100644 index 0000000000..7d2ee71fa0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Button.js @@ -0,0 +1,122 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_buttonview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.buttonview.Button", qx.ui.pageview.AbstractButton, +function(vText, vIcon, vIconWidth, vIconHeight, vFlash) { + qx.ui.pageview.AbstractButton.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "bar-view-button" }); + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeypress = function(e) +{ + switch(this.getView().getBarPosition()) + { + case "top": + case "bottom": + switch(e.getKeyIdentifier()) + { + case "Left": + var vPrevious = true; + break; + + case "Right": + var vPrevious = false; + break; + + default: + return; + } + + break; + + case "left": + case "right": + switch(e.getKeyIdentifier()) + { + case "Up": + var vPrevious = true; + break; + + case "Down": + var vPrevious = false; + break; + + default: + return; + } + + break; + + default: + return; + } + + var vChild = vPrevious ? this.isFirstChild() ? this.getParent().getLastChild() : this.getPreviousSibling() : this.isLastChild() ? this.getParent().getFirstChild() : this.getNextSibling(); + + // focus next/previous button + vChild.setFocused(true); + + // and naturally also check it + vChild.setChecked(true); +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + APPEARANCE ADDITIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyStateAppearance = function() +{ + var vPos = this.getView().getBarPosition(); + + this._states.barLeft = vPos === "left"; + this._states.barRight = vPos === "right"; + this._states.barTop = vPos === "top"; + this._states.barBottom = vPos === "bottom"; + + qx.ui.pageview.AbstractButton.prototype._applyStateAppearance.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/ButtonView.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/ButtonView.js new file mode 100644 index 0000000000..4e3521858c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/ButtonView.js @@ -0,0 +1,100 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_buttonview) + +************************************************************************ */ + +/*! + One of the widgets which could be used to structurize the interface. + + qx.ui.pageview.buttonview.ButtonView creates the typical apple-like tabview-replacements which could also + be found in more modern versions of the settings dialog in Mozilla Firefox. +*/ +qx.OO.defineClass("qx.ui.pageview.buttonview.ButtonView", qx.ui.pageview.AbstractPageView, +function() +{ + qx.ui.pageview.AbstractPageView.call(this, qx.ui.pageview.buttonview.Bar, qx.ui.pageview.buttonview.Pane); + + this.setOrientation("vertical"); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "barPosition", type : "string", defaultValue : "top", possibleValues : [ "top", "right", "bottom", "left" ] }); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "bar-view" }); + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyBarPosition = function(propValue, propOldValue, propData) +{ + var vBar = this._bar; + + // move bar around and change orientation + switch(propValue) + { + case "top": + vBar.moveSelfToBegin(); + this.setOrientation("vertical"); + break; + + case "bottom": + vBar.moveSelfToEnd(); + this.setOrientation("vertical"); + break; + + case "left": + vBar.moveSelfToBegin(); + this.setOrientation("horizontal"); + break; + + case "right": + vBar.moveSelfToEnd(); + this.setOrientation("horizontal"); + break; + } + + // force re-apply of states for bar and pane + this._addChildrenToStateQueue(); + + // force re-apply of states for all tabs + vBar._addChildrenToStateQueue(); + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Page.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Page.js new file mode 100644 index 0000000000..b69fa88407 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Page.js @@ -0,0 +1,32 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_buttonview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.buttonview.Page", qx.ui.pageview.AbstractPage, +function(vButton) { + qx.ui.pageview.AbstractPage.call(this, vButton); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "bar-view-page" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Pane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Pane.js new file mode 100644 index 0000000000..df8b1a59ea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/buttonview/Pane.js @@ -0,0 +1,53 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_buttonview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.buttonview.Pane", qx.ui.pageview.AbstractPane, +function() { + qx.ui.pageview.AbstractPane.call(this); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "bar-view-pane" }); + + + + + + + +/* +--------------------------------------------------------------------------- + APPEARANCE ADDITIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyStateAppearance = function() +{ + var vPos = this.getParent().getBarPosition(); + + this._states.barHorizontal = vPos === "top" || vPos === "bottom"; + + qx.ui.pageview.AbstractButton.prototype._applyStateAppearance.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Bar.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Bar.js new file mode 100644 index 0000000000..0ddc9a5909 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Bar.js @@ -0,0 +1,35 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tabview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.tabview.Bar", qx.ui.pageview.AbstractBar, +function() +{ + qx.ui.pageview.AbstractBar.call(this); + + this.setZIndex(2); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tab-view-bar" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Button.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Button.js new file mode 100644 index 0000000000..c9f22b226c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Button.js @@ -0,0 +1,192 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tabview) +#embed(qx.icontheme/16/actions/dialog-cancel.png) + +************************************************************************ */ + +/** + * @event closetab {qx.event.type.DataEvent} + */ +qx.OO.defineClass("qx.ui.pageview.tabview.Button", qx.ui.pageview.AbstractButton, +function(vText, vIcon, vIconWidth, vIconHeight, vFlash) { + qx.ui.pageview.AbstractButton.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tab-view-button" }); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- + */ + +/*! + default Close Tab Button + */ +qx.OO.addProperty({ name : "showCloseButton", type : "boolean", defaultValue : false }); + +/*! + Close Tab Icon + */ +qx.OO.addProperty({ name : "closeButtonImage", type : "string", defaultValue : "icon/16/actions/dialog-cancel.png"}); + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) +{ + var identifier = e.getKeyIdentifier(); + if (identifier == "Enter" || identifier == "Space") { + // there is no toggeling, just make it checked + this.setChecked(true); + } +}; + + +qx.Proto._onkeypress = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Left": + var vPrev = this.getPreviousActiveSibling(); + if (vPrev && vPrev != this) + { + // we want to enable the outline border, because + // the user used the keyboard for activation + delete qx.event.handler.FocusHandler.mouseFocus; + + // focus previous tab + vPrev.setFocused(true); + + // and naturally make it also checked + vPrev.setChecked(true); + } + break; + + case "Right": + var vNext = this.getNextActiveSibling(); + if (vNext && vNext != this) + { + // we want to enable the outline border, because + // the user used the keyboard for activation + delete qx.event.handler.FocusHandler.mouseFocus; + + // focus next tab + vNext.setFocused(true); + + // and naturally make it also checked + vNext.setChecked(true); + } + break; + } +}; + + +qx.Proto._ontabclose = function(e){ + this.createDispatchDataEvent("closetab", this); +} + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- + */ + +qx.Proto._modifyShowCloseButton = function(propValue, propOldValue, propData) { + + // if no image exists, then create one + if (!this._closeButtonImage) { + this._closeButtonImage = new qx.ui.basic.Image(this.getCloseButtonImage()); + } + if (propValue) { + this._closeButtonImage.addEventListener("click", this._ontabclose, this); + this.add(this._closeButtonImage); + } else { + this.remove(this._closeButtonImage); + this._closeButtonImage.removeEventListener("click", this._ontabclose); + } + + return true; +} + +qx.Proto._modifyCloseButtonImage = function(propValue, propOldValue, propData) { + if (this._closeButtonImage) { + this._closeButtonImage.setSource(propValue); + } + + return true; +} + + + +/* +--------------------------------------------------------------------------- + APPEARANCE ADDITIONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._applyStateAppearance = function() +{ + this._states.firstChild = this.isFirstVisibleChild(); + this._states.lastChild = this.isLastVisibleChild(); + this._states.alignLeft = this.getView().getAlignTabsToLeft(); + this._states.barTop = this.getView().getPlaceBarOnTop(); + + qx.ui.pageview.AbstractButton.prototype._applyStateAppearance.call(this); +} + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- + */ + +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return; + } + + if(this._closeButtonImage){ + this._closeButtonImage.dispose(); + this._closeButtonImage = null; + } + + return qx.ui.pageview.AbstractButton.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Page.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Page.js new file mode 100644 index 0000000000..beac8fe41c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Page.js @@ -0,0 +1,32 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tabview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.tabview.Page", qx.ui.pageview.AbstractPage, +function(vButton) { + qx.ui.pageview.AbstractPage.call(this, vButton); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tab-view-page" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Pane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Pane.js new file mode 100644 index 0000000000..439d149d50 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/Pane.js @@ -0,0 +1,35 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tabview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.tabview.Pane", qx.ui.pageview.AbstractPane, +function() +{ + qx.ui.pageview.AbstractPane.call(this); + + this.setZIndex(1); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tab-view-pane" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/TabView.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/TabView.js new file mode 100644 index 0000000000..c0093b295a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/pageview/tabview/TabView.js @@ -0,0 +1,88 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tabview) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.pageview.tabview.TabView", qx.ui.pageview.AbstractPageView, +function() { + qx.ui.pageview.AbstractPageView.call(this, qx.ui.pageview.tabview.Bar, qx.ui.pageview.tabview.Pane); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tab-view" }); + +qx.OO.addProperty({ name : "alignTabsToLeft", type : "boolean", defaultValue : true }); +qx.OO.addProperty({ name : "placeBarOnTop", type : "boolean", defaultValue : true }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyAlignTabsToLeft = function(propValue, propOldValue, propData) +{ + var vBar = this._bar; + + vBar.setHorizontalChildrenAlign(propValue ? "left" : "right"); + + // force re-apply of states for all tabs + vBar._addChildrenToStateQueue(); + + return true; +} + +qx.Proto._modifyPlaceBarOnTop = function(propValue, propOldValue, propData) +{ + // This does not work if we use flexible zones + // this.setReverseChildrenOrder(!propValue); + + var vBar = this._bar; + + // move bar around + if (propValue) { + vBar.moveSelfToBegin(); + } else { + vBar.moveSelfToEnd(); + } + + // force re-apply of states for all tabs + vBar._addChildrenToStateQueue(); + + return true; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/Popup.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/Popup.js new file mode 100644 index 0000000000..edf6cd4065 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/Popup.js @@ -0,0 +1,334 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_popup) +#optional(qx.manager.object.MenuManager) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.popup.Popup", qx.ui.layout.CanvasLayout, +function() +{ + qx.ui.layout.CanvasLayout.call(this); + + this.setZIndex(this._minZIndex); + + // Init Focus Handler + if (this._isFocusRoot) { + this.activateFocusRoot(); + } +}); + +qx.Proto._isFocusRoot = true; + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "popup" }); + +/*! + Whether to let the system decide when to hide the popup. Setting + this to false gives you better control but it also requires you + to handle the closing of the popup. +*/ +qx.OO.addProperty({ name : "autoHide", type : "boolean", defaultValue : true }); + +/*! + Make element displayed (if switched to true the widget will be created, if needed, too). + Instead of qx.ui.core.Widget, the default is false here. +*/ +qx.OO.changeProperty({ name : "display", type : "boolean", defaultValue : false }); + +/*! + Center the popup on open +*/ +qx.OO.addProperty({ name : "centered", type : "boolean", defaultValue : false }); + +/** + * Whether the popup should be restricted to the visible area of the page when opened. + */ +qx.OO.addProperty({ name : "restrictToPageOnOpen", type : "boolean", defaultValue : true }); + + +qx.Proto._showTimeStamp = (new Date(0)).valueOf(); +qx.Proto._hideTimeStamp = (new Date(0)).valueOf(); + + +/** + * The minimum offset to the left of the page too keep when + * {@link #restrictToPageOnOpen} is true (in pixels). + */ +qx.Settings.setDefault("restrictToPageLeft", "0"); + +/** + * The minimum offset to the right of the page too keep when + * {@link #restrictToPageOnOpen} is true (in pixels). + */ +qx.Settings.setDefault("restrictToPageRight", "0"); + +/** + * The minimum offset to the top of the page too keep when + * {@link #restrictToPageOnOpen} is true (in pixels). + */ +qx.Settings.setDefault("restrictToPageTop", "0"); + +/** + * The minimum offset to the bottom of the page too keep when + * {@link #restrictToPageOnOpen} is true (in pixels). + */ +qx.Settings.setDefault("restrictToPageBottom", "0"); + + + + + +/* +--------------------------------------------------------------------------- + APPEAR/DISAPPEAR +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeAppear = function() +{ + qx.ui.layout.CanvasLayout.prototype._beforeAppear.call(this); + + if (this.getRestrictToPageOnOpen()) { + this._wantedLeft = this.getLeft(); + + if (this._wantedLeft != null) { + // Move the popup out of the view so its size could be calculated before + // it is positioned. + this.setLeft(10000); + if (this.getElement() != null) { + // The popup was already visible once before + // -> Move it immediately before it gets visible again + this.getElement().style.left = 10000; + } + } + } + + qx.manager.object.PopupManager.getInstance().add(this); + qx.manager.object.PopupManager.getInstance().update(this); + + this._showTimeStamp = (new Date).valueOf(); + this.bringToFront(); +} + +qx.Proto._beforeDisappear = function() +{ + qx.ui.layout.CanvasLayout.prototype._beforeDisappear.call(this); + + qx.manager.object.PopupManager.getInstance().remove(this); + + this._hideTimeStamp = (new Date).valueOf(); +} + +qx.Proto._afterAppear = function() { + qx.ui.layout.CanvasLayout.prototype._afterAppear.call(this); + + if (this.getRestrictToPageOnOpen()) { + var doc = qx.ui.core.ClientDocument.getInstance(); + var docWidth = doc.getClientWidth(); + var docHeight = doc.getClientHeight(); + var restrictToPageLeft = parseInt(qx.Settings.getValueOfClass("qx.ui.popup.Popup", "restrictToPageLeft")); + var restrictToPageRight = parseInt(qx.Settings.getValueOfClass("qx.ui.popup.Popup", "restrictToPageRight")); + var restrictToPageTop = parseInt(qx.Settings.getValueOfClass("qx.ui.popup.Popup", "restrictToPageTop")); + var restrictToPageBottom = parseInt(qx.Settings.getValueOfClass("qx.ui.popup.Popup", "restrictToPageBottom")); + var left = (this._wantedLeft == null) ? this.getLeft() : this._wantedLeft; + var top = this.getTop(); + var width = this.getBoxWidth(); + var height = this.getBoxHeight(); + + var oldLeft = this.getLeft(); + var oldTop = top; + + // NOTE: We check right and bottom first, because top and left should have + // priority, when both sides are violated. + if (left + width > docWidth - restrictToPageRight) { + left = docWidth - restrictToPageRight - width; + } + if (top + height > docHeight - restrictToPageBottom) { + top = docHeight - restrictToPageBottom - height; + } + if (left < restrictToPageLeft) { + left = restrictToPageLeft; + } + if (top < restrictToPageTop) { + top = restrictToPageTop; + } + + if (left != oldLeft || top != oldTop) { + var self = this; + window.setTimeout(function() { + self.setLeft(left); + self.setTop(top); + qx.ui.core.Widget.flushGlobalQueues(); + }, 0); + } + } +}; + + + + + +/* +--------------------------------------------------------------------------- + ACTIVE/INACTIVE +--------------------------------------------------------------------------- +*/ + +qx.Proto._makeActive = function() { + this.getFocusRoot().setActiveChild(this); +} + +qx.Proto._makeInactive = function() +{ + var vRoot = this.getFocusRoot(); + var vCurrent = vRoot.getActiveChild(); + + if (vCurrent == this) { + vRoot.setActiveChild(vRoot); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + ZIndex Positioning +--------------------------------------------------------------------------- +*/ + +qx.Proto._minZIndex = 1e6; + +qx.Proto.bringToFront = function() +{ + this.forceZIndex(Infinity); + this._sendTo(); +} + +qx.Proto.sendToBack = function() +{ + this.forceZIndex(-Infinity); + this._sendTo(); +} + +qx.Proto._sendTo = function() +{ + var vPopups = qx.lang.Object.getValues(qx.manager.object.PopupManager.getInstance().getAll()); + + if (qx.OO.isAvailable("qx.manager.object.MenuManager")) + { + var vMenus = qx.lang.Object.getValues(qx.manager.object.MenuManager.getInstance().getAll()); + var vAll = vPopups.concat(vMenus).sort(qx.util.Compare.byZIndex); + } + else + { + var vAll = vPopups.sort(qx.util.Compare.byZIndex); + } + + var vLength = vAll.length; + var vIndex = this._minZIndex; + + for (var i=0; i<vLength; i++) { + vAll[i].setZIndex(vIndex++); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + TIMESTAMP HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getShowTimeStamp = function() { + return this._showTimeStamp; +} + +qx.Proto.getHideTimeStamp = function() { + return this._hideTimeStamp; +} + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +/** + * Positions the popup relative to some reference element. + * @param el {var} Reference DOM element/widget. + * @param offsetX {Integer} Offset in pixels in X direction (optional). + * @param offsetY {Integer} Offset in pixels in Y direction (optional). + */ +qx.Proto.positionRelativeTo = function(el, offsetX, offsetY) +{ + if (el instanceof qx.ui.core.Widget) { + el = el.getElement(); + } + if (el) { + var gecko = qx.core.Client.getInstance().isGecko(); + var loc = qx.html.Location; + this.setLocation(loc.getClientAreaLeft(el) - (gecko ? qx.html.Style.getBorderLeft(el):0) + (offsetX || 0), + loc.getClientAreaTop(el) - (gecko ? qx.html.Style.getBorderTop(el):0) + (offsetY || 0)); + } else { + this.warn('Missing reference element'); + } +} + +qx.Proto.centerToBrowser = function() +{ + var d = qx.ui.core.ClientDocument.getInstance(); + + var left = (d.getClientWidth() - this.getBoxWidth()) / 2; + var top = (d.getClientHeight() - this.getBoxHeight()) / 2; + + this.setLeft(left < 0 ? 0 : left); + this.setTop(top < 0 ? 0 : top); +} + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this._showTimeStamp = null; + this._hideTimeStamp = null; + + return qx.ui.layout.CanvasLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/PopupAtom.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/PopupAtom.js new file mode 100644 index 0000000000..5dfe9ea746 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/PopupAtom.js @@ -0,0 +1,55 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_popup) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.popup.PopupAtom", qx.ui.popup.Popup, +function(vLabel, vIcon) +{ + qx.ui.popup.Popup.call(this); + + this._atom = new qx.ui.basic.Atom(vLabel, vIcon); + this._atom.setParent(this); +}); + +qx.Proto._isFocusRoot = false; + +qx.Proto.getAtom = function() { + return this._atom; +} + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._atom) + { + this._atom.dispose(); + this._atom = null; + } + + return qx.ui.popup.Popup.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/ToolTip.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/ToolTip.js new file mode 100644 index 0000000000..271ce2b1e4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/popup/ToolTip.js @@ -0,0 +1,257 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_popup) +#load(qx.manager.object.ToolTipManager) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.popup.ToolTip", qx.ui.popup.PopupAtom, +function(vLabel, vIcon) +{ + // ************************************************************************ + // INIT + // ************************************************************************ + + qx.ui.popup.PopupAtom.call(this, vLabel, vIcon); + + // Apply shadow + this.setStyleProperty("filter", "progid:DXImageTransform.Microsoft.Shadow(color='Gray', Direction=135, Strength=4)"); + + + // ************************************************************************ + // TIMER + // ************************************************************************ + + this._showTimer = new qx.client.Timer(this.getShowInterval()); + this._showTimer.addEventListener("interval", this._onshowtimer, this); + + this._hideTimer = new qx.client.Timer(this.getHideInterval()); + this._hideTimer.addEventListener("interval", this._onhidetimer, this); + + + // ************************************************************************ + // EVENTS + // ************************************************************************ + this.addEventListener("mouseover", this._onmouseover); + this.addEventListener("mouseout", this._onmouseover); +}); + +qx.Proto._minZIndex = 1e7; + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tool-tip" }); + +qx.OO.addProperty({ name : "hideOnHover", type : "boolean", defaultValue : true }); + +qx.OO.addProperty({ name : "mousePointerOffsetX", type : "number", defaultValue : 1 }); +qx.OO.addProperty({ name : "mousePointerOffsetY", type : "number", defaultValue : 20 }); + +qx.OO.addProperty({ name : "showInterval", type : "number", defaultValue : 1000 }); +qx.OO.addProperty({ name : "hideInterval", type : "number", defaultValue : 4000 }); + +qx.OO.addProperty({ name : "boundToWidget", type : "object", instance : "qx.ui.core.Widget" }); + + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyHideInterval = function(propValue, propOldValue, propData) +{ + this._hideTimer.setInterval(propValue); + return true; +} + +qx.Proto._modifyShowInterval = function(propValue, propOldValue, propData) +{ + this._showTimer.setInterval(propValue); + return true; +} + +qx.Proto._modifyBoundToWidget = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this.setParent(propValue.getTopLevelWidget()); + } + else if (propOldValue) + { + this.setParent(null); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + APPEAR/DISAPPEAR +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeAppear = function() +{ + qx.ui.popup.PopupAtom.prototype._beforeAppear.call(this); + + this._stopShowTimer(); + this._startHideTimer(); +} + +qx.Proto._beforeDisappear = function() { + qx.ui.popup.PopupAtom.prototype._beforeDisappear.call(this); + + this._stopHideTimer(); +} + + + + + + +/* +--------------------------------------------------------------------------- + TIMER +--------------------------------------------------------------------------- +*/ + +qx.Proto._startShowTimer = function() +{ + if(!this._showTimer.getEnabled()) { + this._showTimer.start(); + } +} + +qx.Proto._startHideTimer = function() +{ + if(!this._hideTimer.getEnabled()) { + this._hideTimer.start(); + } +} + +qx.Proto._stopShowTimer = function() +{ + if(this._showTimer.getEnabled()) { + this._showTimer.stop(); + } +} + +qx.Proto._stopHideTimer = function() +{ + if(this._hideTimer.getEnabled()) { + this._hideTimer.stop(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseover = function(e) +{ + if(this.getHideOnHover()) { + this.hide(); + } +} + +qx.Proto._onshowtimer = function(e) +{ + this.setLeft(qx.event.type.MouseEvent.getPageX() + this.getMousePointerOffsetX()); + this.setTop(qx.event.type.MouseEvent.getPageY() + this.getMousePointerOffsetY()); + + this.show(); + + // we need a manual flushing because it could be that + // there is currently no event which do this for us + // and so show the tooltip. + qx.ui.core.Widget.flushGlobalQueues(); + + return true; +} + +qx.Proto._onhidetimer = function(e) { + return this.hide(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if(this.getDisposed()) { + return; + } + + this.removeEventListener("mouseover", this._onmouseover); + this.removeEventListener("mouseout", this._onmouseover); + + if (this._showTimer) + { + this._showTimer.removeEventListener("interval", this._onshowtimer, this); + this._showTimer.dispose(); + this._showTimer = null; + } + + if (this._hideTimer) + { + this._hideTimer.removeEventListener("interval", this._onhidetimer, this); + this._hideTimer.dispose(); + this._hideTimer = null; + } + + return qx.ui.popup.PopupAtom.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/resizer/Resizer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/resizer/Resizer.js new file mode 100755 index 0000000000..1141534eb2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/resizer/Resizer.js @@ -0,0 +1,419 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * David Perez (david-perez) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_resizer) + +************************************************************************ */ + +/** + * This class acts as a wrapper for other child, and allows it to be resized (not moved), normally in + * the right and/or bottom directions. Child can be e.g. a qx.ui.form.TextArea, + * qx.ui.table.Table or qx.ui.form.List. It is an alternative to splitters. + */ +qx.OO.defineClass('qx.ui.resizer.Resizer', qx.ui.layout.CanvasLayout, +function(child) +{ + qx.ui.layout.CanvasLayout.call(this); + + this._frame = new qx.ui.basic.Terminator; + this._frame.setAppearance("resizer-frame"); + + this._registerResizeEvents(); + + this.setAppearance('resizer'); + this.setResizeableWest(false); + this.setResizeableNorth(false); + + this.setMinWidth("auto"); + this.setMinHeight("auto"); + this.auto(); + + if (child) + { + // Remove child border, as the resizer has already its own border. + child.setBorder(new qx.renderer.border.Border(0)); + this.add(this._child = child); + } +}); + + + + + +/*! + If the window is resizeable in the left direction. +*/ +qx.OO.addProperty({ name : "resizeableWest", type : "boolean", defaultValue : true }); +/*! + If the window is resizeable in the top direction. +*/ +qx.OO.addProperty({ name : "resizeableNorth", type : "boolean", defaultValue : true }); +/*! + If the window is resizeable in the right direction. +*/ +qx.OO.addProperty({ name : "resizeableEast", type : "boolean", defaultValue : true }); +/*! + If the window is resizeable in the bottom direction. +*/ +qx.OO.addProperty({ name : "resizeableSouth", type : "boolean", defaultValue : true }); + +/*! + If the window is resizeable +*/ +qx.OO.addPropertyGroup({ name : "resizeable", members : [ "west", "north", "east", "south" ], mode : "shorthand" }); + +/*! + The resize method to use +*/ +qx.OO.addProperty({ name : "resizeMethod", type : "string", defaultValue : "frame", possibleValues : [ "opaque", "lazyopaque", "frame", "translucent" ] }); + +/*! + The resize method to use +*/ +qx.OO.addProperty({ name : "resizeMethod", type : "string", defaultValue : "frame", possibleValues : [ "opaque", "lazyopaque", "frame", "translucent" ] }); + + + + + + +/** + * Adjust so that it returns a boolean instead of an array. + * @return {Boolean} + */ +qx.Proto.isResizeable = qx.Proto.getResizeable = function() { + return this.getResizeableWest() || this.getResizeableEast() || this.getResizeableNorth() || this.getResizeableSouth(); +} + +qx.Proto._registerResizeEvents = function() { + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); + this.addEventListener("mousemove", this._onmousemove); +} + +qx.Proto._onmousedown = function(e) +{ + if (this._resizeNorth || this._resizeSouth || this._resizeWest || this._resizeEast) + { + // enable capturing + this.setCapture(true); + + // activate global cursor + this.getTopLevelWidget().setGlobalCursor(this.getCursor()); + + // caching element + var el = this.getElement(); + + // measuring and caching of values for resize session + var pa = this.getTopLevelWidget(); + var pl = pa.getElement(); + + var l = qx.html.Location.getPageAreaLeft(pl); + var t = qx.html.Location.getPageAreaTop(pl); + var r = qx.html.Location.getPageAreaRight(pl); + var b = qx.html.Location.getPageAreaBottom(pl); + + // handle frame and translucently + switch(this.getResizeMethod()) + { + case "translucent": + this.setOpacity(0.5); + break; + + case "frame": + var f = this._frame; + + if (f.getParent() != pa) + { + f.setParent(pa); + qx.ui.core.Widget.flushGlobalQueues(); + } + + f._applyRuntimeLeft(qx.html.Location.getPageBoxLeft(el) - l); + f._applyRuntimeTop(qx.html.Location.getPageBoxTop(el) - t); + + f._applyRuntimeWidth(qx.html.Dimension.getBoxWidth(el)); + f._applyRuntimeHeight(qx.html.Dimension.getBoxHeight(el)); + + f.setZIndex(this.getZIndex() + 1); + + break; + } + + // create resize session + var s = this._resizeSession = {}; + var minRef = this._child; + + if (this._resizeWest) + { + s.boxWidth = qx.html.Dimension.getBoxWidth(el); + s.boxRight = qx.html.Location.getPageBoxRight(el); + } + + if (this._resizeWest || this._resizeEast) + { + s.boxLeft = qx.html.Location.getPageBoxLeft(el); + + s.parentAreaOffsetLeft = l; + s.parentAreaOffsetRight = r; + + s.minWidth = minRef.getMinWidthValue(); + s.maxWidth = minRef.getMaxWidthValue(); + } + + if (this._resizeNorth) + { + s.boxHeight = qx.html.Dimension.getBoxHeight(el); + s.boxBottom = qx.html.Location.getPageBoxBottom(el); + } + + if (this._resizeNorth || this._resizeSouth) + { + s.boxTop = qx.html.Location.getPageBoxTop(el); + + s.parentAreaOffsetTop = t; + s.parentAreaOffsetBottom = b; + + s.minHeight = minRef.getMinHeightValue(); + s.maxHeight = minRef.getMaxHeightValue(); + } + } + else + { + // cleanup resize session + delete this._resizeSession; + } + + // stop event + e.stopPropagation(); +} + +qx.Proto._onmouseup = function(e) +{ + var s = this._resizeSession; + + if (s) + { + // disable capturing + this.setCapture(false); + + // deactivate global cursor + this.getTopLevelWidget().setGlobalCursor(null); + + // sync sizes to frame + switch(this.getResizeMethod()) + { + case "frame": + var o = this._frame; + if (!(o && o.getParent())) { + break; + } + // no break here + + case "lazyopaque": + if (s.lastLeft != null) { + this.setLeft(s.lastLeft); + } + + if (s.lastTop != null) { + this.setTop(s.lastTop); + } + + if (s.lastWidth != null) { + var child = this.getChildren()[0]; + if (child) { + child.setWidth(s.lastWidth); + } + } + + if (s.lastHeight != null) { + var child = this.getChildren()[0]; + if (child) { + child.setHeight(s.lastHeight); + } + } + + if (this.getResizeMethod() == "frame") { + this._frame.setParent(null); + } + break; + + case "translucent": + this.setOpacity(null); + break; + } + + // cleanup session + delete this._resizeNorth; + delete this._resizeEast; + delete this._resizeSouth; + delete this._resizeWest; + + delete this._resizeSession; + } + + // stop event + e.stopPropagation(); +} + +qx.Proto._near = function(p, e) { + return e > (p - 5) && e < (p + 5); +} + +qx.Proto._onmousemove = function(e) +{ + var s = this._resizeSession; + + if (s) + { + if (this._resizeWest) + { + s.lastWidth = qx.lang.Number.limit(s.boxWidth + s.boxLeft - Math.max(e.getPageX(), s.parentAreaOffsetLeft), s.minWidth, s.maxWidth); + s.lastLeft = s.boxRight - s.lastWidth - s.parentAreaOffsetLeft; + } + else if (this._resizeEast) + { + s.lastWidth = qx.lang.Number.limit(Math.min(e.getPageX(), s.parentAreaOffsetRight) - s.boxLeft, s.minWidth, s.maxWidth); + } + + if (this._resizeNorth) + { + s.lastHeight = qx.lang.Number.limit(s.boxHeight + s.boxTop - Math.max(e.getPageY(), s.parentAreaOffsetTop), s.minHeight, s.maxHeight); + s.lastTop = s.boxBottom - s.lastHeight - s.parentAreaOffsetTop; + } + else if (this._resizeSouth) + { + s.lastHeight = qx.lang.Number.limit(Math.min(e.getPageY(), s.parentAreaOffsetBottom) - s.boxTop, s.minHeight, s.maxHeight); + } + + switch(this.getResizeMethod()) + { + case "opaque": + case "translucent": + if (this._resizeWest || this._resizeEast) + { + this.setWidth(s.lastWidth); + + if (this._resizeWest) { + this.setLeft(s.lastLeft); + } + } + + if (this._resizeNorth || this._resizeSouth) + { + this.setHeight(s.lastHeight); + + if (this._resizeNorth) { + this.setTop(s.lastTop); + } + } + + break; + + default: + var o = this.getResizeMethod() == "frame" ? this._frame : this; + + if (this._resizeWest || this._resizeEast) + { + o._applyRuntimeWidth(s.lastWidth); + + if (this._resizeWest) { + o._applyRuntimeLeft(s.lastLeft); + } + } + + if (this._resizeNorth || this._resizeSouth) + { + o._applyRuntimeHeight(s.lastHeight); + + if (this._resizeNorth) { + o._applyRuntimeTop(s.lastTop); + } + } + } + } + else + { + var resizeMode = ""; + var el = this.getElement(); + + this._resizeNorth = this._resizeSouth = this._resizeWest = this._resizeEast = false; + + if (this._near(qx.html.Location.getPageBoxTop(el), e.getPageY())) + { + if (this.getResizeableNorth()) { + resizeMode = "n"; + this._resizeNorth = true; + } + } + else if (this._near(qx.html.Location.getPageBoxBottom(el), e.getPageY())) + { + if (this.getResizeableSouth()) { + resizeMode = "s"; + this._resizeSouth = true; + } + } + + if (this._near(qx.html.Location.getPageBoxLeft(el), e.getPageX())) + { + if (this.getResizeableWest()) { + resizeMode += "w"; + this._resizeWest = true; + } + } + else if (this._near(qx.html.Location.getPageBoxRight(el), e.getPageX())) + { + if (this.getResizeableEast()) { + resizeMode += "e"; + this._resizeEast = true; + } + } + + if (this._resizeNorth || this._resizeSouth || this._resizeWest || this._resizeEast) + { + this.setCursor(resizeMode + "-resize"); + } + else + { + this.setCursor(null); + } + } + + // stop event + e.stopPropagation(); +} + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._frame) + { + this._frame.dispose(); + this._frame = null; + } + + return qx.ui.layout.CanvasLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/HorizontalSplitPane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/HorizontalSplitPane.js new file mode 100644 index 0000000000..6ff06929d5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/HorizontalSplitPane.js @@ -0,0 +1,60 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Volker Pauli + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_splitpane) + +************************************************************************ */ + +/** + * + * Creates a new instance of a horizontal SplitPane.<br /><br /> + * + * new qx.ui.splitpane.HorizontalSplitPane()<br /> + * new qx.ui.splitpane.HorizontalSplitPane(firstSize, secondSize) + * + * @param firstSize {String} The size of the left pane. Allowed values are any by {@link qx.ui.core.Widget} supported unit. + * @param secondSize {String} The size of the right pane. Allowed values are any by {@link qx.ui.core.Widget} supported unit. + */ +qx.OO.defineClass("qx.ui.splitpane.HorizontalSplitPane", qx.ui.splitpane.SplitPane, +function(firstSize, secondSize) { + qx.ui.splitpane.SplitPane.call(this, "horizontal", firstSize, secondSize); +}); + + + + + +/* +------------------------------------------------------------------------------------ + DISPOSER +------------------------------------------------------------------------------------ + */ + +/** + * Garbage collection + */ +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.ui.splitpane.SplitPane.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/SplitPane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/SplitPane.js new file mode 100644 index 0000000000..3ed9d4b766 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/SplitPane.js @@ -0,0 +1,762 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Volker Pauli (vpauli) + * Sebastian Werner (wpbasti) + * Carsten Lergenmueller (carstenL) + + ************************************************************************ */ + +/* ************************************************************************ + +#module(ui_splitpane) +#embed(qx.widgettheme/splitpane/*) + + ************************************************************************ */ + + +/** + * Creates a new instance of a SplitPane. It allows the user to dynamically resize + * the areas dropping the border between. + * + * new qx.ui.splitpane.SplitPane(orientation) + * new qx.ui.splitpane.SplitPane(orientation, firstSize, secondSize) + * + * @param orientation {String} The orientation of the splitpane control. Allowed values are "horizontal" (default) and "vertical". This is the same type as used in {@link qx.ui.layout.BoxLayout#orientation}. + * @param firstSize {String} The size of the left (top) pane. Allowed values are any by {@link qx.ui.core.Widget} supported unit. + * @param secondSize {String} The size of the right (bottom) pane. Allowed values are any by {@link qx.ui.core.Widget} supported unit. + */ +qx.OO.defineClass("qx.ui.splitpane.SplitPane", qx.ui.layout.CanvasLayout, +function(orientation, firstSize, secondSize) +{ + qx.ui.layout.CanvasLayout.call(this); + + // CREATE INNER BOX LAYOUT + var box = this._box = new qx.ui.layout.BoxLayout; + box.setEdge(0); + this.add(box); + + /* + + the splitpane itself is a boxlayout resides on top of a canvas for easier computing of positional values + + --------------------------------------------------------------------------------------- + | canvas | + | ----------------------------------------------------------------------------------- | + | | box | | + | | --------------------------- --- ----------------------------------------------- | | + | | | | | | | | | | + | | | firstArea | |s| | secondArea | | | + | | | | |p| | | | | + | | | | |l| | | | | + | | | | |i| | | | | + | | | | |t| | | | | + | | | | |t| | | | | + | | | | |e| | | | | + | | | | |r| | | | | + | | | | | | | | | | + | | --------------------------- --- ----------------------------------------------- | | + | ----------------------------------------------------------------------------------- | + | | + --------------------------------------------------------------------------------------- + + */ + + // CREATE SLIDER + this._slider = new qx.ui.layout.CanvasLayout; + this._slider.setAppearance("splitpane-slider"); + this._slider.setStyleProperty("fontSize", "0px"); + this._slider.setStyleProperty("lineHeight", "0px"); + this._slider.hide(); + this._slider._pane = this; + this.add(this._slider); + + // CREATE SPLITTER + this._splitter = new qx.ui.layout.CanvasLayout; + this._splitter.setStyleProperty("fontSize", "0px"); + this._splitter.setStyleProperty("lineHeight", "0px"); + this._splitter.setAppearance("splitpane-splitter"); + this._splitter._pane = this; + + // PATCH METHODS + this._slider._applyRuntimeLeft = this._splitter._applyRuntimeLeft = this._applyRuntimeLeftWrapper; + this._slider._applyRuntimeTop = this._splitter._applyRuntimeTop = this._applyRuntimeTopWrapper; + + // CREATE KNOB + this._knob = new qx.ui.basic.Image; + this._knob.setAppearance("splitpane-knob"); + this._knob.setVisibility(false); + this.add(this._knob); + + // CREATE AREAS + this._firstArea = new qx.ui.layout.CanvasLayout; + this._secondArea = new qx.ui.layout.CanvasLayout; + + // FILL BOX + box.add(this._firstArea, this._splitter, this._secondArea); + + // APPLY DIMENSIONS + this.setFirstSize(firstSize || "1*"); + this.setSecondSize(secondSize || "1*"); + + // APPLY ORIENTATION + this.setOrientation(orientation || "horizontal"); +}); + + + + + + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- + */ + +/** + * Appearance change + */ +qx.OO.changeProperty({ name : "appearance", defaultValue : "splitpane" }); + +/** + * Show the knob + */ +qx.OO.addProperty({ name : "showKnob", type : "boolean", allowNull : false, defaultValue : false }); + +/** + * The layout method for the splitpane. If true, the content will updated immediatly. + */ +qx.OO.addProperty({ name : "liveResize", type : "boolean", allowNull : false, defaultValue : false, getAlias : "isLiveResize"}); + +/** + * The orientation of the splitpane control. Allowed values are "horizontal" (default) and "vertical". + */ +qx.OO.addProperty({ name : "orientation", type : "string", possibleValues : [ "horizontal", "vertical" ] }); + +/** + * The size of the first (left/top) area. + */ +qx.OO.addProperty({ name : "firstSize" }); + +/** + * The size of the second (right/bottom) area. + */ +qx.OO.addProperty({ name : "secondSize" }); + +/** + * Size of the splitter + */ +qx.OO.addProperty({ name : "splitterSize", defaultValue : 4 }); + + + + + + + +/* +--------------------------------------------------------------------------- + PUBLIC METHODS +--------------------------------------------------------------------------- +*/ + + +/** + * adds one or more widget(s) to the left pane + * + *@param widget {qx.ui.core.Parent} + */ +qx.Proto.addLeft = function() { + var c = this.getFirstArea(); + return c.add.apply(c, arguments); +} + +/** + * adds one or more widget(s) to the top pane + * + *@param widget {qx.ui.core.Parent} + */ +qx.Proto.addTop = function() { + var c = this.getFirstArea(); + return c.add.apply(c, arguments); +} + +/** + * adds one or more widget(s) to the right pane + * + *@param widget {qx.ui.core.Parent} + */ +qx.Proto.addRight = function() { + var c = this.getSecondArea(); + return c.add.apply(c, arguments); +} + +/** + * adds one or more widget(s) to the bottom pane + * + *@param widget {qx.ui.core.Parent} + */ +qx.Proto.addBottom = function() { + var c = this.getSecondArea(); + return c.add.apply(c, arguments); +} + +/** + * Returns the splitter. + * + * @return {qx.ui.core.Widget} The splitter. + */ +qx.Proto.getSplitter = function() { + return this._splitter; +} + +/** + * Returns the knob. + * + * @return {qx.ui.core.Widget} The knob. + */ +qx.Proto.getKnob = function() { + return this._knob; +} + + + + + + +/** + * Returns the left area (CanvasLayout) + * + * @return {qx.ui.layout.CanvasLayout} + */ +qx.Proto.getLeftArea = function() { + return this.getFirstArea(); +} + +/** + * Returns the top area (CanvasLayout) + * + * @return {qx.ui.layout.CanvasLayout} + */ +qx.Proto.getTopArea = function() { + return this.getFirstArea(); +} + +/** + * Returns the right area (CanvasLayout) + * + * @return {qx.ui.layout.CanvasLayout} + */ +qx.Proto.getRightArea = function() { + return this.getSecondArea(); +} + +/** + * Returns the bottom area (CanvasLayout) + * + * @return {qx.ui.layout.CanvasLayout} + */ +qx.Proto.getBottomArea = function() { + return this.getSecondArea(); +} + +/** + * Returns the first area (CanvasLayout) + * + * @return {qx.ui.layout.CanvasLayout} + */ +qx.Proto.getFirstArea = function() { + return this._firstArea; +} + +/** + * Returns the second area (CanvasLayout) + * + * @return {qx.ui.layout.CanvasLayout} + */ +qx.Proto.getSecondArea = function() { + return this._secondArea; +} + + + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyShowKnob = function(propValue, propOldValue, propData) +{ + this._knob.setVisibility(propValue); + return true; +} + +qx.Proto._modifyOrientation = function(propValue, propOldValue, propData) +{ + // sync orientation to layout + this._box.setOrientation(propValue); + + switch(propOldValue) + { + case "horizontal": + // remove old listeners + this._splitter.removeEventListener("mousedown", this._onSplitterMouseDownX, this); + this._splitter.removeEventListener("mousemove", this._onSplitterMouseMoveX, this); + this._splitter.removeEventListener("mouseup", this._onSplitterMouseUpX, this); + this._knob.removeEventListener("mousedown", this._onSplitterMouseDownX, this); + this._knob.removeEventListener("mousemove", this._onSplitterMouseMoveX, this); + this._knob.removeEventListener("mouseup", this._onSplitterMouseUpX, this); + + // reconfigure states + this._splitter.removeState("horizontal"); + this._knob.removeState("horizontal"); + + // reset old dimensions + this._firstArea.setWidth(null); + this._secondArea.setWidth(null); + this._splitter.setWidth(null); + + break; + + case "vertical": + // remove old listeners + this._splitter.removeEventListener("mousedown", this._onSplitterMouseDownY, this); + this._splitter.removeEventListener("mousemove", this._onSplitterMouseMoveY, this); + this._splitter.removeEventListener("mouseup", this._onSplitterMouseUpY, this); + this._knob.removeEventListener("mousedown", this._onSplitterMouseDownY, this); + this._knob.removeEventListener("mousemove", this._onSplitterMouseMoveY, this); + this._knob.removeEventListener("mouseup", this._onSplitterMouseUpY, this); + + // reconfigure states + this._splitter.removeState("vertical"); + this._knob.removeState("vertical"); + + // reset old dimensions + this._firstArea.setHeight(null); + this._secondArea.setHeight(null); + this._splitter.setHeight(null); + + break; + } + + switch(propValue) + { + case "horizontal": + // add new listeners + this._splitter.addEventListener("mousemove", this._onSplitterMouseMoveX, this); + this._splitter.addEventListener("mousedown", this._onSplitterMouseDownX, this); + this._splitter.addEventListener("mouseup", this._onSplitterMouseUpX, this); + this._knob.addEventListener("mousemove", this._onSplitterMouseMoveX, this); + this._knob.addEventListener("mousedown", this._onSplitterMouseDownX, this); + this._knob.addEventListener("mouseup", this._onSplitterMouseUpX, this); + + // reconfigure states + this._splitter.addState("horizontal"); + this._knob.addState("horizontal"); + + // apply images + this._knob.setSource("widget/splitpane/knob-horizontal.png"); + + break; + + case "vertical": + // add new listeners + this._splitter.addEventListener("mousedown", this._onSplitterMouseDownY, this); + this._splitter.addEventListener("mousemove", this._onSplitterMouseMoveY, this); + this._splitter.addEventListener("mouseup", this._onSplitterMouseUpY, this); + this._knob.addEventListener("mousedown", this._onSplitterMouseDownY, this); + this._knob.addEventListener("mousemove", this._onSplitterMouseMoveY, this); + this._knob.addEventListener("mouseup", this._onSplitterMouseUpY, this); + + // reconfigure states + this._splitter.addState("vertical"); + this._knob.addState("vertical"); + + // apply images + this._knob.setSource("widget/splitpane/knob-vertical.png"); + + break; + } + + // apply new dimensions + this._syncFirstSize(); + this._syncSecondSize(); + this._syncSplitterSize(); + + return true; +}; + +qx.Proto._modifyFirstSize = function(propValue, propOldValue, propData) +{ + this._syncFirstSize(); + return true; +} + +qx.Proto._modifySecondSize = function(propValue, propOldValue, propData) +{ + this._syncSecondSize(); + return true; +} + +qx.Proto._modifySplitterSize = function(propValue, propOldValue, propData) +{ + this._syncSplitterSize(); + return true; +} + +qx.Proto._syncFirstSize = function() +{ + switch(this.getOrientation()) + { + case "horizontal": + this._firstArea.setWidth(this.getFirstSize()); + break; + + case "vertical": + this._firstArea.setHeight(this.getFirstSize()); + break; + } +} + +qx.Proto._syncSecondSize = function() +{ + switch(this.getOrientation()) + { + case "horizontal": + this._secondArea.setWidth(this.getSecondSize()); + break; + + case "vertical": + this._secondArea.setHeight(this.getSecondSize()); + break; + } +} + +qx.Proto._syncSplitterSize = function() +{ + switch(this.getOrientation()) + { + case "horizontal": + this._splitter.setWidth(this.getSplitterSize()); + break; + + case "vertical": + this._splitter.setHeight(this.getSplitterSize()); + break; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +/** + * Initializes drag session in case of a mousedown event on splitter in a horizontal splitpane. + * + * @param e {qx.event.MouseEvent} The event itself. + */ +qx.Proto._onSplitterMouseDownX = function(e) +{ + if (!e.isLeftButtonPressed()) { + return; + } + + this._commonMouseDown(); + + // activate global cursor + this.getTopLevelWidget().setGlobalCursor("col-resize"); + this._slider.addState("dragging"); + this._knob.addState("dragging"); + + // initialize the drag session + this._dragMin = qx.html.Location.getPageInnerLeft(this._box.getElement()); + this._dragMax = this._dragMin + this._box.getInnerWidth() - this._splitter.getBoxWidth(); + this._dragOffset = e.getPageX() - qx.html.Location.getPageBoxLeft(this._splitter.getElement()); +} + +/** + * Initializes drag session in case of a mousedown event on splitter in a vertical splitpane. + * + * @param e {qx.event.MouseEvent} The event itself. + */ +qx.Proto._onSplitterMouseDownY = function(e) +{ + if (!e.isLeftButtonPressed()) { + return; + } + + this._commonMouseDown(); + + // activate global cursor + this.getTopLevelWidget().setGlobalCursor("row-resize"); + this._slider.addState("dragging"); + this._knob.addState("dragging"); + + // initialize the drag session + // dragStart = position of layout + mouse offset on splitter + this._dragMin = qx.html.Location.getPageInnerTop(this._box.getElement()); + this._dragMax = this._dragMin + this._box.getInnerHeight() - this._splitter.getBoxHeight(); + this._dragOffset = e.getPageY() - qx.html.Location.getPageBoxTop(this._splitter.getElement()); +} + +qx.Proto._commonMouseDown = function() +{ + // enable capturing + this._splitter.setCapture(true); + + // initialize the slider + if(!this.isLiveResize()) + { + this._slider.setLeft(this._splitter.getOffsetLeft()); + this._slider.setTop(this._splitter.getOffsetTop()); + this._slider.setWidth(this._splitter.getBoxWidth()); + this._slider.setHeight(this._splitter.getBoxHeight()); + + this._slider.show(); + } +} + + + + + + + + +/** + * Move the splitter in case of a mousemove event on splitter in a horizontal splitpane. + * + * @param e {qx.event.MouseEvent} The event itself. + */ +qx.Proto._onSplitterMouseMoveX = function(e) +{ + if (!this._splitter.getCapture()) { + return; + } + + this.isLiveResize() ? this._syncX(e) : this._slider._applyRuntimeLeft(this._normalizeX(e)); + e.preventDefault(); +} + +/** + * Move the splitter in case of a mousemove event on splitter in a vertical splitpane. + * + * @param e {qx.event.MouseEvent} The event itself. + */ +qx.Proto._onSplitterMouseMoveY = function(e) +{ + if (!this._splitter.getCapture()) { + return; + } + + this.isLiveResize() ? this._syncY(e) : this._slider._applyRuntimeTop(this._normalizeY(e)); + e.preventDefault(); +} + + + + + + + +/** + * Ends the drag session and computes the new dimensions of panes in case of a mouseup event on splitter in a horizontal splitpane. + * + * @param e {qx.event.MouseEvent} The event itself. + */ +qx.Proto._onSplitterMouseUpX = function(e) +{ + if (!this._splitter.getCapture()) { + return; + } + + if(!this.isLiveResize()) { + this._syncX(e); + } + + this._commonMouseUp(); +} + +/** + * Ends the drag session and computes the new dimensions of panes in case of a mouseup event on splitter in a vertical splitpane. + * + * @param e {qx.event.MouseEvent} The event itself. + */ +qx.Proto._onSplitterMouseUpY = function(e) +{ + if (!this._splitter.getCapture()) { + return; + } + + if(!this.isLiveResize()) { + this._syncY(e); + } + + this._commonMouseUp(); +} + +qx.Proto._commonMouseUp = function() +{ + // hide helpers + this._slider.hide(); + + // disable capturing + this._splitter.setCapture(false); + + // reset the global cursor + this.getTopLevelWidget().setGlobalCursor(null); + + // cleanup dragsession + this._slider.removeState("dragging"); + this._knob.removeState("dragging"); +} + +qx.Proto._syncX = function(e) +{ + var first = this._normalizeX(e); + var second = this._box.getInnerWidth() - this._splitter.getBoxWidth() - first; + + this._syncCommon(first, second); +} + +qx.Proto._syncY = function(e) +{ + var first = this._normalizeY(e); + var second = this._box.getInnerHeight() - this._splitter.getBoxHeight() - first; + + this._syncCommon(first, second); +} + +qx.Proto._syncCommon = function(first, second) +{ + this.setFirstSize(first + "*"); + this.setSecondSize(second + "*"); +} + +qx.Proto._normalizeX = function(e) { + return qx.lang.Number.limit(e.getPageX() - this._dragOffset, this._dragMin, this._dragMax) - this._dragMin; +} + +qx.Proto._normalizeY = function(e) { + return qx.lang.Number.limit(e.getPageY() - this._dragOffset, this._dragMin, this._dragMax) - this._dragMin; +} + +qx.Proto._applyRuntimeLeftWrapper = function(v) +{ + if (this._pane.getOrientation() == "horizontal") { + this._pane._knob._applyRuntimeLeft(v); + } + + return this.constructor.prototype._applyRuntimeLeft.call(this, v); +} + +qx.Proto._applyRuntimeTopWrapper = function(v) +{ + if (this._pane.getOrientation() == "vertical") { + this._pane._knob._applyRuntimeTop(v); + } + + return this.constructor.prototype._applyRuntimeTop.call(this, v); +} + + + + + +/* +------------------------------------------------------------------------------------ + DISPOSER +------------------------------------------------------------------------------------ + */ + +/** + * Garbage collection + */ +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if(this._firstArea) + { + this._firstArea.dispose(); + this._firstArea = null; + } + + if(this._secondArea) + { + this._secondArea.dispose(); + this._secondArea = null; + } + + if (this._splitter) + { + this._splitter.removeEventListener("mousedown", this._onSplitterMouseDownX, this); + this._splitter.removeEventListener("mouseup", this._onSplitterMouseMoveX, this); + this._splitter.removeEventListener("mousemove", this._onSplitterMouseUpX, this); + + this._splitter.removeEventListener("mousedown", this._onSplitterMouseDownY, this); + this._splitter.removeEventListener("mouseup", this._onSplitterMouseMoveY, this); + this._splitter.removeEventListener("mousemove", this._onSplitterMouseUpY, this); + + this._splitter.dispose(); + this._splitter._pane = null; + this._splitter = null; + } + + if (this._slider) + { + this._slider.dispose(); + this._slider._pane = null; + this._slider = null; + } + + if (this._knob) + { + this._knob.removeEventListener("mousedown", this._onSplitterMouseDownX, this); + this._knob.removeEventListener("mouseup", this._onSplitterMouseMoveX, this); + this._knob.removeEventListener("mousemove", this._onSplitterMouseUpX, this); + + this._knob.removeEventListener("mousedown", this._onSplitterMouseDownY, this); + this._knob.removeEventListener("mouseup", this._onSplitterMouseMoveY, this); + this._knob.removeEventListener("mousemove", this._onSplitterMouseUpY, this); + + this._knob.dispose(); + this._knob = null; + } + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/VerticalSplitPane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/VerticalSplitPane.js new file mode 100644 index 0000000000..a922450039 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/splitpane/VerticalSplitPane.js @@ -0,0 +1,60 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Volker Pauli + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_splitpane) + +************************************************************************ */ + +/** + * + * Creates a new instance of a vertical SplitPane.<br /><br /> + * + * new qx.ui.splitpane.VerticalSplitPane()<br /> + * new qx.ui.splitpane.VerticalSplitPane(firstSize, secondSize) + * + * @param firstSize {String} The size of the top pane. Allowed values are any by {@link qx.ui.core.Widget} supported unit. + * @param secondSize {String} The size of the bottom pane. Allowed values are any by {@link qx.ui.core.Widget} supported unit. + */ +qx.OO.defineClass("qx.ui.splitpane.VerticalSplitPane", qx.ui.splitpane.SplitPane, +function(firstSize, secondSize) { + qx.ui.splitpane.SplitPane.call(this, "vertical", firstSize, secondSize); +}); + + + + + +/* +------------------------------------------------------------------------------------ + DISPOSER +------------------------------------------------------------------------------------ + */ + +/** + * Garbage collection + */ +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.ui.splitpane.SplitPane.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/AbstractDataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/AbstractDataCellRenderer.js new file mode 100644 index 0000000000..0e86e0fbdc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/AbstractDataCellRenderer.js @@ -0,0 +1,130 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * An abstract data cell renderer that does the basic coloring + * (borders, selected look, ...). + */ +qx.OO.defineClass("qx.ui.table.AbstractDataCellRenderer", qx.ui.table.DataCellRenderer, +function() { + qx.ui.table.DataCellRenderer.call(this); +}); + + +// overridden +qx.Proto.createDataCellHtml = function(cellInfo) { + var AbstractDataCellRenderer = qx.ui.table.AbstractDataCellRenderer; + return AbstractDataCellRenderer.MAIN_DIV_START + this._getCellStyle(cellInfo) + + AbstractDataCellRenderer.MAIN_DIV_START_END + + this._getContentHtml(cellInfo) + AbstractDataCellRenderer.MAIN_DIV_END; +} + + +// overridden +qx.Proto.updateDataCellElement = function(cellInfo, cellElement) { + cellElement.innerHTML = this._getContentHtml(cellInfo); +} + + +/** + * Returns the CSS styles that should be applied to the main div of this cell. + * + * @param cellInfo {Map} The information about the cell. + * See {@link #createDataCellHtml}. + * @return the CSS styles of the main div. + */ +qx.Proto._getCellStyle = function(cellInfo) { + return cellInfo.style + qx.ui.table.AbstractDataCellRenderer.MAIN_DIV_STYLE; +} + + +/** + * Returns the HTML that should be used inside the main div of this cell. + * + * @param cellInfo {Map} The information about the cell. + * See {@link #createDataCellHtml}. + * @return {String} the inner HTML of the main div. + */ +qx.Proto._getContentHtml = function(cellInfo) { + return cellInfo.value; +} + + +qx.Proto.createDataCellHtml_array_join = function(cellInfo, htmlArr) { + var AbstractDataCellRenderer = qx.ui.table.AbstractDataCellRenderer; + + if (qx.ui.table.TablePane.USE_TABLE) { + htmlArr.push(AbstractDataCellRenderer.TABLE_TD); + htmlArr.push(cellInfo.styleHeight); + htmlArr.push("px"); + } else { + htmlArr.push(AbstractDataCellRenderer.ARRAY_JOIN_MAIN_DIV_LEFT); + htmlArr.push(cellInfo.styleLeft); + htmlArr.push(AbstractDataCellRenderer.ARRAY_JOIN_MAIN_DIV_WIDTH); + htmlArr.push(cellInfo.styleWidth); + htmlArr.push(AbstractDataCellRenderer.ARRAY_JOIN_MAIN_DIV_HEIGHT); + htmlArr.push(cellInfo.styleHeight); + htmlArr.push("px"); + } + + this._createCellStyle_array_join(cellInfo, htmlArr); + + htmlArr.push(AbstractDataCellRenderer.ARRAY_JOIN_MAIN_DIV_START_END); + + this._createContentHtml_array_join(cellInfo, htmlArr); + + if (qx.ui.table.TablePane.USE_TABLE) { + htmlArr.push(AbstractDataCellRenderer.TABLE_TD_END); + } else { + htmlArr.push(AbstractDataCellRenderer.ARRAY_JOIN_MAIN_DIV_END); + } +} + + +qx.Proto._createCellStyle_array_join = function(cellInfo, htmlArr) { + htmlArr.push(qx.ui.table.AbstractDataCellRenderer.MAIN_DIV_STYLE); +} + + +qx.Proto._createContentHtml_array_join = function(cellInfo, htmlArr) { + htmlArr.push(cellInfo.value); +} + + +qx.Class.MAIN_DIV_START = '<div style="'; +qx.Class.MAIN_DIV_START_END = '">'; +qx.Class.MAIN_DIV_END = '</div>'; +/** main style */ +qx.Class.MAIN_DIV_STYLE = ';overflow:hidden;white-space:nowrap;border-right:1px solid #eeeeee;border-bottom:1px solid #eeeeee;padding-left:2px;padding-right:2px;cursor:default' + + (qx.core.Client.getInstance().isMshtml() ? '' : ';-moz-user-select:none;'); + +qx.Class.ARRAY_JOIN_MAIN_DIV_LEFT = '<div style="position:absolute;left:'; +qx.Class.ARRAY_JOIN_MAIN_DIV_WIDTH = 'px;top:0px;width:'; +qx.Class.ARRAY_JOIN_MAIN_DIV_HEIGHT = 'px;height:'; +qx.Class.ARRAY_JOIN_MAIN_DIV_START_END = '">'; +qx.Class.ARRAY_JOIN_MAIN_DIV_END = '</div>'; + +qx.Class.TABLE_TD = '<td style="height:'; +qx.Class.TABLE_TD_END = '</td>';
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/AbstractTableModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/AbstractTableModel.js new file mode 100644 index 0000000000..ba5e7506ff --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/AbstractTableModel.js @@ -0,0 +1,152 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * An abstract table model that performs the column handling, so subclasses only + * need to care for row handling. + */ +qx.OO.defineClass("qx.ui.table.AbstractTableModel", qx.ui.table.TableModel, +function() { + qx.ui.table.TableModel.call(this); + + this._columnIdArr = []; + this._columnNameArr = []; + this._columnIndexMap = {}; +}); + + +// overridden +qx.Proto.getColumnCount = function() { + return this._columnIdArr.length; +} + + +// overridden +qx.Proto.getColumnIndexById = function(columnId) { + return this._columnIndexMap[columnId]; +} + + +// overridden +qx.Proto.getColumnId = function(columnIndex) { + return this._columnIdArr[columnIndex]; +} + + +// overridden +qx.Proto.getColumnName = function(columnIndex) { + return this._columnNameArr[columnIndex]; +} + + +/** + * Sets the column IDs. These IDs may be used internally to identify a column. + * <p> + * Note: This will clear previously set column names. + * </p> + * + * @param columnIdArr {String[]} the IDs of the columns. + * @see #setColumns + */ +qx.Proto.setColumnIds = function(columnIdArr) { + this._columnIdArr = columnIdArr; + + // Create the reverse map + this._columnIndexMap = {}; + for (var i = 0; i < columnIdArr.length; i++) { + this._columnIndexMap[columnIdArr[i]] = i; + } + this._columnNameArr = new Array(columnIdArr.length); + + // Inform the listeners + if (!this._internalChange) { + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); + } +} + + +/** + * Sets the column names. These names will be shown to the user. + * <p> + * Note: The column IDs have to be defined before. + * </p> + * + * @param columnNameArr {String[]} the names of the columns. + * @see #setColumnIds + */ +qx.Proto.setColumnNamesByIndex = function(columnNameArr) { + if (this._columnIdArr.length != columnNameArr.length) { + throw new Error("this._columnIdArr and columnNameArr have different length: " + + this._columnIdArr.length + " != " + columnNameArr.length); + } + this._columnNameArr = columnNameArr; + + // Inform the listeners + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); +} + + +/** + * Sets the column names. These names will be shown to the user. + * <p> + * Note: The column IDs have to be defined before. + * </p> + * + * @param columnNameMap {Map} a map containing the column IDs as keys and the + * column name as values. + * @see #setColumnIds + */ +qx.Proto.setColumnNamesById = function(columnNameMap) { + this._columnNameArr = new Array(this._columnIdArr.length); + for (var i = 0; i < this._columnIdArr.length; ++i) { + this._columnNameArr[i] = columnNameMap[this._columnIdArr[i]]; + } +} + + +/** + * Sets the columns. + * + * @param columnNameArr {String[]} The column names. These names will be shown to + * the user. + * @param columnIdArr {String[] ? null} The column IDs. These IDs may be used + * internally to identify a column. If null, the column names are used as + * IDs. + */ +qx.Proto.setColumns = function(columnNameArr, columnIdArr) { + if (columnIdArr == null) { + columnIdArr = columnNameArr; + } + + if (columnIdArr.length != columnNameArr.length) { + throw new Error("columnIdArr and columnNameArr have different length: " + + columnIdArr.length + " != " + columnNameArr.length); + } + + this._internalChange = true; + this.setColumnIds(columnIdArr); + this._internalChange = false; + this.setColumnNamesByIndex(columnNameArr); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/BooleanDataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/BooleanDataCellRenderer.js new file mode 100644 index 0000000000..44ec0d83ef --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/BooleanDataCellRenderer.js @@ -0,0 +1,53 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Carsten Lergenmueller (carstenl) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) +#embed(qx.widgettheme/table/boolean-true.png) +#embed(qx.widgettheme/table/boolean-false.png) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/** + * A data cell renderer for boolean values. + */ +qx.OO.defineClass("qx.ui.table.BooleanDataCellRenderer", qx.ui.table.IconDataCellRenderer, +function() { + qx.ui.table.IconDataCellRenderer.call(this); + + this._iconUrlTrue = qx.manager.object.AliasManager.getInstance().resolvePath("widget/table/boolean-true.png"); + this._iconUrlFalse = qx.manager.object.AliasManager.getInstance().resolvePath("widget/table/boolean-false.png"); + this._iconUrlNull = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + +}); + +//overridden +qx.Proto._identifyImage = function(cellInfo) { + var IconDataCellRenderer = qx.ui.table.IconDataCellRenderer; + var imageHints = { imageWidth:11, imageHeight:11 }; + switch (cellInfo.value) { + case true: imageHints.url = this._iconUrlTrue; break; + case false: imageHints.url = this._iconUrlFalse; break; + default: imageHints.url = this._iconUrlNull; break; + } + return imageHints; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/CellEditorFactory.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/CellEditorFactory.js new file mode 100644 index 0000000000..9d699aed4d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/CellEditorFactory.js @@ -0,0 +1,64 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A factory creating widgets to use for editing table cells. + */ +qx.OO.defineClass("qx.ui.table.CellEditorFactory", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * Creates a cell editor. + * <p> + * The cellInfo map contains the following properties: + * <ul> + * <li>value (var): the cell's value.</li> + * <li>row (int): the model index of the row the cell belongs to.</li> + * <li>col (int): the model index of the column the cell belongs to.</li> + * <li>xPos (int): the x position of the cell in the table pane.</li> + * </ul> + * + * @param cellInfo {Map} A map containing the information about the cell to + * create. + * @return {qx.ui.core.Widget} the widget that should be used as cell editor. + */ +qx.Proto.createCellEditor = function(cellInfo) { + throw new Error("createCellEditor is abstract"); +} + + +/** + * Returns the current value of a cell editor. + * + * @param cellEditor {qx.ui.core.Widget} The cell editor formally created by + * {@link #createCellEditor}. + * @return {var} the current value from the editor. + */ +qx.Proto.getCellEditorValue = function(cellEditor) { + throw new Error("getCellEditorValue is abstract"); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/CheckBoxCellEditorFactory.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/CheckBoxCellEditorFactory.js new file mode 100644 index 0000000000..cd9c461f98 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/CheckBoxCellEditorFactory.js @@ -0,0 +1,44 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 David Perez + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * David Perez (david-perez) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * For editing boolean data in a checkbox. It is advisable to use this in conjuntion with BooleanDataCellRenderer. + */ +qx.OO.defineClass("qx.ui.table.CheckBoxCellEditorFactory", qx.ui.table.CellEditorFactory, function() { + qx.ui.table.CellEditorFactory.call(this); +}); + +// overridden +qx.Proto.createCellEditor = function(cellInfo) { + var editor = new qx.ui.form.CheckBox; + editor.setChecked(cellInfo.value); + + return editor; +} + +// overridden +qx.Proto.getCellEditorValue = function(cellEditor) { + return cellEditor.getChecked(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DataCellRenderer.js new file mode 100644 index 0000000000..553f071e55 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DataCellRenderer.js @@ -0,0 +1,92 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A cell renderer for data cells. + */ +qx.OO.defineClass("qx.ui.table.DataCellRenderer", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * Creates the HTML for a data cell. + * <p> + * The cellInfo map contains the following properties: + * <ul> + * <li>value (var): the cell's value.</li> + * <li>rowData (var): contains the row data for the row, the cell belongs to. + * The kind of this object depends on the table model, see + * {@link TableModel#getRowData()}</li> + * <li>row (int): the model index of the row the cell belongs to.</li> + * <li>col (int): the model index of the column the cell belongs to.</li> + * <li>table (qx.ui.table.Table): the table the cell belongs to.</li> + * <li>xPos (int): the x position of the cell in the table pane.</li> + * <li>selected (boolean): whether the cell is selected.</li> + * <li>focusedCol (boolean): whether the cell is in the same column as the + * focused cell.</li> + * <li>focusedRow (boolean): whether the cell is in the same row as the + * focused cell.</li> + * <li>editable (boolean): whether the cell is editable.</li> + * <li>style (string): The CSS styles that should be applied to the outer HTML + * element.</li> + * </ul> + * + * @param cellInfo {Map} A map containing the information about the cell to + * create. + * @return {String} the HTML of the data cell. + */ +qx.Proto.createDataCellHtml = function(cellInfo) { + throw new Error("createDataCellHtml is abstract"); +} + + +/** + * Updates the content of the pane. + * + * @param completeUpdate {Boolean ? false} if true a complete update is performed. + * On a complete update all cell widgets are recreated. + * @param onlyRow {Integer ? null} if set only the specified row will be updated. + * @param onlySelectionOrFocusChanged {Boolean ? false} if true, cell values won't + * be updated. Only the row background will. + */ +qx.Proto.updateDataCellElement = function(cellInfo, cellElement) { + throw new Error("updateDataCellElement is abstract"); +} + + +/** + * Updates the content of the pane using array joins. + * + * @param completeUpdate {Boolean ? false} if true a complete update is performed. + * On a complete update all cell widgets are recreated. + * @param onlyRow {Integer ? null} if set only the specified row will be updated. + * @param onlySelectionOrFocusChanged {Boolean ? false} if true, cell values won't + * be updated. Only the row background will. + */ +qx.Proto.createDataCellHtml_array_join = function(cellInfo, htmlArr) { + throw new Error("createDataCellHtml_array_join is abstract"); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DataRowRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DataRowRenderer.js new file mode 100644 index 0000000000..1dae6c85c9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DataRowRenderer.js @@ -0,0 +1,56 @@ +/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2006 STZ-IDA, Germany, http://www.stz-ida.de
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL: http://www.eclipse.org/org/documents/epl-v10.php
+ See the LICENSE file in the project's top-level directory for details.
+
+ Authors:
+ * Til Schneider (til132)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_table)
+
+************************************************************************ */
+
+/**
+ * A cell renderer for data rows.
+ */
+qx.OO.defineClass("qx.ui.table.DataRowRenderer", qx.core.Object,
+function() {
+ qx.core.Object.call(this);
+});
+
+
+/**
+ * Updates a data row.
+ * <p>
+ * The rowInfo map contains the following properties:
+ * <ul>
+ * <li>rowData (var): contains the row data for the row.
+ * The kind of this object depends on the table model, see
+ * {@link TableModel#getRowData()}</li>
+ * <li>row (int): the model index of the row.</li>
+ * <li>selected (boolean): whether a cell in this row is selected.</li>
+ * <li>focusedRow (boolean): whether the focused cell is in this row.</li>
+ * <li>table (qx.ui.table.Table): the table the row belongs to.</li>
+ * </ul>
+ *
+ * @param rowInfo {Map} A map containing the information about the row to
+ * update. This map has the same structure as in {@link #createDataCell}.
+ * @param rowElement {element} the DOM element that renders the data rot. This
+ * is the same element formally created by the HTML from {@link #createDataCell}.
+ */
+qx.Proto.updateDataRowElement = function(rowInfo, rowElement) {
+ throw new Error("updateDataRowElement is abstract");
+}
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataCellRenderer.js new file mode 100644 index 0000000000..cffdde9f51 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataCellRenderer.js @@ -0,0 +1,169 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +// This is needed because of the instantiation at the end of this file. +// I don't think this is a good idea. (wpbasti) +#require(qx.util.format.NumberFormat) + +************************************************************************ */ + +/** + * The default data cell renderer. + */ +qx.OO.defineClass("qx.ui.table.DefaultDataCellRenderer", qx.ui.table.AbstractDataCellRenderer, +function() { + qx.ui.table.AbstractDataCellRenderer.call(this); +}); + + +/** + * Whether the alignment should automatically be set according to the cell value. + * If true numbers will be right-aligned. + */ +qx.OO.addProperty({ name:"useAutoAlign", type:"boolean", defaultValue:true, allowNull:false }); + + +// overridden +qx.Proto._getCellStyle = function(cellInfo) { + var style = qx.ui.table.AbstractDataCellRenderer.prototype._getCellStyle(cellInfo); + + var stylesToApply = this._getStyleFlags(cellInfo); + if (stylesToApply & qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_ALIGN_RIGHT){ + style += ";text-align:right"; + } + if (stylesToApply & qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_BOLD){ + style += ";font-weight:bold"; + } + if (stylesToApply & qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_ITALIC){ + style += ";font-style:italic"; + } + + return style; +} + +/** + * Determines the styles to apply to the cell + * + * @param cellInfo {Object} cellInfo of the cell + * @return the sum of any of the STYLEFLAGS defined below + */ +qx.Proto._getStyleFlags = function(cellInfo) { + if (this.getUseAutoAlign()) { + if (typeof cellInfo.value == "number") { + return qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_ALIGN_RIGHT; + } + } +} + + +// overridden +qx.Proto._getContentHtml = function(cellInfo) { + return qx.html.String.escape(this._formatValue(cellInfo)); +} + + +// overridden +qx.Proto.updateDataCellElement = function(cellInfo, cellElement) { + var clazz = qx.ui.table.DefaultDataCellRenderer; + var style = cellElement.style; + + var stylesToApply = this._getStyleFlags(cellInfo); + if (stylesToApply & clazz.STYLEFLAG_ALIGN_RIGHT){ + style.textAlign = "right"; + } else { + style.textAlign = ""; + } + + if (stylesToApply & clazz.STYLEFLAG_BOLD){ + style.fontWeight = "bold"; + } else { + style.fontWeight = ""; + } + + if (stylesToApply & clazz.STYLEFLAG_ITALIC){ + style.fontStyle = "ital"; + } else { + style.fontStyle = ""; + } + + var textNode = cellElement.firstChild; + if (textNode != null) { + textNode.nodeValue = this._formatValue(cellInfo); + } else { + cellElement.innerHTML = qx.html.String.escape(this._formatValue(cellInfo)); + } +} + + +/** + * Formats a value. + * + * @param cellInfo {Map} A map containing the information about the cell to + * create. This map has the same structure as in + * {@link DataCellRenderer#createDataCell}. + * @return {String} the formatted value. + */ +qx.Proto._formatValue = function(cellInfo) { + var value = cellInfo.value; + if (value == null) { + return ""; + } else if (typeof value == "number") { + return qx.ui.table.DefaultDataCellRenderer._numberFormat.format(value); + } else if (value instanceof Date) { + return qx.util.format.DateFormat.getDateInstance().format(value); + } else { + return value; + } +} + + +qx.Proto._createCellStyle_array_join = function(cellInfo, htmlArr) { + qx.ui.table.AbstractDataCellRenderer.prototype._createCellStyle_array_join(cellInfo, htmlArr); + + var stylesToApply = this._getStyleFlags(cellInfo); + if (stylesToApply & qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_ALIGN_RIGHT){ + htmlArr.push(";text-align:right"); + } + if (stylesToApply & qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_BOLD){ + htmlArr.push(";font-weight:bold"); + } + if (stylesToApply & qx.ui.table.DefaultDataCellRenderer.STYLEFLAG_ITALIC){ + htmlArr.push(";font-style:italic"); + } +} + + +qx.Proto._createContentHtml_array_join = function(cellInfo, htmlArr) { + htmlArr.push(qx.html.String.escape(this._formatValue(cellInfo))); +} + + +qx.Class._numberFormat = new qx.util.format.NumberFormat(); +qx.Class._numberFormat.setMaximumFractionDigits(2); + +qx.Class.STYLEFLAG_ALIGN_RIGHT = 1; +qx.Class.STYLEFLAG_BOLD = 2; +qx.Class.STYLEFLAG_ITALIC = 4; + + + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataRowRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataRowRenderer.js new file mode 100644 index 0000000000..193f9ce155 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultDataRowRenderer.js @@ -0,0 +1,163 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * The default data row renderer. + */ +qx.OO.defineClass("qx.ui.table.DefaultDataRowRenderer", qx.ui.table.DataRowRenderer, +function() { + qx.ui.table.DataRowRenderer.call(this); + + var Ddrr = qx.ui.table.DefaultDataRowRenderer; + + // Initialize to the default colors. + this._colors = + { + bgcolFocusedSelected : Ddrr.BGCOL_FOCUSED_SELECTED, + bgcolFocusedSelectedBlur : Ddrr.BGCOL_FOCUSED_SELECTED_BLUR, + bgcolFocused : Ddrr.BGCOL_FOCUSED, + bgcolFocusedBlur : Ddrr.BGCOL_FOCUSED_BLUR, + bgcolSelected : Ddrr.BGCOL_SELECTED, + bgcolSelectedBlur : Ddrr.BGCOL_SELECTED_BLUR, + bgcolEven : Ddrr.BGCOL_EVEN, + bgcolOdd : Ddrr.BGCOL_ODD, + colSelected : Ddrr.COL_SELECTED, + colNormal : Ddrr.COL_NORMAL + }; + +}); + + +/** Whether the focused row should be highlighted. */ +qx.OO.addProperty({ name:"highlightFocusRow", type:"boolean", allowNull:false, defaultValue:true}); + +/** + * Whether the focused row and the selection should be grayed out when the + * table hasn't the focus. + */ +qx.OO.addProperty({ name:"visualizeFocusedState", type:"boolean", allowNull:false, defaultValue:true}); + +/** The font family used for the data row */ +qx.OO.addProperty({ name:"fontFamily", type:"string", allowNull:false, defaultValue:"'Segoe UI', Corbel, Calibri, Tahoma, 'Lucida Sans Unicode', sans-serif" }); + +/** The font size used for the data row */ +qx.OO.addProperty({ name:"fontSize", type:"string", allowNull:false, defaultValue:"11px" }); + + +// overridden +qx.Proto.updateDataRowElement = function(rowInfo, rowElem) { + rowElem.style.fontFamily = this.getFontFamily(); + rowElem.style.fontSize = this.getFontSize(); + + if (rowInfo.focusedRow && this.getHighlightFocusRow()) { + if (rowInfo.table.getFocused() || !this.getVisualizeFocusedState()) { + rowElem.style.backgroundColor = rowInfo.selected ? this._colors.bgcolFocusedSelected : this._colors.bgcolFocused; + } else { + rowElem.style.backgroundColor = rowInfo.selected ? this._colors.bgcolFocusedSelectedBlur : this._colors.bgcolFocusedBlur; + } + } else { + if (rowInfo.selected) { + if (rowInfo.table.getFocused() || !this.getVisualizeFocusedState()) { + rowElem.style.backgroundColor = this._colors.bgcolSelected; + } else { + rowElem.style.backgroundColor = this._colors.bgcolSelectedBlur; + } + } else { + rowElem.style.backgroundColor = (rowInfo.row % 2 == 0) ? this._colors.bgcolEven : this._colors.bgcolOdd; + } + } + rowElem.style.color = rowInfo.selected ? this._colors.colSelected : this._colors.colNormal; +}; + + +// Array join test +qx.Proto._createRowStyle_array_join = function(rowInfo, htmlArr) { + htmlArr.push(";font-family:"); + htmlArr.push(this.getFontFamily()); + htmlArr.push(";font-size:"); + htmlArr.push(this.getFontSize()); + + htmlArr.push(";background-color:"); + if (rowInfo.focusedRow && this.getHighlightFocusRow()) { + if (rowInfo.table.getFocused() || !this.getVisualizeFocusedState()) { + htmlArr.push(rowInfo.selected ? this._colors.bgcolFocusedSelected : this._colors.bgcolFocused); + } else { + htmlArr.push(rowInfo.selected ? this._colors.bgcolFocusedSelectedBlur : this._colors.bgcolFocusedBlur); + } + } else { + if (rowInfo.selected) { + if (rowInfo.table.getFocused() || !this.getVisualizeFocusedState()) { + htmlArr.push(this._colors.bgcolSelected); + } else { + htmlArr.push(this._colors.bgcolSelectedBlur); + } + } else { + htmlArr.push((rowInfo.row % 2 == 0) ? this._colors.bgcolEven : this._colors.bgcolOdd); + } + } + htmlArr.push(';color:'); + htmlArr.push(rowInfo.selected ? this._colors.colSelected : this._colors.colNormal); +}; + + +/** + * Allow setting the table row colors. + * + * @param colors {Map} + * The value of each property in the map is a string containing either a + * number (e.g. "#518ad3") or color name ("white") representing the color + * for that type of display. The map may contain any or all of the + * following properties: + * <ul> + * <li>bgcolFocusedSelected</li> + * <li>bgcolFocusedSelectedBlur</li> + * <li>bgcolFocused</li> + * <li>bgcolFocusedBlur</li> + * <li>bgcolSelected</li> + * <li>bgcolSelectedBlur</li> + * <li>bgcolEven</li> + * <li>bgcolOdd</li> + * <li>colSelected</li> + * <li>colNormal</li> + * </ul> + */ +qx.Proto.setRowColors = function(colors) +{ + for (var color in colors) + { + this._colors[color] = colors[color]; + } +} + +qx.Class.BGCOL_FOCUSED_SELECTED = "#5a8ad3"; +qx.Class.BGCOL_FOCUSED_SELECTED_BLUR = "#b3bac6"; +qx.Class.BGCOL_FOCUSED = "#ddeeff"; +qx.Class.BGCOL_FOCUSED_BLUR = "#dae0e7"; +qx.Class.BGCOL_SELECTED = "#335ea8"; +qx.Class.BGCOL_SELECTED_BLUR = "#989ea8"; +qx.Class.BGCOL_EVEN = "#faf8f3"; +qx.Class.BGCOL_ODD = "white"; +qx.Class.COL_SELECTED = "white"; +qx.Class.COL_NORMAL = "black"; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultHeaderCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultHeaderCellRenderer.js new file mode 100644 index 0000000000..97b788b1a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/DefaultHeaderCellRenderer.js @@ -0,0 +1,67 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) +#embed(qx.widgettheme/table/ascending.png) +#embed(qx.widgettheme/table/descending.png) + +************************************************************************ */ + +/** + * The default header cell renderer. + */ +qx.OO.defineClass("qx.ui.table.DefaultHeaderCellRenderer", qx.ui.table.HeaderCellRenderer, +function() { + qx.ui.table.HeaderCellRenderer.call(this); +}); + + +// overridden +qx.Proto.createHeaderCell = function(cellInfo) { + var widget = new qx.ui.basic.Atom(); + widget.setAppearance("table-header-cell"); + + this.updateHeaderCell(cellInfo, widget); + + return widget; +} + + +// overridden +qx.Proto.updateHeaderCell = function(cellInfo, cellWidget) { + var DefaultHeaderCellRenderer = qx.ui.table.DefaultHeaderCellRenderer; + + cellWidget.setLabel(cellInfo.name); + + cellWidget.setIcon(cellInfo.sorted ? (cellInfo.sortedAscending ? "widget/table/ascending.png" : "widget/table/descending.png") : null); + cellWidget.setState(DefaultHeaderCellRenderer.STATE_SORTED, cellInfo.sorted); + cellWidget.setState(DefaultHeaderCellRenderer.STATE_SORTED_ASCENDING, cellInfo.sortedAscending); +} + +/** + * (string) The state which will be set for header cells of sorted columns. + */ +qx.Class.STATE_SORTED = "sorted"; + +/** + * (string) The state which will be set when sorting is ascending. + */ +qx.Class.STATE_SORTED_ASCENDING = "sortedAscending"; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/HeaderCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/HeaderCellRenderer.js new file mode 100644 index 0000000000..8d66198bb0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/HeaderCellRenderer.js @@ -0,0 +1,71 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A cell renderer for header cells. + */ +qx.OO.defineClass("qx.ui.table.HeaderCellRenderer", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * Creates a header cell. + * <p> + * The cellInfo map contains the following properties: + * <ul> + * <li>col (int): the model index of the column.</li> + * <li>xPos (int): the x position of the column in the table pane.</li> + * <li>name (string): the name of the column.</li> + * <li>editable (boolean): whether the column is editable.</li> + * <li>sorted (boolean): whether the column is sorted.</li> + * <li>sortedAscending (boolean): whether sorting is ascending.</li> + * </ul> + * + * @param cellInfo {Map} A map containing the information about the cell to + * create. + * @return {qx.ui.core.Widget} the widget that renders the header cell. + */ +qx.Proto.createHeaderCell = function(cellInfo) { + throw new Error("createHeaderCell is abstract"); +} + + +/** + * Updates a header cell. + * + * @param cellInfo {Map} A map containing the information about the cell to + * create. This map has the same structure as in {@link #createHeaderCell}. + * @param cellWidget {qx.ui.core.Widget} the widget that renders the header cell. This is + * the same widget formally created by {@link #createHeaderCell}. + */ +qx.Proto.updateHeaderCell = function(cellInfo, cellWidget) { + throw new Error("updateHeaderCell is abstract"); +} + + +/** The preferred height of cells created by this header renderer. */ +qx.OO.addProperty({ name:"prefferedCellHeight", type:"number", defaultValue:16, allowNull:false }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/IconDataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/IconDataCellRenderer.js new file mode 100644 index 0000000000..2e89779355 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/IconDataCellRenderer.js @@ -0,0 +1,185 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Carsten Lergenmueller (carstenl) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) +#embed(qx.static/image/blank.gif) + +************************************************************************ */ + +/** + * A data cell renderer for boolean values. + */ +qx.OO.defineClass("qx.ui.table.IconDataCellRenderer", qx.ui.table.AbstractDataCellRenderer, +function() { + qx.ui.table.AbstractDataCellRenderer.call(this); + this.IMG_BLANK_URL = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); +}); + + +/** + * Identifies the Image to show. + * + * @param cellInfo {Map} The information about the cell. + * See {@link #createDataCellHtml}. + * @return {Map} A map having the following attributes: + * <ul> + * <li>"url": (type string) must be the URL of the image to show.</li> + * <li>"imageWidth": (type int) the width of the image in pixels.</li> + * <li>"imageHeight": (type int) the height of the image in pixels.</li> + * <li>"tooltip": (type string) must be the image tooltip text.</li> + * </ul> + */ +qx.Proto._identifyImage = function(cellInfo) { + throw new Error("_identifyImage is abstract"); +} + + +/** + * Retrieves the image infos. + * + * @param cellInfo {Map} The information about the cell. + * See {@link #createDataCellHtml}. + * @return {Map} Map with an "url" attribute (type string) + * holding the URL of the image to show + * and a "tooltip" attribute + * (type string) being the tooltip text (or null if none was specified) + * + */ +qx.Proto._getImageInfos= function(cellInfo) { + // Query the subclass about image and tooltip + var urlAndTooltipMap = this._identifyImage(cellInfo); + + // If subclass refuses to give map, construct it + if (urlAndTooltipMap == null || typeof urlAndTooltipMap == "string"){ + urlAndTooltipMap = {url:urlAndTooltipMap, tooltip:null}; + } + + // If subclass gave null as url, replace with url to empty image + if (urlAndTooltipMap.url == null){ + urlAndTooltipMap.url = this.IMG_BLANK_URL; + } + + return urlAndTooltipMap; +} + +// overridden +qx.Proto._getCellStyle = function(cellInfo) { + var style = qx.ui.table.AbstractDataCellRenderer.prototype._getCellStyle(cellInfo); + style += qx.ui.table.IconDataCellRenderer.MAIN_DIV_STYLE; + return style; +} + + +// overridden +qx.Proto._getContentHtml = function(cellInfo) { + var IconDataCellRenderer = qx.ui.table.IconDataCellRenderer; + + var urlAndToolTip = this._getImageInfos(cellInfo); + var html = IconDataCellRenderer.IMG_START; + if (qx.core.Client.getInstance().isMshtml() && /\.png$/i.test(urlAndToolTip.url)) { + html += qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif") + + '" style="filter:' + "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + urlAndToolTip.url + "',sizingMethod='scale')"; + } else { + html += urlAndToolTip.url + '" style="'; + } + + if (urlAndToolTip.imageWidth && urlAndToolTip.imageHeight) { + html += ';width:' + urlAndToolTip.imageWidth + 'px' + + ';height:' + urlAndToolTip.imageHeight + 'px'; + } + + var tooltip = urlAndToolTip.tooltip; + if (tooltip != null){ + html += IconDataCellRenderer.IMG_TITLE_START + tooltip; + } + html += IconDataCellRenderer.IMG_END; + return html; +} + + +// overridden +qx.Proto.updateDataCellElement = function(cellInfo, cellElement) { + // Set image and tooltip text + var urlAndToolTip = this._getImageInfos(cellInfo); + var img = cellElement.firstChild; + if (qx.core.Client.getInstance().isMshtml()) { + if (/\.png$/i.test(urlAndToolTip.url)) { + img.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); + img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + urlAndToolTip.url + "',sizingMethod='scale')"; + } else { + img.src = urlAndToolTip.url; + img.style.filter = ""; + } + } else { + img.src = urlAndToolTip.url; + } + + if (urlAndToolTip.imageWidth && urlAndToolTip.imageHeight) { + img.style.width = urlAndToolTip.imageWidth + "px"; + img.style.height = urlAndToolTip.imageHeight + "px"; + } + + if (urlAndToolTip.tooltip != null){ + img.setAttribute("title", urlAndToolTip.tooltip); + } +} + + +// overridden +qx.Proto._createCellStyle_array_join = function(cellInfo, htmlArr) { + qx.ui.table.AbstractDataCellRenderer.prototype._createCellStyle_array_join(cellInfo, htmlArr); + + htmlArr.push(qx.ui.table.IconDataCellRenderer.MAIN_DIV_STYLE); +} + +qx.Proto._createContentHtml_array_join = function(cellInfo, htmlArr) { + var IconDataCellRenderer = qx.ui.table.IconDataCellRenderer; + + if (qx.ui.table.TablePane.USE_TABLE) { + htmlArr.push(IconDataCellRenderer.TABLE_DIV); + htmlArr.push(cellInfo.styleHeight - 2); // -1 for the border, -1 for the padding + htmlArr.push(IconDataCellRenderer.TABLE_DIV_CLOSE); + } + + htmlArr.push(IconDataCellRenderer.IMG_START); + var urlAndToolTip = this._getImageInfos(cellInfo); + htmlArr.push(urlAndToolTip.url); + var tooltip = urlAndToolTip.tooltip; + if (tooltip != null){ + IconDataCellRenderer.IMG_TITLE_START; + htmlArr.push(tooltip); + } + htmlArr.push(IconDataCellRenderer.IMG_END); + + if (qx.ui.table.TablePane.USE_TABLE) { + htmlArr.push(IconDataCellRenderer.TABLE_DIV_END); + } +} + +qx.Class.MAIN_DIV_STYLE = ';text-align:center;padding-top:1px;'; +qx.Class.IMG_START = '<img src="'; +qx.Class.IMG_END = '"/>'; +qx.Class.IMG_TITLE_START = '" title="'; +qx.Class.TABLE_DIV = '<div style="overflow:hidden;height:'; +qx.Class.TABLE_DIV_CLOSE = 'px">'; +qx.Class.TABLE_DIV_END = '</div>'; + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/IconHeaderCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/IconHeaderCellRenderer.js new file mode 100644 index 0000000000..fd646e882c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/IconHeaderCellRenderer.js @@ -0,0 +1,86 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Carsten Lergenmueller (carstenl) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A header cell renderer which renders an icon (only). The icon cannot be combined + * with text. + * + * @param iconUrl {String} URL to the icon to show + * @param tooltip {String ? ""} Text of the tooltip to show if the mouse hovers over the + * icon + * + */ +qx.OO.defineClass("qx.ui.table.IconHeaderCellRenderer", qx.ui.table.DefaultHeaderCellRenderer, +function(iconUrl, tooltip) { + qx.ui.table.DefaultHeaderCellRenderer.call(this); + if (iconUrl == null){ + iconUrl = ""; + } + this.setIconUrl(iconUrl); + this.setToolTip(tooltip); +}); + +/** + * URL of the icon to show + */ +qx.OO.addProperty({ name:"iconUrl", type:"string", defaultValue:"", allowNull:false }); + +/** + * ToolTip to show if the mouse hovers of the icon + */ +qx.OO.addProperty({ name:"toolTip", type:"string", defaultValue:null, allowNull:true }); + +// overridden +qx.Proto.updateHeaderCell = function(cellInfo, cellWidget) { + qx.ui.table.DefaultHeaderCellRenderer.prototype.updateHeaderCell.call(this, cellInfo, cellWidget); + + // Set URL to icon + var img = cellWidget.getUserData("qx_ui_table_IconHeaderCellRenderer_icon"); + if (img == null){ + img = new qx.ui.basic.Image(); + cellWidget.setUserData("qx_ui_table_IconHeaderCellRenderer_icon", img); + cellWidget.addAtBegin(img); + } + img.setSource(this.getIconUrl()); + + // Set image tooltip if given + var widgetToolTip = cellWidget.getToolTip(); + if (this.getToolTip() != null){ + + //Create tooltip if necessary + if (true || widgetToolTip == null ){ + widgetToolTip = new qx.ui.popup.ToolTip(this.getToolTip()); + cellWidget.setToolTip(widgetToolTip); + //this.debug("Creating tooltip"); + } + + //Set tooltip text + widgetToolTip.getAtom().setLabel(this.getToolTip()); + //this.debug("Setting tooltip text " + this.getToolTip()); + } + +} + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/RemoteTableModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/RemoteTableModel.js new file mode 100644 index 0000000000..1d59e1c48a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/RemoteTableModel.js @@ -0,0 +1,453 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A table model that loads its data from a backend. + * <p> + * Only those rows are loaded that are near the area the user is currently + * viewing. If the user scrolls, the rows he will see soon are loaded + * asynchroniously in the background. All loaded data is managed in a cache that + * automatically removes the last resently used rows when it gets full. + * <p> + * This class is abstract: The actual loading of row data must be done by + * subclasses. + */ +qx.OO.defineClass("qx.ui.table.RemoteTableModel", qx.ui.table.AbstractTableModel, +function() { + qx.ui.table.AbstractTableModel.call(this); + + this._sortColumnIndex = -1; + this._sortAscending = true; + this._rowCount = -1; + + this._lruCounter = 0; + + // Holds the index of the first block that is currently loading. + // Is -1 if there is currently no request on its way. + this._firstLoadingBlock = -1; + + // Holds the index of the first row that should be loaded when the response of + // the current request arrives. Is -1 we need no following request. + this._firstRowToLoad = -1; + + // Counterpart to _firstRowToLoad + this._lastRowToLoad = -1; + + // Holds whether the current request will bring obsolete data. When true the + // response of the current request will be ignored. + this._ignoreCurrentRequest = false; + + this._rowBlockCache = {}; + this._rowBlockCount = 0; +}); + + +/** The number of rows that are stored in one cache block. */ +qx.OO.addProperty({ name:"blockSize", type:"number", defaultValue:50, allowNull:false }); + +/** The maximum number of row blocks kept in the cache. */ +qx.OO.addProperty({ name:"maxCachedBlockCount", type:"number", defaultValue:15, allowNull:false }); + +/** + * Whether to clear the cache when some rows are removed. + * If false the rows are removed locally in the cache. + */ +qx.OO.addProperty({ name:"clearCacheOnRemove", type:"boolean", defaultValue:false, allowNull:false }); + + +// overridden +qx.Proto.getRowCount = function() { + if (this._rowCount == -1) { + this._loadRowCount(); + + // NOTE: _loadRowCount may set this._rowCount + return (this._rowCount == -1) ? 0 : this._rowCount; + } else { + return this._rowCount; + } +} + + +/** + * Loads the row count from the server. + * <p> + * Implementing classes have to call {@link _onRowDataLoaded()} when the server + * response arrived. That method has to be called! Even when there was an error. + */ +qx.Proto._loadRowCount = function() { + throw new Error("_loadRowCount is abstract"); +}; + + +/** + * Sets the row count. + * <p> + * Has to be called by {@link _loadRowCount()}. + * + * @param rowCount {Integer} the number of rows in this model or null if loading. + */ +qx.Proto._onRowCountLoaded = function(rowCount) { + // this.debug("row count loaded: " + rowCount); + if (rowCount == null) { + rowCount = 0; + } + this._rowCount = rowCount; + + // Inform the listeners + var data = { firstRow:0, lastRow:rowCount - 1, firstColumn:0, lastColumn:this.getColumnCount() - 1 }; + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); +}; + + +/** + * Reloads the model and clears the local cache. + */ +qx.Proto.reloadData = function() { + this.clearCache(); + + // If there is currently a request on its way, then this request will bring + // obsolete data -> Ignore it + if (this._firstLoadingBlock != -1) { + this._ignoreCurrentRequest = true; + } + + // Forget a possibly outstanding request + // (_loadRowCount will tell the listeners anyway, that the whole table changed) + this._firstRowToLoad = -1; + this._lastRowToLoad = -1; + + // NOTE: This will inform the listeners as soon as the new row count is known + this._loadRowCount(); +}; + + +/** + * Clears the cache. + */ +qx.Proto.clearCache = function() { + this._rowBlockCache = {}; + this._rowBlockCount = 0; +}; + + +// overridden +qx.Proto.prefetchRows = function(firstRowIndex, lastRowIndex) { + // this.debug("Prefetch wanted: " + firstRowIndex + ".." + lastRowIndex); + if (this._firstLoadingBlock == -1) { + var blockSize = this.getBlockSize(); + var totalBlockCount = Math.ceil(this._rowCount / blockSize); + + // There is currently no request running -> Start a new one + // NOTE: We load one more block above and below to have a smooth + // scrolling into the next block without blank cells + var firstBlock = parseInt(firstRowIndex / blockSize) - 1; + if (firstBlock < 0) { + firstBlock = 0; + } + var lastBlock = parseInt(lastRowIndex / blockSize) + 1; + if (lastBlock >= totalBlockCount) { + lastBlock = totalBlockCount - 1; + } + + // Check which blocks we have to load + var firstBlockToLoad = -1; + var lastBlockToLoad = -1; + for (var block = firstBlock; block <= lastBlock; block++) { + if (this._rowBlockCache[block] == null || this._rowBlockCache[block].isDirty) { + // We don't have this block + if (firstBlockToLoad == -1) { + firstBlockToLoad = block; + } + lastBlockToLoad = block; + } + } + + // Load the blocks + if (firstBlockToLoad != -1) { + this._firstRowToLoad = -1; + this._lastRowToLoad = -1; + + this._firstLoadingBlock = firstBlockToLoad; + + // this.debug("Starting server request. rows: " + firstRowIndex + ".." + lastRowIndex + ", blocks: " + firstBlockToLoad + ".." + lastBlockToLoad); + this._loadRowData(firstBlockToLoad * blockSize, (lastBlockToLoad + 1) * blockSize - 1); + } + } else { + // There is already a request running -> Remember this request + // so it can be executed after the current one is finished. + this._firstRowToLoad = firstRowIndex; + this._lastRowToLoad = lastRowIndex; + } +}; + + +/** + * Loads some row data from the server. + * <p> + * Implementing classes have to call {@link _onRowDataLoaded()} when the server + * response arrived. That method has to be called! Even when there was an error. + * + * @param firstRow {Integer} The index of the first row to load. + * @param lastRow {Integer} The index of the last row to load. + */ +qx.Proto._loadRowData = function(firstRow, lastRow) { + throw new Error("_loadRowCount is abstract"); +}; + + +/** + * Sets row data. + * <p> + * Has to be called by {@link _loadRowData()}. + * + * @param rowDataArr {Map[]} the loaded row data or null if there was an error. + */ +qx.Proto._onRowDataLoaded = function(rowDataArr) { + if (rowDataArr != null && ! this._ignoreCurrentRequest) { + var blockSize = this.getBlockSize(); + var blockCount = Math.ceil(rowDataArr.length / blockSize); + if (blockCount == 1) { + // We got one block -> Use the rowData directly + this._setRowBlockData(this._firstLoadingBlock, rowDataArr); + } else { + // We got more than one block -> We've to split the rowData + for (var i = 0; i < blockCount; i++) { + var rowOffset = i * blockSize; + var blockRowData = []; + var mailCount = Math.min(blockSize, rowDataArr.length - rowOffset); + for (var row = 0; row < mailCount; row++) { + blockRowData.push(rowDataArr[rowOffset + row]); + } + + this._setRowBlockData(this._firstLoadingBlock + i, blockRowData); + } + } + // this.debug("Got server answer. blocks: " + this._firstLoadingBlock + ".." + (this._firstLoadingBlock + blockCount - 1) + ". mail count: " + rowDataArr.length + " block count:" + blockCount); + + // Inform the listeners + var data = { + firstRow:this._firstLoadingBlock * blockSize, + lastRow:(this._firstLoadingBlock + blockCount + 1) * blockSize - 1, + firstColumn:0, + lastColumn:this.getColumnCount() - 1 + }; + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); + } + + // We're not loading any blocks any more + this._firstLoadingBlock = -1; + this._ignoreCurrentRequest = false; + + // Check whether we have to start a new request + if (this._firstRowToLoad != -1) { + this.prefetchRows(this._firstRowToLoad, this._lastRowToLoad); + } +}; + + +/** + * Sets the data of one block. + * + * @param block {Integer} the index of the block. + * @param rowDataArr {var[][]} the data to set. + */ +qx.Proto._setRowBlockData = function(block, rowDataArr) { + if (this._rowBlockCache[block] == null) { + // This is a new block -> Check whether we have to remove another block first + this._rowBlockCount++; + + while (this._rowBlockCount > this.getMaxCachedBlockCount()) { + // Find the last recently used block + // NOTE: We never remove block 0 and 1 + var lruBlock; + var minLru = this._lruCounter; + for (var currBlock in this._rowBlockCache) { + var currLru = this._rowBlockCache[currBlock].lru; + if (currLru < minLru && currBlock > 1) { + minLru = currLru; + lruBlock = currBlock; + } + } + + // Remove that block + // this.debug("Removing block: " + lruBlock + ". current LRU: " + this._lruCounter); + delete this._rowBlockCache[lruBlock]; + this._rowBlockCount--; + } + } + + this._rowBlockCache[block] = { lru:++this._lruCounter, rowDataArr:rowDataArr }; +}; + + +/** + * Removes a rows from the model. + * + * @param rowIndex {Integer} the index of the row to remove. + */ +qx.Proto.removeRow = function(rowIndex) { + if (this.getClearCacheOnRemove()) { + this.clearCache(); + + // Inform the listeners + var data = { firstRow:0, lastRow:rowCount - 1, firstColumn:0, lastColumn:this.getColumnCount() - 1 }; + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); + } else { + var blockSize = this.getBlockSize(); + var blockCount = Math.ceil(this.getRowCount() / blockSize); + var startBlock = parseInt(rowIndex / blockSize); + + // Remove the row and move the rows of all following blocks + for (var block = startBlock; block <= blockCount; block++) { + var blockData = this._rowBlockCache[block]; + if (blockData != null) { + // Remove the row in the start block + // NOTE: In the other blocks the first row is removed + // (This is the row that was) + var removeIndex = 0; + if (block == startBlock) { + removeIndex = rowIndex - block * blockSize; + } + blockData.rowDataArr.splice(removeIndex, 1); + + if (block == blockCount - 1) { + // This is the last block + if (blockData.rowDataArr.length == 0) { + // It is empty now -> Remove it + delete this._rowBlockCache[block]; + } + } else { + // Try to copy the first row of the next block to the end of this block + // so this block can stays clean + var nextBlockData = this._rowBlockCache[block + 1]; + if (nextBlockData != null) { + blockData.rowDataArr.push(nextBlockData.rowDataArr[0]); + } else { + // There is no row to move -> Mark this block as dirty + blockData.isDirty = true; + } + } + } + } + + if (this._rowCount != -1) { + this._rowCount--; + } + + // Inform the listeners + if (this.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) { + var data = { firstRow:rowIndex, lastRow:this.getRowCount() - 1, firstColumn:0, lastColumn:this.getColumnCount() - 1 }; + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); + } + } +}; + + +/** + * <p>See overridden method for details.</p> + * + * @param rowIndex {Integer} the model index of the row. + * @return {Object} Map containing a value for each column. + */ +qx.Proto.getRowData = function(rowIndex) { + var blockSize = this.getBlockSize(); + var block = parseInt(rowIndex / blockSize); + var blockData = this._rowBlockCache[block]; + if (blockData == null) { + // This block is not (yet) loaded + return null; + } else { + var rowData = blockData.rowDataArr[rowIndex - (block * blockSize)]; + + // Update the last recently used counter + if (blockData.lru != this._lruCounter) { + blockData.lru = ++this._lruCounter; + } + + return rowData; + } +}; + + +// overridden +qx.Proto.getValue = function(columnIndex, rowIndex) { + var rowData = this.getRowData(rowIndex); + if (rowData == null) { + return null; + } else { + var columnId = this.getColumnId(columnIndex); + return rowData[columnId]; + } +}; + + +/** + * Sets whether a column is sortable. + * + * @param columnIndex {Integer} the column of which to set the sortable state. + * @param sortable {Boolean} whether the column should be sortable. + */ +qx.Proto.setColumnSortable = function(columnIndex, sortable) { + if (sortable != this.isColumnSortable(columnIndex)) { + if (this._sortableColArr == null) { + this._sortableColArr = []; + } + this._sortableColArr[columnIndex] = sortable; + + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); + } +} + + +// overridden +qx.Proto.isColumnSortable = function(columnIndex) { + return this._sortableColArr ? (this._sortableColArr[columnIndex] == true) : false; +} + + +// overridden +qx.Proto.sortByColumn = function(columnIndex, ascending) { + if (this._sortColumnIndex != columnIndex || this._sortAscending != ascending) { + this._sortColumnIndex = columnIndex; + this._sortAscending = ascending; + + this.clearCache(); + + // Inform the listeners + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); + } +}; + + +// overridden +qx.Proto.getSortColumnIndex = function() { + return this._sortColumnIndex; +} + + +// overridden +qx.Proto.isSortAscending = function() { + return this._sortAscending; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SelectionManager.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SelectionManager.js new file mode 100644 index 0000000000..6f7fb11eed --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SelectionManager.js @@ -0,0 +1,165 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A selection manager. This is a helper class that handles all selection + * related events and updates a SelectionModel. + * <p> + * Widgets that support selection should use this manager. This way the only + * thing the widget has to do is mapping mouse or key events to indexes and + * call the corresponding handler method. + * + * @see SelectionModel + */ +qx.OO.defineClass("qx.ui.table.SelectionManager", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * The selection model where to set the selection changes. + */ +qx.OO.addProperty({ name:"selectionModel", type:"object", instance:"qx.ui.table.SelectionModel" }); + + +/** + * Handles the mouse down event. + * + * @param index {Integer} the index the mouse is pointing at. + * @param evt {Map} the mouse event. + */ +qx.Proto.handleMouseDown = function(index, evt) { + if (evt.isLeftButtonPressed()) { + var selectionModel = this.getSelectionModel(); + if (!selectionModel.isSelectedIndex(index)) { + // This index is not selected -> We react when the mouse is pressed (because of drag and drop) + this._handleSelectEvent(index, evt); + this._lastMouseDownHandled = true; + } else { + // This index is already selected -> We react when the mouse is released (because of drag and drop) + this._lastMouseDownHandled = false; + } + } else if (evt.isRightButtonPressed() && evt.getModifiers() == 0) { + var selectionModel = this.getSelectionModel(); + if (!selectionModel.isSelectedIndex(index)) { + // This index is not selected -> Set the selection to this index + selectionModel.setSelectionInterval(index, index); + } + } +} + + +/** + * Handles the mouse up event. + * + * @param index {Integer} the index the mouse is pointing at. + * @param evt {Map} the mouse event. + */ +qx.Proto.handleMouseUp = function(index, evt) { + if (evt.isLeftButtonPressed() && !this._lastMouseDownHandled) { + this._handleSelectEvent(index, evt); + } +} + + +/** + * Handles the mouse click event. + * + * @param index {Integer} the index the mouse is pointing at. + * @param evt {Map} the mouse event. + */ +qx.Proto.handleClick = function(index, evt) { +} + + +/** + * Handles the key down event that is used as replacement for mouse clicks + * (Normally space). + * + * @param index {Integer} the index that is currently focused. + * @param evt {Map} the key event. + */ +qx.Proto.handleSelectKeyDown = function(index, evt) { + this._handleSelectEvent(index, evt); +}; + + +/** + * Handles a key down event that moved the focus (E.g. up, down, home, end, ...). + * + * @param index {Integer} the index that is currently focused. + * @param evt {Map} the key event. + */ +qx.Proto.handleMoveKeyDown = function(index, evt) { + var selectionModel = this.getSelectionModel(); + switch (evt.getModifiers()) { + case 0: + selectionModel.setSelectionInterval(index, index); + break; + case qx.event.type.DomEvent.SHIFT_MASK: + var anchor = selectionModel.getAnchorSelectionIndex(); + if (anchor == -1) { + selectionModel.setSelectionInterval(index, index); + } else { + selectionModel.setSelectionInterval(anchor, index); + } + break; + } +} + + +/** + * Handles a select event. + * + * @param index {Integer} the index the event is pointing at. + * @param evt {Map} the mouse event. + */ +qx.Proto._handleSelectEvent = function(index, evt) { + var selectionModel = this.getSelectionModel(); + if (evt.isShiftPressed()) { + var leadIndex = selectionModel.getLeadSelectionIndex(); + if (index != leadIndex || selectionModel.isSelectionEmpty()) { + // The lead selection index was changed + var anchorIndex = selectionModel.getAnchorSelectionIndex(); + if (anchorIndex == -1) { + anchorIndex = index; + } + if (evt.isCtrlOrCommandPressed()) { + selectionModel.addSelectionInterval(anchorIndex, index); + } else { + selectionModel.setSelectionInterval(anchorIndex, index); + } + } + } else if (evt.isCtrlOrCommandPressed()) { + if (selectionModel.isSelectedIndex(index)) { + selectionModel.removeSelectionInterval(index, index); + } else { + selectionModel.addSelectionInterval(index, index); + } + } else { + selectionModel.setSelectionInterval(index, index); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SelectionModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SelectionModel.js new file mode 100644 index 0000000000..2e03a1fc8c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SelectionModel.js @@ -0,0 +1,431 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A selection model. + * + * @event changeSelection {qx.event.type.Event} Fired when the selection has + * changed. + */ +qx.OO.defineClass("qx.ui.table.SelectionModel", qx.core.Target, +function() { + qx.core.Target.call(this); + + this._selectedRangeArr = []; + this._anchorSelectionIndex = -1; + this._leadSelectionIndex = -1; + this.hasBatchModeRefCount = 0; + this._hadChangeEventInBatchMode = false; +}); + + +/** {int} The selection mode "none". Nothing can ever be selected. */ +qx.Class.NO_SELECTION = 1; + +/** {int} The selection mode "single". This mode only allows one selected item. */ +qx.Class.SINGLE_SELECTION = 2; + +/** + * (int) The selection mode "single interval". This mode only allows one + * continuous interval of selected items. + */ +qx.Class.SINGLE_INTERVAL_SELECTION = 3; + +/** + * (int) The selection mode "multiple interval". This mode only allows any + * selection. + */ +qx.Class.MULTIPLE_INTERVAL_SELECTION = 4; + + +/** + * (int) the selection mode. + */ +qx.OO.addProperty({ name:"selectionMode", type:"number", + defaultValue:qx.Class.SINGLE_SELECTION, + allowNull:false, + possibleValues:[ qx.Class.NO_SELECTION, + qx.Class.SINGLE_SELECTION, + qx.Class.SINGLE_INTERVAL_SELECTION, + qx.Class.MULTIPLE_INTERVAL_SELECTION ] }); + +// selectionMode property modifier +qx.Proto._modifySelectionMode = function(selectionMode) { + if (selectionMode == qx.ui.table.SelectionModel.NO_SELECTION) { + this.clearSelection(); + } + return true; +} + + +/** + * <p>Activates / Deactivates batch mode. In batch mode, no change events will be thrown but + * will be collected instead. When batch mode is turned off again and any events have + * been collected, one event is thrown to inform the listeners.</p> + * + * <p>This method supports nested calling, i. e. batch mode can be turned more than once. + * In this case, batch mode will not end until it has been turned off once for each + * turning on.</p> + * + * @param batchMode {Boolean} true to activate batch mode, false to deactivate + * @return {Boolean} true if batch mode is active, false otherwise + * @throws Error if batch mode is turned off once more than it has been turned on + */ +qx.Proto.setBatchMode = function(batchMode) { + if (batchMode){ + this.hasBatchModeRefCount += 1; + } else { + if (this.hasBatchModeRefCount == 0){ + throw new Error("Try to turn off batch mode althoug it was not turned on.") + } + this.hasBatchModeRefCount -= 1; + if (this._hadChangeEventInBatchMode){ + this._hadChangeEventInBatchMode = false; + this._fireChangeSelection(); + } + } + return this.hasBatchMode(); +} + + +/** + * <p>Returns whether batch mode is active. See setter for a description of batch mode.</p> + * + * @return {Boolean} true if batch mode is active, false otherwise + */ +qx.Proto.hasBatchMode = function() { + return this.hasBatchModeRefCount > 0; +} + + +/** + * Returns the first argument of the last call to {@link #setSelectionInterval()}, + * {@link #addSelectionInterval()} or {@link #removeSelectionInterval()}. + * + * @return {Integer} the ancor selection index. + */ +qx.Proto.getAnchorSelectionIndex = function() { + return this._anchorSelectionIndex; +} + + +/** + * Returns the second argument of the last call to {@link #setSelectionInterval()}, + * {@link #addSelectionInterval()} or {@link #removeSelectionInterval()}. + * + * @return {Integer} the lead selection index. + */ +qx.Proto.getLeadSelectionIndex = function() { + return this._leadSelectionIndex; +} + + +/** + * Clears the selection. + */ +qx.Proto.clearSelection = function() { + if (! this.isSelectionEmpty()) { + this._clearSelection(); + this._fireChangeSelection(); + } +} + + +/** + * Returns whether the selection is empty. + * + * @return {Boolean} whether the selection is empty. + */ +qx.Proto.isSelectionEmpty = function() { + return this._selectedRangeArr.length == 0; +} + + +/** + * Returns the number of selected items. + * + * @return {Integer} the number of selected items. + */ +qx.Proto.getSelectedCount = function() { + var selectedCount = 0; + for (var i = 0; i < this._selectedRangeArr.length; i++) { + var range = this._selectedRangeArr[i]; + selectedCount += range.maxIndex - range.minIndex + 1; + } + + return selectedCount; +} + + +/** + * Returns whether a index is selected. + * + * @param index {Integer} the index to check. + * @return {Boolean} whether the index is selected. + */ +qx.Proto.isSelectedIndex = function(index) { + for (var i = 0; i < this._selectedRangeArr.length; i++) { + var range = this._selectedRangeArr[i]; + + if (index >= range.minIndex && index <= range.maxIndex) { + return true; + } + } + + return false; +} + + +/** + * Returns the selected ranges as an array. Each array element has a + * <code>minIndex</code> and a <code>maxIndex</code> property. + * + * @return {Map[]} the selected ranges. + */ +qx.Proto.getSelectedRanges = function() { + // clone the selection array and the individual elements - this prevents the + // caller from messing with the internal model + var retVal = []; + for (var i = 0; i < this._selectedRangeArr.length; i++) { + retVal.push({minIndex: this._selectedRangeArr[i].minIndex, + maxIndex: this._selectedRangeArr[i].maxIndex}); + } + return retVal; +} + + +/** + * Calls a iterator function for each selected index. + * <p> + * Usage Example: + * <pre> + * var selectedRowData = []; + * mySelectionModel.iterateSelection(function(index) { + * selectedRowData.push(myTableModel.getRowData(index)); + * }); + * </pre> + * + * @param iterator {Function} the function to call for each selected index. + * Gets the current index as parameter. + * @param object {var ? null} the object to use when calling the handler. + * (this object will be available via "this" in the iterator) + */ +qx.Proto.iterateSelection = function(iterator, object) { + for (var i = 0; i < this._selectedRangeArr.length; i++) { + for (var j = this._selectedRangeArr[i].minIndex; j <= this._selectedRangeArr[i].maxIndex; j++) { + iterator.call(object, j); + } + } +}; + + +/** + * Sets the selected interval. This will clear the former selection. + * + * @param fromIndex {Integer} the first index of the selection (including). + * @param toIndex {Integer} the last index of the selection (including). + */ +qx.Proto.setSelectionInterval = function(fromIndex, toIndex) { + var SelectionModel = qx.ui.table.SelectionModel; + + switch(this.getSelectionMode()) { + case SelectionModel.NO_SELECTION: + return; + case SelectionModel.SINGLE_SELECTION: + fromIndex = toIndex; + break; + } + + this._clearSelection(); + this._addSelectionInterval(fromIndex, toIndex); + + this._fireChangeSelection(); +} + + +/** + * Adds a selection interval to the current selection. + * + * @param fromIndex {Integer} the first index of the selection (including). + * @param toIndex {Integer} the last index of the selection (including). + */ +qx.Proto.addSelectionInterval = function(fromIndex, toIndex) { + var SelectionModel = qx.ui.table.SelectionModel; + switch (this.getSelectionMode()) { + case SelectionModel.NO_SELECTION: + return; + case SelectionModel.MULTIPLE_INTERVAL_SELECTION: + this._addSelectionInterval(fromIndex, toIndex); + this._fireChangeSelection(); + break; + default: + this.setSelectionInterval(fromIndex, toIndex); + break; + } +} + + +/** + * Removes a interval from the current selection. + * + * @param fromIndex {Integer} the first index of the interval (including). + * @param toIndex {Integer} the last index of the interval (including). + */ +qx.Proto.removeSelectionInterval = function(fromIndex, toIndex) { + this._anchorSelectionIndex = fromIndex; + this._leadSelectionIndex = toIndex; + + var minIndex = Math.min(fromIndex, toIndex); + var maxIndex = Math.max(fromIndex, toIndex); + + // Crop the affected ranges + for (var i = 0; i < this._selectedRangeArr.length; i++) { + var range = this._selectedRangeArr[i]; + + if (range.minIndex > maxIndex) { + // We are done + break; + } else if (range.maxIndex >= minIndex) { + // This range is affected + var minIsIn = (range.minIndex >= minIndex) && (range.minIndex <= maxIndex); + var maxIsIn = (range.maxIndex >= minIndex) && (range.maxIndex <= maxIndex); + + if (minIsIn && maxIsIn) { + // This range is removed completely + this._selectedRangeArr.splice(i, 1); + + // Check this index another time + i--; + } else if (minIsIn) { + // The range is cropped from the left + range.minIndex = maxIndex + 1; + } else if (maxIsIn) { + // The range is cropped from the right + range.maxIndex = minIndex - 1; + } else { + // The range is split + var newRange = { minIndex:maxIndex + 1, maxIndex:range.maxIndex } + this._selectedRangeArr.splice(i + 1, 0, newRange); + + range.maxIndex = minIndex - 1; + + // We are done + break; + } + } + } + + //this._dumpRanges(); + + this._fireChangeSelection(); +} + + +/** + * Clears the selection, but doesn't inform the listeners. + */ +qx.Proto._clearSelection = function() { + this._selectedRangeArr = []; + this._anchorSelectionIndex = -1; + this._leadSelectionIndex = -1; +} + + +/** + * Adds a selection interval to the current selection, but doesn't inform + * the listeners. + * + * @param fromIndex {Integer} the first index of the selection (including). + * @param toIndex {Integer} the last index of the selection (including). + */ +qx.Proto._addSelectionInterval = function(fromIndex, toIndex) { + this._anchorSelectionIndex = fromIndex; + this._leadSelectionIndex = toIndex; + + var minIndex = Math.min(fromIndex, toIndex); + var maxIndex = Math.max(fromIndex, toIndex); + + // Find the index where the new range should be inserted + var newRangeIndex = 0; + for (; newRangeIndex < this._selectedRangeArr.length; newRangeIndex++) { + var range = this._selectedRangeArr[newRangeIndex]; + if (range.minIndex > minIndex) { + break; + } + } + + // Add the new range + this._selectedRangeArr.splice(newRangeIndex, 0, { minIndex:minIndex, maxIndex:maxIndex }); + + // Merge overlapping ranges + var lastRange = this._selectedRangeArr[0]; + for (var i = 1; i < this._selectedRangeArr.length; i++) { + var range = this._selectedRangeArr[i]; + + if (lastRange.maxIndex + 1 >= range.minIndex) { + // The ranges are overlapping -> merge them + lastRange.maxIndex = Math.max(lastRange.maxIndex, range.maxIndex); + + // Remove the current range + this._selectedRangeArr.splice(i, 1); + + // Check this index another time + i--; + } else { + lastRange = range; + } + } + + //this._dumpRanges(); +} + + +/** + * Logs the current ranges for debug perposes. + */ +qx.Proto._dumpRanges = function() { + var text = "Ranges:"; + for (var i = 0; i < this._selectedRangeArr.length; i++) { + var range = this._selectedRangeArr[i]; + text += " [" + range.minIndex + ".." + range.maxIndex + "]"; + } + this.debug(text); +} + + +/** + * Fires the "changeSelection" event to all registered listeners. If the selection model + * currently is in batch mode, only one event will be thrown when batch mode is ended. + */ +qx.Proto._fireChangeSelection = function() { + //In batch mode, remember event but do not throw (yet) + if (this.hasBatchMode()){ + this._hadChangeEventInBatchMode = true; + + //If not in batch mode, throw event + } else if (this.hasEventListeners("changeSelection")) { + this.dispatchEvent(new qx.event.type.Event("changeSelection"), true); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SimpleTableModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SimpleTableModel.js new file mode 100644 index 0000000000..4db88ddb32 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/SimpleTableModel.js @@ -0,0 +1,337 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A simple table model that provides an API for changing the model data. + */ +qx.OO.defineClass("qx.ui.table.SimpleTableModel", qx.ui.table.AbstractTableModel, +function() { + qx.ui.table.AbstractTableModel.call(this); + + this._rowArr = []; + this._sortColumnIndex = -1; + this._sortAscending; + + this._editableColArr = null; +}); + + +/** + * <p>See overridden method for details.</p> + * + * @param rowIndex {Integer} the model index of the row. + * @return {Array} Array containing a value for each column. + */ +qx.Proto.getRowData = function(rowIndex) { + return this._rowArr[rowIndex]; +}; + + +/** + * Returns the data of one row as map containing the column IDs as key and the + * cell values as value. + * + * @param rowIndex {Integer} the model index of the row. + * @return {Map} a Map containing the column values. + */ +qx.Proto.getRowDataAsMap = function(rowIndex) { + var columnArr = this._rowArr[rowIndex]; + var map = {}; + for (var col = 0; col < this.getColumnCount(); col++) { + map[this.getColumnId(col)] = columnArr[col]; + } + return map; +}; + + +/** + * Sets all columns editable or not editable. + * + * @param editable {Boolean} whether all columns are editable. + */ +qx.Proto.setEditable = function(editable) { + this._editableColArr = []; + for (var col = 0; col < this.getColumnCount(); col++) { + this._editableColArr[col] = editable; + } + + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); +} + + +/** + * Sets whether a column is editable. + * + * @param columnIndex {Integer} the column of which to set the editable state. + * @param editable {Boolean} whether the column should be editable. + */ +qx.Proto.setColumnEditable = function(columnIndex, editable) { + if (editable != this.isColumnEditable(columnIndex)) { + if (this._editableColArr == null) { + this._editableColArr = []; + } + this._editableColArr[columnIndex] = editable; + + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); + } +} + + +// overridden +qx.Proto.isColumnEditable = function(columnIndex) { + return this._editableColArr ? (this._editableColArr[columnIndex] == true) : false; +} + + +// overridden +qx.Proto.isColumnSortable = function(columnIndex) { + return true; +} + + +// overridden +qx.Proto.sortByColumn = function(columnIndex, ascending) { + // NOTE: We use different comperators for ascending and descending, + // because comperators should be really fast. + var comperator; + if (ascending) { + comperator = function(row1, row2) { + var obj1 = row1[columnIndex]; + var obj2 = row2[columnIndex]; + return (obj1 > obj2) ? 1 : ((obj1 == obj2) ? 0 : -1); + } + } else { + comperator = function(row1, row2) { + var obj1 = row1[columnIndex]; + var obj2 = row2[columnIndex]; + return (obj1 < obj2) ? 1 : ((obj1 == obj2) ? 0 : -1); + } + } + + this._rowArr.sort(comperator); + + this._sortColumnIndex = columnIndex; + this._sortAscending = ascending; + + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); +} + + +/** + * Clears the sorting. + */ +qx.Proto._clearSorting = function() { + if (this._sortColumnIndex != -1) { + this._sortColumnIndex = -1; + this._sortAscending = true; + + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED); + } +} + + +// overridden +qx.Proto.getSortColumnIndex = function() { + return this._sortColumnIndex; +} + + +// overridden +qx.Proto.isSortAscending = function() { + return this._sortAscending; +} + + +// overridden +qx.Proto.getRowCount = function() { + return this._rowArr.length; +} + + +// overridden +qx.Proto.getValue = function(columnIndex, rowIndex) { + if (rowIndex < 0 || rowIndex >= this._rowArr.length) { + throw new Error("this._rowArr out of bounds: " + rowIndex + " (0.." + this._rowArr.length + ")"); + } + + return this._rowArr[rowIndex][columnIndex]; +} + + +// overridden +qx.Proto.setValue = function(columnIndex, rowIndex, value) { + if (this._rowArr[rowIndex][columnIndex] != value) { + this._rowArr[rowIndex][columnIndex] = value; + + // Inform the listeners + if (this.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) { + var data = { firstRow:rowIndex, lastRow:rowIndex, + firstColumn:columnIndex, lastColumn:columnIndex } + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); + } + + if (columnIndex == this._sortColumnIndex) { + this._clearSorting(); + } + } +} + + +/** + * Sets the whole data in a bulk. + * + * @param rowArr {var[][]} An array containing an array for each row. Each + * row-array contains the values in that row in the order of the columns + * in this model. + */ +qx.Proto.setData = function(rowArr) { + this._rowArr = rowArr; + + // Inform the listeners + if (this.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) { + this.createDispatchEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED); + } + + this._clearSorting(); +} + + +/** + * Returns the data of this model. + * <p> + * Warning: Do not alter this array! If you want to change the data use + * {@link #setData}, {@link #setDataAsMapArray} or {@link #setValue} instead. + * + * @return {var[][]} An array containing an array for each row. Each + * row-array contains the values in that row in the order of the columns + * in this model. + */ +qx.Proto.getData = function() { + return this._rowArr; +}; + + +/** + * Sets the whole data in a bulk. + * + * @param mapArr {Map[]} An array containing a map for each row. Each + * row-map contains the column IDs as key and the cell values as value. + */ +qx.Proto.setDataAsMapArray = function(mapArr) { + this.setData(this._mapArray2RowArr(mapArr)); +}; + + +/** + * Adds some rows to the model. + * <p> + * Warning: The given array will be altered! + * + * @param rowArr {var[][]} An array containing an array for each row. Each + * row-array contains the values in that row in the order of the columns + * in this model. + * @param startIndex {Integer ? null} The index where to insert the new rows. If null, + * the rows are appended to the end. + */ +qx.Proto.addRows = function(rowArr, startIndex) { + if (startIndex == null) { + startIndex = this._rowArr.length; + } + + // Prepare the rowArr so it can be used for apply + rowArr.splice(0, 0, startIndex, 0); + + // Insert the new rows + Array.prototype.splice.apply(this._rowArr, rowArr); + + // Inform the listeners + if (this.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) { + var data = { firstRow:startIndex, lastRow:this._rowArr.length - 1, firstColumn:0, lastColumn:this.getColumnCount() - 1 }; + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); + } + + this._clearSorting(); +}; + + +/** + * Adds some rows to the model. + * <p> + * Warning: The given array (mapArr) will be altered! + * + * @param mapArr {Map[]} An array containing a map for each row. Each + * row-map contains the column IDs as key and the cell values as value. + * @param startIndex {Integer ? null} The index where to insert the new rows. If null, + * the rows are appended to the end. + */ +qx.Proto.addRowsAsMapArray = function(mapArr, startIndex) { + this.addRows(this._mapArray2RowArr(mapArr), startIndex); +}; + + +/** + * Removes some rows from the model. + * + * @param startIndex {Integer} the index of the first row to remove. + * @param howMany {Integer} the number of rows to remove. + */ +qx.Proto.removeRows = function(startIndex, howMany) { + this._rowArr.splice(startIndex, howMany); + + // Inform the listeners + if (this.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) { + var data = { firstRow:startIndex, lastRow:this._rowArr.length - 1, firstColumn:0, lastColumn:this.getColumnCount() - 1 }; + this.dispatchEvent(new qx.event.type.DataEvent(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, data), true); + } + + this._clearSorting(); +}; + + +/** + * Creates an array of maps to an array of arrays. + * + * @param mapArr {Map[]} An array containing a map for each row. Each + * row-map contains the column IDs as key and the cell values as value. + * @return {var[][]} An array containing an array for each row. Each + * row-array contains the values in that row in the order of the columns + * in this model. + */ +qx.Proto._mapArray2RowArr = function(mapArr) { + var rowCount = mapArr.length; + var columnCount = this.getColumnCount(); + var dataArr = new Array(rowCount); + var columnArr; + var j; + for (var i = 0; i < rowCount; ++i) { + columnArr = new Array(columnCount); + for (var j = 0; j < columnCount; ++j) { + columnArr[j] = mapArr[i][this.getColumnId(j)]; + } + dataArr[i] = columnArr; + } + + return dataArr; +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/Table.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/Table.js new file mode 100644 index 0000000000..1fda3f52f2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/Table.js @@ -0,0 +1,1067 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) +#require(qx.ui.table.DefaultDataRowRenderer) +#embed(qx.widgettheme/table/selectColumnOrder.png) + +************************************************************************ */ + +/** + * A table. + * + * @param tableModel {qx.ui.table.TableModel, null} The table model to read the + * data from. + */ +qx.OO.defineClass("qx.ui.table.Table", qx.ui.layout.VerticalBoxLayout, +function(tableModel) { + qx.ui.layout.VerticalBoxLayout.call(this); + + // Create the child widgets + this._scrollerParent = new qx.ui.layout.HorizontalBoxLayout; + this._scrollerParent.setDimension("100%", "1*"); + this._scrollerParent.setSpacing(1); + + this._statusBar = new qx.ui.basic.Label; + this._statusBar.setAppearance("table-focus-statusbar"); + this._statusBar.setDimension("100%", "auto"); + + this.add(this._scrollerParent, this._statusBar); + + this._columnVisibilityBt = new qx.ui.toolbar.Button(null, "widget/table/selectColumnOrder.png"); + this._columnVisibilityBt.addEventListener("execute", this._onColumnVisibilityBtExecuted, this); + + // Create the models + this._selectionManager = new qx.ui.table.SelectionManager; + + this.setSelectionModel(new qx.ui.table.SelectionModel); + this.setTableColumnModel(new qx.ui.table.TableColumnModel); + if (tableModel != null) { + this.setTableModel(tableModel); + } + + // create the main meta column + this.setMetaColumnCounts([ -1 ]); + + // Make focusable + this.setTabIndex(1); + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + this.addEventListener("changeFocused", this._onFocusChanged); + + this._focusedCol = 0; + this._focusedRow = 0; +}); + + +/** The default row renderer to use when {@link #dataRowRenderer} is null. */ +qx.Class.DEFAULT_DATA_ROW_RENDERER = new qx.ui.table.DefaultDataRowRenderer(); + + +/** The selection model. */ +qx.OO.addProperty({ name:"selectionModel", type:"object", instance : "qx.ui.table.SelectionModel" }); + +/** The table model. */ +qx.OO.addProperty({ name:"tableModel", type:"object", instance : "qx.ui.table.TableModel" }); + +/** The table column model. */ +qx.OO.addProperty({ name:"tableColumnModel", type:"object", instance : "qx.ui.table.TableColumnModel" }); + +/** The height of the table rows. */ +qx.OO.addProperty({ name:"rowHeight", type:"number", defaultValue:15 }); + +/** Whether to show the status bar */ +qx.OO.addProperty({ name:"statusBarVisible", type:"boolean", defaultValue:true }); + +/** Whether to show the column visibility button */ +qx.OO.addProperty({ name:"columnVisibilityButtonVisible", type:"boolean", defaultValue:true }); + +/** + * {int[]} The number of columns per meta column. If the last array entry is -1, + * this meta column will get the remaining columns. + */ +qx.OO.addProperty({ name:"metaColumnCounts", type:"object" }); + +/** + * Whether the focus should moved when the mouse is moved over a cell. If false + * the focus is only moved on mouse clicks. + */ +qx.OO.addProperty({ name:"focusCellOnMouseMove", type:"boolean", defaultValue:false }); + +/** + * Whether the table should keep the first visible row complete. If set to false, + * the first row may be rendered partial, depending on the vertical scroll value. + */ +qx.OO.addProperty({ name:"keepFirstVisibleRowComplete", type:"boolean", defaultValue:true }); + +/** + * Whether the table cells should be updated when only the selection or the + * focus changed. This slows down the table update but allows to react on a + * changed selection or a changed focus in a cell renderer. + */ +qx.OO.addProperty({ name:"alwaysUpdateCells", type:"boolean", defaultValue:false }); + +/** The height of the header cells. */ +qx.OO.addProperty({ name:"headerCellHeight", type:"number", defaultValue:16, allowNull:false }); + +/** The renderer to use for styling the rows. */ +qx.OO.addProperty({ name:"dataRowRenderer", type:"object", instance:"qx.ui.table.DataRowRenderer", defaultValue:qx.Class.DEFAULT_DATA_ROW_RENDERER, allowNull:false }); + + +// property modifier +qx.Proto._modifySelectionModel = function(propValue, propOldValue, propData) { + this._selectionManager.setSelectionModel(propValue); + + if (propOldValue != null) { + propOldValue.removeEventListener("changeSelection", this._onSelectionChanged, this); + } + propValue.addEventListener("changeSelection", this._onSelectionChanged, this); + + return true; +} + + +// property modifier +qx.Proto._modifyTableModel = function(propValue, propOldValue, propData) { + this.getTableColumnModel().init(propValue.getColumnCount()); + + if (propOldValue != null) { + propOldValue.removeEventListener(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED, this._onTableModelMetaDataChanged, this); + propOldValue.removeEventListener(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, this._onTableModelDataChanged, this); + } + propValue.addEventListener(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED, this._onTableModelMetaDataChanged, this); + propValue.addEventListener(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, this._onTableModelDataChanged, this); + + // Update the status bar + this._updateStatusBar(); + + return true; +} + + +// property modifier +qx.Proto._modifyTableColumnModel = function(propValue, propOldValue, propData) { + if (propOldValue != null) { + propOldValue.removeEventListener("visibilityChanged", this._onColVisibilityChanged, this); + propOldValue.removeEventListener("widthChanged", this._onColWidthChanged, this); + propOldValue.removeEventListener("orderChanged", this._onColOrderChanged, this); + } + propValue.addEventListener("visibilityChanged", this._onColVisibilityChanged, this); + propValue.addEventListener("widthChanged", this._onColWidthChanged, this); + propValue.addEventListener("orderChanged", this._onColOrderChanged, this); + + return true; +}; + + +// property modifier +qx.Proto._modifyStatusBarVisible = function(propValue, propOldValue, propData) { + this._statusBar.setDisplay(propValue); + + if (propValue) { + this._updateStatusBar(); + } + return true; +}; + + +// property modifier +qx.Proto._modifyColumnVisibilityButtonVisible = function(propValue, propOldValue, propData) { + this._columnVisibilityBt.setDisplay(propValue); + + return true; +}; + + +// property modifier +qx.Proto._modifyMetaColumnCounts = function(propValue, propOldValue, propData) { + var metaColumnCounts = propValue; + var scrollerArr = this._getPaneScrollerArr(); + + // Remove the panes not needed any more + this._cleanUpMetaColumns(metaColumnCounts.length); + + // Update the old panes + var leftX = 0; + for (var i = 0; i < scrollerArr.length; i++) { + var paneScroller = scrollerArr[i]; + var paneModel = paneScroller.getTablePaneModel(); + paneModel.setFirstColumnX(leftX); + paneModel.setMaxColumnCount(metaColumnCounts[i]); + leftX += metaColumnCounts[i]; + } + + // Add the new panes + if (metaColumnCounts.length > scrollerArr.length) { + var selectionModel = this.getSelectionModel(); + var tableModel = this.getTableModel(); + var columnModel = this.getTableColumnModel(); + + for (var i = scrollerArr.length; i < metaColumnCounts.length; i++) { + var paneModel = new qx.ui.table.TablePaneModel(columnModel); + paneModel.setFirstColumnX(leftX); + paneModel.setMaxColumnCount(metaColumnCounts[i]); + leftX += metaColumnCounts[i]; + + var paneScroller = new qx.ui.table.TablePaneScroller(this); + paneScroller.setTablePaneModel(paneModel); + + // Register event listener for vertical scrolling + paneScroller.addEventListener("changeScrollY", this._onScrollY, this); + + this._scrollerParent.add(paneScroller); + } + } + + // Update all meta columns + for (var i = 0; i < scrollerArr.length; i++) { + var paneScroller = scrollerArr[i]; + var isLast = (i == (scrollerArr.length - 1)); + + // Set the right header height + paneScroller.getHeader().setHeight(this.getHeaderCellHeight()); + + // Put the _columnVisibilityBt in the top right corner of the last meta column + paneScroller.setTopRightWidget(isLast ? this._columnVisibilityBt : null); + } + + this._updateScrollerWidths(); + this._updateScrollBarVisibility(); + + return true; +} + + +// property modifier +qx.Proto._modifyFocusCellOnMouseMove = function(propValue, propOldValue, propData) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i].setFocusCellOnMouseMove(propValue); + } + return true; +}; + + +// property modifier +qx.Proto._modifyKeepFirstVisibleRowComplete = function(propValue, propOldValue, propData) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onKeepFirstVisibleRowCompleteChanged(); + } + return true; +}; + + +// property modifier +qx.Proto._modifyHeaderCellHeight = function(propValue, propOldValue, propData) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i].getHeader().setHeight(propValue); + } + return true; +}; + + +/** + * Returns the selection manager. + * + * @return {SelectionManager} the selection manager. + */ +qx.Proto._getSelectionManager = function() { + return this._selectionManager; +}; + + +/** + * Returns an array containing all TablePaneScrollers in this table. + * + * @return {TablePaneScroller[]} all TablePaneScrollers in this table. + */ +qx.Proto._getPaneScrollerArr = function() { + return this._scrollerParent.getChildren(); +} + + +/** + * Returns a TablePaneScroller of this table. + * + * @param metaColumn {Integer} the meta column to get the TablePaneScroller for. + * @return {TablePaneScroller} the TablePaneScroller. + */ +qx.Proto.getPaneScroller = function(metaColumn) { + return this._getPaneScrollerArr()[metaColumn]; +} + + +/** + * Cleans up the meta columns. + * + * @param fromMetaColumn {Integer} the first meta column to clean up. All following + * meta columns will be cleaned up, too. All previous meta columns will + * stay unchanged. If 0 all meta columns will be cleaned up. + */ +qx.Proto._cleanUpMetaColumns = function(fromMetaColumn) { + var scrollerArr = this._getPaneScrollerArr(); + if (scrollerArr != null) { + for (var i = scrollerArr.length - 1; i >= fromMetaColumn; i--) { + var paneScroller = scrollerArr[i]; + paneScroller.removeEventListener("changeScrollY", this._onScrollY, this); + this._scrollerParent.remove(paneScroller); + paneScroller.dispose(); + } + } +} + + +/** + * Event handler. Called when the selection has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onSelectionChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onSelectionChanged(evt); + } + + this._updateStatusBar(); +} + + +/** + * Event handler. Called when the table model meta data has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelMetaDataChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onTableModelMetaDataChanged(evt); + } + + this._updateStatusBar(); +} + + +/** + * Event handler. Called when the table model data has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelDataChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onTableModelDataChanged(evt); + } + + var rowCount = this.getTableModel().getRowCount(); + if (rowCount != this._lastRowCount) { + this._lastRowCount = rowCount; + + this._updateScrollBarVisibility(); + this._updateStatusBar(); + } +}; + + +/** + * Event handler. Called when a TablePaneScroller has been scrolled vertically. + * + * @param evt {Map} the event. + */ +qx.Proto._onScrollY = function(evt) { + if (! this._internalChange) { + this._internalChange = true; + + // Set the same scroll position to all meta columns + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i].setScrollY(evt.getData()); + } + + this._internalChange = false; + } +} + + +/** + * Event handler. Called when a key was pressed. + * + * @param evt {Map} the event. + */ +qx.Proto._onkeydown = function(evt) { + var identifier = evt.getKeyIdentifier(); + + var consumed = false; + var oldFocusedRow = this._focusedRow; + if (this.isEditing()) { + // Editing mode + if (evt.getModifiers() == 0) { + consumed = true; + switch (identifier) { + case "Enter": + this.stopEditing(); + var oldFocusedRow = this._focusedRow; + this.moveFocusedCell(0, 1); + if (this._focusedRow != oldFocusedRow) { + this.startEditing(); + } + break; + case "Escape": + this.cancelEditing(); + this.focus(); + break; + default: + consumed = false; + break; + } + } + } else { + // No editing mode + + // Handle keys that are independant from the modifiers + consumed = true; + switch (identifier) { + case "Home": + this.setFocusedCell(this._focusedCol, 0, true); + break; + case "End": + var rowCount = this.getTableModel().getRowCount(); + this.setFocusedCell(this._focusedCol, rowCount - 1, true); + break; + default: + consumed = false; + break; + } + + // Handle keys that depend on modifiers + if (evt.getModifiers() == 0) { + consumed = true; + switch (identifier) { + case "F2": + case "Enter": + this.startEditing(); + break; + default: + consumed = false; + break; + } + } else if (evt.isCtrlPressed()) { + consumed = true; + switch (identifier) { + case "A": // Ctrl + A + var rowCount = this.getTableModel().getRowCount(); + if (rowCount > 0) { + this.getSelectionModel().setSelectionInterval(0, rowCount - 1); + } + break; + default: + consumed = false; + break; + } + } + } + + if (oldFocusedRow != this._focusedRow) { + // The focus moved -> Let the selection manager handle this event + this._selectionManager.handleMoveKeyDown(this._focusedRow, evt); + } + + if (consumed) { + evt.preventDefault(); + evt.stopPropagation(); + } +}; + + +qx.Proto._onkeypress = function(evt) +{ + if (this.isEditing()) { return } + // No editing mode + var oldFocusedRow = this._focusedRow; + var consumed = true; + + // Handle keys that are independant from the modifiers + var identifier = evt.getKeyIdentifier(); + switch (identifier) { + case "Space": + this._selectionManager.handleSelectKeyDown(this._focusedRow, evt); + break; + + case "Left": + this.moveFocusedCell(-1, 0); + break; + + case "Right": + this.moveFocusedCell(1, 0); + break; + + case "Up": + this.moveFocusedCell(0, -1); + break; + + case "Down": + this.moveFocusedCell(0, 1); + break; + + case "PageUp": + case "PageDown": + var scroller = this.getPaneScroller(0); + var pane = scroller.getTablePane(); + var rowCount = pane.getVisibleRowCount() - 1; + var rowHeight = this.getRowHeight(); + var direction = (identifier == "PageUp") ? -1 : 1; + scroller.setScrollY(scroller.getScrollY() + direction * rowCount * rowHeight); + this.moveFocusedCell(0, direction * rowCount); + break; + + default: + consumed = false; + } + if (oldFocusedRow != this._focusedRow) { + // The focus moved -> Let the selection manager handle this event + this._selectionManager.handleMoveKeyDown(this._focusedRow, evt); + } + + if (consumed) { + evt.preventDefault(); + evt.stopPropagation(); + } +}; + + +/** + * Event handler. Called when the table gets the focus. + */ +qx.Proto._onFocusChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onFocusChanged(evt); + } +}; + + +/** + * Event handler. Called when the visibility of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColVisibilityChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onColVisibilityChanged(evt); + } + + this._updateScrollerWidths(); + this._updateScrollBarVisibility(); +} + + +/** + * Event handler. Called when the width of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColWidthChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onColWidthChanged(evt); + } + + this._updateScrollerWidths(); + this._updateScrollBarVisibility(); +} + + +/** + * Event handler. Called when the column order has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColOrderChanged = function(evt) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i]._onColOrderChanged(evt); + } + + // A column may have been moved between meta columns + this._updateScrollerWidths(); + this._updateScrollBarVisibility(); +} + + +/** + * Gets the TablePaneScroller at a certain x position in the page. If there is + * no TablePaneScroller at this postion, null is returned. + * + * @param pageX {Integer} the position in the page to check (in pixels). + * @return {TablePaneScroller} the TablePaneScroller or null. + * + * @see TablePaneScrollerPool + */ +qx.Proto.getTablePaneScrollerAtPageX = function(pageX) { + var metaCol = this._getMetaColumnAtPageX(pageX); + return (metaCol != -1) ? this.getPaneScroller(metaCol) : null; +} + + +/** + * Sets the currently focused cell. + * + * @param col {Integer} the model index of the focused cell's column. + * @param row {Integer} the model index of the focused cell's row. + * @param scrollVisible {Boolean ? false} whether to scroll the new focused cell + * visible. + * + * @see TablePaneScrollerPool + */ +qx.Proto.setFocusedCell = function(col, row, scrollVisible) { + if (!this.isEditing() && (col != this._focusedCol || row != this._focusedRow)) { + this._focusedCol = col; + this._focusedRow = row; + + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + scrollerArr[i].setFocusedCell(col, row); + } + + if (scrollVisible) { + this.scrollCellVisible(col, row); + } + } +} + + +/** + * Returns the column of the currently focused cell. + * + * @return {Integer} the model index of the focused cell's column. + */ +qx.Proto.getFocusedColumn = function() { + return this._focusedCol; +}; + + +/** + * Returns the row of the currently focused cell. + * + * @return {Integer} the model index of the focused cell's column. + */ +qx.Proto.getFocusedRow = function() { + return this._focusedRow; +}; + + +/** + * Moves the focus. + * + * @param deltaX {Integer} The delta by which the focus should be moved on the x axis. + * @param deltaY {Integer} The delta by which the focus should be moved on the y axis. + */ +qx.Proto.moveFocusedCell = function(deltaX, deltaY) { + var col = this._focusedCol; + var row = this._focusedRow; + + if (deltaX != 0) { + var columnModel = this.getTableColumnModel(); + var x = columnModel.getVisibleX(col); + var colCount = columnModel.getVisibleColumnCount(); + x = qx.lang.Number.limit(x + deltaX, 0, colCount - 1); + col = columnModel.getVisibleColumnAtX(x); + } + + if (deltaY != 0) { + var tableModel = this.getTableModel(); + row = qx.lang.Number.limit(row + deltaY, 0, tableModel.getRowCount() - 1); + } + + this.setFocusedCell(col, row, true); +} + + +/** + * Scrolls a cell visible. + * + * @param col {Integer} the model index of the column the cell belongs to. + * @param row {Integer} the model index of the row the cell belongs to. + */ +qx.Proto.scrollCellVisible = function(col, row) { + var columnModel = this.getTableColumnModel(); + var x = columnModel.getVisibleX(col); + + var metaColumn = this._getMetaColumnAtColumnX(x); + if (metaColumn != -1) { + this.getPaneScroller(metaColumn).scrollCellVisible(col, row); + } +} + + +/** + * Returns whether currently a cell is editing. + * + * @return whether currently a cell is editing. + */ +qx.Proto.isEditing = function() { + if (this._focusedCol != null) { + var x = this.getTableColumnModel().getVisibleX(this._focusedCol); + var metaColumn = this._getMetaColumnAtColumnX(x); + return this.getPaneScroller(metaColumn).isEditing(); + } +} + + +/** + * Starts editing the currently focused cell. Does nothing if already editing + * or if the column is not editable. + * + * @return {Boolean} whether editing was started + */ +qx.Proto.startEditing = function() { + if (this._focusedCol != null) { + var x = this.getTableColumnModel().getVisibleX(this._focusedCol); + var metaColumn = this._getMetaColumnAtColumnX(x); + return this.getPaneScroller(metaColumn).startEditing(); + } + return false; +} + + +/** + * Stops editing and writes the editor's value to the model. + */ +qx.Proto.stopEditing = function() { + if (this._focusedCol != null) { + var x = this.getTableColumnModel().getVisibleX(this._focusedCol); + var metaColumn = this._getMetaColumnAtColumnX(x); + this.getPaneScroller(metaColumn).stopEditing(); + } +} + + +/** + * Stops editing without writing the editor's value to the model. + */ +qx.Proto.cancelEditing = function() { + if (this._focusedCol != null) { + var x = this.getTableColumnModel().getVisibleX(this._focusedCol); + var metaColumn = this._getMetaColumnAtColumnX(x); + this.getPaneScroller(metaColumn).cancelEditing(); + } +} + + +/** + * Gets the meta column at a certain x position in the page. If there is no + * meta column at this postion, -1 is returned. + * + * @param pageX {Integer} the position in the page to check (in pixels). + * @return {Integer} the index of the meta column or -1. + */ +qx.Proto._getMetaColumnAtPageX = function(pageX) { + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + var elem = scrollerArr[i].getElement(); + if (pageX >= qx.html.Location.getPageBoxLeft(elem) + && pageX <= qx.html.Location.getPageBoxRight(elem)) + { + return i; + } + } + + return -1; +} + + +/** + * Returns the meta column a column is shown in. If the column is not shown at + * all, -1 is returned. + * + * @param visXPos {Integer} the visible x position of the column. + * @return {Integer} the meta column the column is shown in. + */ +qx.Proto._getMetaColumnAtColumnX = function(visXPos) { + var metaColumnCounts = this.getMetaColumnCounts(); + var rightXPos = 0; + for (var i = 0; i < metaColumnCounts.length; i++) { + var counts = metaColumnCounts[i]; + rightXPos += counts; + + if (counts == -1 || visXPos < rightXPos) { + return i; + } + } + + return -1; +} + + +/** + * Updates the text shown in the status bar. + */ +qx.Proto._updateStatusBar = function() { + if (this.getStatusBarVisible()) { + var selectedRowCount = this.getSelectionModel().getSelectedCount(); + var rowCount = this.getTableModel().getRowCount(); + + var text; + if (selectedRowCount == 0) { + text = rowCount + ((rowCount == 1) ? " row" : " rows"); + } else { + text = selectedRowCount + " of " + rowCount + + ((rowCount == 1) ? " row" : " rows") + " selected"; + } + this._statusBar.setHtml(text); + } +} + + +/** + * Updates the widths of all scrollers. + */ +qx.Proto._updateScrollerWidths = function() { +/* no longer needed, per Til, and removing it does not appear to add problems. + * qx.ui.core.Widget.flushGlobalQueues(); + */ + + // Give all scrollers except for the last one the wanted width + // (The last one has a flex with) + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) { + var isLast = (i == (scrollerArr.length - 1)); + var width = isLast ? "1*" : scrollerArr[i].getTablePaneModel().getTotalWidth(); + scrollerArr[i].setWidth(width); + } +} + + +/** + * Updates the visibility of the scrollbars in the meta columns. + */ +qx.Proto._updateScrollBarVisibility = function() { + if (this.isSeeable()) { + var horBar = qx.ui.table.TablePaneScroller.HORIZONTAL_SCROLLBAR; + var verBar = qx.ui.table.TablePaneScroller.VERTICAL_SCROLLBAR; + var scrollerArr = this._getPaneScrollerArr(); + + // Check which scroll bars are needed + var horNeeded = false; + var verNeeded = false; + for (var i = 0; i < scrollerArr.length; i++) { + var isLast = (i == (scrollerArr.length - 1)); + + // Only show the last vertical scrollbar + var bars = scrollerArr[i].getNeededScrollBars(horNeeded, !isLast); + + if (bars & horBar) { + horNeeded = true; + } + if (isLast && (bars & verBar)) { + verNeeded = true; + } + } + + // Set the needed scrollbars + for (var i = 0; i < scrollerArr.length; i++) { + var isLast = (i == (scrollerArr.length - 1)); + + // Only show the last vertical scrollbar + scrollerArr[i].setHorizontalScrollBarVisible(horNeeded); + scrollerArr[i].setVerticalScrollBarVisible(isLast && verNeeded); + } + } +} + + +/** + * Event handler. Called when the column visibiliy button was executed. + */ +qx.Proto._onColumnVisibilityBtExecuted = function() { + if ((this._columnVisibilityMenuCloseTime == null) + || (new Date().getTime() > this._columnVisibilityMenuCloseTime + 200)) + { + this._toggleColumnVisibilityMenu(); + } +} + + +/** + * Toggels the visibility of the menu used to change the visibility of columns. + */ +qx.Proto._toggleColumnVisibilityMenu = function() { + if (this._columnVisibilityMenu == null || !this._columnVisibilityMenu.isSeeable()) { + // Show the menu + + // Create the new menu + var menu = new qx.ui.menu.Menu; + + menu.addEventListener("disappear", function(evt) { + this._columnVisibilityMenuCloseTime = new Date().getTime(); + }, this); + + var tableModel = this.getTableModel(); + var columnModel = this.getTableColumnModel(); + for (var x = 0; x < columnModel.getOverallColumnCount(); x++) { + var col = columnModel.getOverallColumnAtX(x); + var visible = columnModel.isColumnVisible(col); + var cmd = { col:col } + var bt = new qx.ui.menu.CheckBox(tableModel.getColumnName(col), null, visible); + + var handler = this._createColumnVisibilityCheckBoxHandler(col); + bt._handler = handler; + bt.addEventListener("execute", handler, this); + + menu.add(bt); + } + + menu.setParent(this.getTopLevelWidget()); + + this._columnVisibilityMenu = menu; + + // Show the menu + var btElem = this._columnVisibilityBt.getElement(); + menu.setRestrictToPageOnOpen(false); + menu.setTop(qx.html.Location.getClientBoxBottom(btElem)); + menu.setLeft(-1000); + + // NOTE: We have to show the menu in a timeout, otherwise it won't be shown + // at all. + window.setTimeout(function() { + menu.show(); + qx.ui.core.Widget.flushGlobalQueues(); + + menu.setLeft(qx.html.Location.getClientBoxRight(btElem) - menu.getOffsetWidth()); + qx.ui.core.Widget.flushGlobalQueues(); + }, 0); + } else { + // hide the menu + menu.hide(); + this._cleanupColumnVisibilityMenu(); + } +} + + +/** + * Cleans up the column visibility menu. + */ +qx.Proto._cleanupColumnVisibilityMenu = function() { + if (this._columnVisibilityMenu != null && ! this._columnVisibilityMenu.getDisposed()) { + this._columnVisibilityMenu.dispose(); + this._columnVisibilityMenu = null; + } +} + + +/** + * Creates a handler for a check box of the column visibility menu. + * + * @param col {Integer} the model index of column to create the handler for. + */ +qx.Proto._createColumnVisibilityCheckBoxHandler = function(col) { + return function(evt) { + var columnModel = this.getTableColumnModel(); + columnModel.setColumnVisible(col, !columnModel.isColumnVisible(col)); + } +} + + +/** + * Sets the width of a column. + * + * @param col {Integer} the model index of column. + * @param width {Integer} the new width in pixels. + */ +qx.Proto.setColumnWidth = function(col, width) { + this.getTableColumnModel().setColumnWidth(col, width); +} + + +// overridden +qx.Proto._changeInnerWidth = function(newValue, oldValue) { + var self = this; + window.setTimeout(function() { + self._updateScrollBarVisibility(); + qx.ui.core.Widget.flushGlobalQueues(); + }, 0); + + return qx.ui.layout.VerticalBoxLayout.prototype._changeInnerWidth.call(this, newValue, oldValue); +} + + +// overridden +qx.Proto._changeInnerHeight = function(newValue, oldValue) { + var self = this; + window.setTimeout(function() { + self._updateScrollBarVisibility(); + qx.ui.core.Widget.flushGlobalQueues(); + }, 0); + + return qx.ui.layout.VerticalBoxLayout.prototype._changeInnerHeight.call(this, newValue, oldValue); +} + + +// overridden +qx.Proto._afterAppear = function() { + qx.ui.layout.VerticalBoxLayout.prototype._afterAppear.call(this); + + this._updateScrollBarVisibility(); +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + if (this._tableModel) { + this._tableModel.removeEventListener(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED, this._onTableModelMetaDataChanged, this); + } + + this._columnVisibilityBt.removeEventListener("execute", this._onColumnVisibilityBtExecuted, this); + this._columnVisibilityBt.dispose(); + + this._cleanupColumnVisibilityMenu(); + + this._cleanUpMetaColumns(0); + + var selectionModel = this.getSelectionModel(); + if (selectionModel != null) { + selectionModel.removeEventListener("changeSelection", this._onSelectionChanged, this); + } + + var tableModel = this.getTableModel(); + if (tableModel != null) { + tableModel.removeEventListener(qx.ui.table.TableModel.EVENT_TYPE_META_DATA_CHANGED, this._onTableModelMetaDataChanged, this); + tableModel.removeEventListener(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, this._onTableModelDataChanged, this); + } + + var tableColumnModel = this.getTableColumnModel(); + if (tableColumnModel) { + tableColumnModel.removeEventListener("visibilityChanged", this._onColVisibilityChanged, this); + tableColumnModel.removeEventListener("widthChanged", this._onColWidthChanged, this); + tableColumnModel.removeEventListener("orderChanged", this._onColOrderChanged, this); + } + + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + + return qx.ui.layout.VerticalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TableColumnModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TableColumnModel.js new file mode 100644 index 0000000000..9a018d7206 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TableColumnModel.js @@ -0,0 +1,401 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +// These are needed because of their instantiation at bottom. I don't think this +// is a good idea. (wpbasti) +#require(qx.ui.table.DefaultHeaderCellRenderer) +#require(qx.ui.table.DefaultDataCellRenderer) +#require(qx.ui.table.TextFieldCellEditorFactory) + +************************************************************************ */ + +/** + * A model that contains all meta data about columns, such as width, renderers, + * visibility and order. + * + * @event widthChanged {qx.event.type.DataEvent} Fired when the width of a + * column has changed. The data property of the event is a map having the + * following attributes: + * <ul> + * <li>col: The model index of the column the width of which has changed.</li> + * <li>newWidth: The new width of the column in pixels.</li> + * <li>oldWidth: The old width of the column in pixels.</li> + * </ul> + * @event visibilityChangedPre {qx.event.type.DataEvent} Fired when the + * visibility of a column has changed. This event is equal to + * "visibilityChanged", but is fired right before. + * @event visibilityChanged {qx.event.type.DataEvent} Fired when the + * visibility of a column has changed. The data property of the + * event is a map having the following attributes: + * <ul> + * <li>col: The model index of the column the visibility of which has changed.</li> + * <li>visible: Whether the column is now visible.</li> + * </ul> + * @event orderChanged {qx.event.type.DataEvent} Fired when the column order + * has changed. The data property of the + * event is a map having the following attributes: + * <ul> + * <li>col: The model index of the column that was moved.</li> + * <li>fromOverXPos: The old overall x position of the column.</li> + * <li>toOverXPos: The new overall x position of the column.</li> + * </ul> + * + * @see com.ptvag.webcomponent.ui.table.TableModel + */ +qx.OO.defineClass("qx.ui.table.TableColumnModel", qx.core.Target, +function() { + qx.core.Target.call(this); +}); + + +/** + * Initializes the column model. + * + * @param colCount {Integer} the number of columns the model should have. + */ +qx.Proto.init = function(colCount) { + this._columnDataArr = []; + + var width = qx.ui.table.TableColumnModel.DEFAULT_WIDTH; + var headerRenderer = qx.ui.table.TableColumnModel.DEFAULT_HEADER_RENDERER; + var dataRenderer = qx.ui.table.TableColumnModel.DEFAULT_DATA_RENDERER; + var editorFactory = qx.ui.table.TableColumnModel.DEFAULT_EDITOR_FACTORY; + this._overallColumnArr = []; + this._visibleColumnArr = []; + for (var col = 0; col < colCount; col++) { + this._columnDataArr[col] = { width:width, headerRenderer:headerRenderer, + dataRenderer:dataRenderer, editorFactory:editorFactory } + this._overallColumnArr[col] = col; + this._visibleColumnArr[col] = col; + } + + this._colToXPosMap = null; +} + + +/** + * Sets the width of a column. + * + * @param col {Integer} the model index of the column. + * @param width {Integer} the new width the column should get in pixels. + */ +qx.Proto.setColumnWidth = function(col, width) { + var oldWidth = this._columnDataArr[col].width; + if (oldWidth != width) { + this._columnDataArr[col].width = width; + if (this.hasEventListeners("widthChanged")) { + var data = { col:col, newWidth:width, oldWidth:oldWidth } + this.dispatchEvent(new qx.event.type.DataEvent("widthChanged", data), true); + } + } +} + + +/** + * Returns the width of a column. + * + * @param col {Integer} the model index of the column. + * @return {Integer} the width of the column in pixels. + */ +qx.Proto.getColumnWidth = function(col) { + return this._columnDataArr[col].width; +} + + +/** + * Sets the header renderer of a column. + * + * @param col {Integer} the model index of the column. + * @param renderer {HeaderCellRenderer} the new header renderer the column + * should get. + */ +qx.Proto.setHeaderCellRenderer = function(col, renderer) { + this._columnDataArr[col].headerRenderer = renderer; +} + + +/** + * Returns the header renderer of a column. + * + * @param col {Integer} the model index of the column. + * @return {HeaderCellRenderer} the header renderer of the column. + */ +qx.Proto.getHeaderCellRenderer = function(col) { + return this._columnDataArr[col].headerRenderer; +} + + +/** + * Sets the data renderer of a column. + * + * @param col {Integer} the model index of the column. + * @param renderer {DataCellRenderer} the new data renderer the column should get. + */ +qx.Proto.setDataCellRenderer = function(col, renderer) { + this._columnDataArr[col].dataRenderer = renderer; +} + + +/** + * Returns the data renderer of a column. + * + * @param col {Integer} the model index of the column. + * @return {DataCellRenderer} the data renderer of the column. + */ +qx.Proto.getDataCellRenderer = function(col) { + return this._columnDataArr[col].dataRenderer; +} + + +/** + * Sets the cell editor factory of a column. + * + * @param col {Integer} the model index of the column. + * @param factory {CellEditorFactory} the new cell editor factory the column should get. + */ +qx.Proto.setCellEditorFactory = function(col, factory) { + this._columnDataArr[col].editorFactory = factory; +} + + +/** + * Returns the cell editor factory of a column. + * + * @param col {Integer} the model index of the column. + * @return {CellEditorFactory} the cell editor factory of the column. + */ +qx.Proto.getCellEditorFactory = function(col) { + return this._columnDataArr[col].editorFactory; +} + + +/** + * Returns the map that translates model indexes to x positions. + * <p> + * The returned map contains for a model index (int) a map having two + * properties: overX (the overall x position of the column, int) and + * visX (the visible x position of the column, int). visX is missing for + * hidden columns. + * + * @return the "column to x postion" map. + */ +qx.Proto._getColToXPosMap = function() { + if (this._colToXPosMap == null) { + this._colToXPosMap = {}; + for (var overX = 0; overX < this._overallColumnArr.length; overX++) { + var col = this._overallColumnArr[overX]; + this._colToXPosMap[col] = { overX:overX } + } + for (var visX = 0; visX < this._visibleColumnArr.length; visX++) { + var col = this._visibleColumnArr[visX]; + this._colToXPosMap[col].visX = visX; + } + } + return this._colToXPosMap; +} + + +/** + * Returns the number of visible columns. + * + * @return {Integer} the number of visible columns. + */ +qx.Proto.getVisibleColumnCount = function() { + return this._visibleColumnArr.length; +} + + +/** + * Returns the model index of a column at a certain visible x position. + * + * @param visXPos {Integer} the visible x position of the column. + * @return {Integer} the model index of the column. + */ +qx.Proto.getVisibleColumnAtX = function(visXPos) { + return this._visibleColumnArr[visXPos]; +} + + +/** + * Returns the visible x position of a column. + * + * @param col {Integer} the model index of the column. + * @return {Integer} the visible x position of the column. + */ +qx.Proto.getVisibleX = function(col) { + return this._getColToXPosMap()[col].visX; +} + + +/** + * Returns the overall number of columns (including hidden columns). + * + * @return {Integer} the overall number of columns. + */ +qx.Proto.getOverallColumnCount = function() { + return this._overallColumnArr.length; +} + + +/** + * Returns the model index of a column at a certain overall x position. + * + * @param overXPos {Integer} the overall x position of the column. + * @return {Integer} the model index of the column. + */ +qx.Proto.getOverallColumnAtX = function(overXPos) { + return this._overallColumnArr[overXPos]; +} + + +/** + * Returns the overall x position of a column. + * + * @param col {Integer} the model index of the column. + * @return {Integer} the overall x position of the column. + */ +qx.Proto.getOverallX = function(col) { + return this._getColToXPosMap()[col].overX; +} + + +/** + * Returns whether a certain column is visible. + * + * @param col {Integer} the model index of the column. + * @return {Boolean} whether the column is visible. + */ +qx.Proto.isColumnVisible = function(col) { + return (this._getColToXPosMap()[col].visX != null); +} + + +/** + * Sets whether a certain column is visible. + * + * @param col {Integer} the model index of the column. + * @param visible {Boolean} whether the column should be visible. + */ +qx.Proto.setColumnVisible = function(col, visible) { + if (visible != this.isColumnVisible(col)) { + if (visible) { + var colToXPosMap = this._getColToXPosMap(); + + var overX = colToXPosMap[col].overX; + if (overX == null) { + throw new Error("Showing column failed: " + col + + ". The column is not added to this TablePaneModel."); + } + + // get the visX of the next visible column after the column to show + var nextVisX; + for (var x = overX + 1; x < this._overallColumnArr.length; x++) { + var currCol = this._overallColumnArr[x]; + var currVisX = colToXPosMap[currCol].visX; + if (currVisX != null) { + nextVisX = currVisX; + break; + } + } + + // If there comes no visible column any more, then show the column + // at the end + if (nextVisX == null) { + nextVisX = this._visibleColumnArr.length; + } + + // Add the column to the visible columns + this._visibleColumnArr.splice(nextVisX, 0, col); + } else { + var visX = this.getVisibleX(col); + this._visibleColumnArr.splice(visX, 1); + } + + // Invalidate the _colToXPosMap + this._colToXPosMap = null; + + // Inform the listeners + if (! this._internalChange) { + if (this.hasEventListeners("visibilityChangedPre")) { + var data = { col:col, visible:visible } + this.dispatchEvent(new qx.event.type.DataEvent("visibilityChangedPre", data), true); + } + if (this.hasEventListeners("visibilityChanged")) { + var data = { col:col, visible:visible } + this.dispatchEvent(new qx.event.type.DataEvent("visibilityChanged", data), true); + } + } + + //this.debug("setColumnVisible col:"+col+",visible:"+visible+",this._overallColumnArr:"+this._overallColumnArr+",this._visibleColumnArr:"+this._visibleColumnArr); + } +} + + +/** + * Moves a column. + * + * @param fromOverXPos {Integer} the overall x postion of the column to move. + * @param toOverXPos {Integer} the overall x postion of where the column should be + * moved to. + */ +qx.Proto.moveColumn = function(fromOverXPos, toOverXPos) { + this._internalChange = true; + + var col = this._overallColumnArr[fromOverXPos]; + var visible = this.isColumnVisible(col); + + if (visible) { + this.setColumnVisible(col, false); + } + + this._overallColumnArr.splice(fromOverXPos, 1); + this._overallColumnArr.splice(toOverXPos, 0, col); + + // Invalidate the _colToXPosMap + this._colToXPosMap = null; + + if (visible) { + this.setColumnVisible(col, true); + } + + this._internalChange = false; + + // Inform the listeners + if (this.hasEventListeners("orderChanged")) { + var data = { col:col, fromOverXPos:fromOverXPos, toOverXPos:toOverXPos } + this.dispatchEvent(new qx.event.type.DataEvent("orderChanged", data), true); + } +} + + +/** {int} the default width of a column in pixels. */ +qx.Class.DEFAULT_WIDTH = 100; + +/** {DefaultDataCellRenderer} the default header cell renderer. */ +qx.Class.DEFAULT_HEADER_RENDERER = new qx.ui.table.DefaultHeaderCellRenderer; + +/** {DefaultDataCellRenderer} the default data cell renderer. */ +qx.Class.DEFAULT_DATA_RENDERER = new qx.ui.table.DefaultDataCellRenderer; + +/** {TextFieldCellEditorFactory} the default editor factory. */ +qx.Class.DEFAULT_EDITOR_FACTORY = new qx.ui.table.TextFieldCellEditorFactory; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TableModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TableModel.js new file mode 100644 index 0000000000..643aac3c4f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TableModel.js @@ -0,0 +1,245 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * The data model of a table. + * + * @event dataChanged {qx.event.type.DataEvent} Fired when the table data changed + * (the stuff shown in the table body). The data property of the event + * may be null or a map having the following attributes: + * <ul> + * <li>firstRow: The index of the first row that has changed.</li> + * <li>lastRow: The index of the last row that has changed.</li> + * <li>firstColumn: The model index of the first column that has changed.</li> + * <li>lastColumn: The model index of the last column that has changed.</li> + * </ul> + * @event metaDataChanged {qx.event.type.Event} Fired when the meta data changed + * (the stuff shown in the table header). + */ +qx.OO.defineClass("qx.ui.table.TableModel", qx.core.Target, +function() { + qx.core.Target.call(this); +}); + + +/** + * Returns the number of rows in the model. + * + * @return {Integer} the number of rows. + */ +qx.Proto.getRowCount = function() { + throw new Error("getRowCount is abstract"); +} + + +/** + * <p>Returns the data of one row. This function may be overriden by models which hold + * all data of a row in one object. By using this function, clients have a way of + * quickly retrieving the entire row data.</p> + * + * <p><b>Important:</b>Models which do not have their row data accessible in one object + * may return null.</p> + * + * @param rowIndex {Integer} the model index of the row. + * @return {Object} the row data as an object or null if the model does not support row data + * objects. The details on the object returned are determined by the model + * implementation only. + */ +qx.Proto.getRowData = function(rowIndex) { + return null; +} + + +/** + * Returns the number of columns in the model. + * + * @return {Integer} the number of columns. + */ +qx.Proto.getColumnCount = function() { + throw new Error("getColumnCount is abstract"); +} + + +/** + * Returns the ID of column. The ID may be used to identify columns + * independent from their index in the model. E.g. for being aware of added + * columns when saving the width of a column. + * + * @param columnIndex {Integer} the index of the column. + * @return {String} the ID of the column. + */ +qx.Proto.getColumnId = function(columnIndex) { + throw new Error("getColumnId is abstract"); +} + + +/** + * Returns the index of a column. + * + * @param columnId {String} the ID of the column. + * @return {Integer} the index of the column. + */ +qx.Proto.getColumnIndexById = function(columnId) { + throw new Error("getColumnIndexById is abstract"); +} + + +/** + * Returns the name of a column. This name will be shown to the user in the + * table header. + * + * @param columnIndex {Integer} the index of the column. + * @return {String} the name of the column. + */ +qx.Proto.getColumnName = function(columnIndex) { + throw new Error("getColumnName is abstract"); +} + + +/** + * Returns whether a column is editable. + * + * @param columnIndex {Integer} the column to check. + * @return {Boolean} whether the column is editable. + */ +qx.Proto.isColumnEditable = function(columnIndex) { + return false; +} + + +/** + * Returns whether a column is sortable. + * + * @param columnIndex {Integer} the column to check. + * @return {Boolean} whether the column is sortable. + */ +qx.Proto.isColumnSortable = function(columnIndex) { + return false; +} + + +/** + * Sorts the model by a column. + * + * @param columnIndex {Integer} the column to sort by. + * @param ascending {Boolean} whether to sort ascending. + */ +qx.Proto.sortByColumn = function(columnIndex, ascending) { +} + + +/** + * Returns the column index the model is sorted by. If the model is not sorted + * -1 is returned. + * + * @return {Integer} the column index the model is sorted by. + */ +qx.Proto.getSortColumnIndex = function() { + return -1; +} + + +/** + * Returns whether the model is sorted ascending. + * + * @return {Boolean} whether the model is sorted ascending. + */ +qx.Proto.isSortAscending = function() { + return true; +} + + +/** + * Prefetches some rows. This is a hint to the model that the specified rows + * will be read soon. + * + * @param firstRowIndex {Integer} the index of first row. + * @param lastRowIndex {Integer} the index of last row. + */ +qx.Proto.prefetchRows = function(firstRowIndex, lastRowIndex) { +} + + +/** + * Returns a cell value by column index. + * + * @param columnIndex {Integer} the index of the column. + * @param rowIndex {Integer} the index of the row. + * @return {var} The value of the cell. + * @see #getValueById{} + */ +qx.Proto.getValue = function(columnIndex, rowIndex) { + throw new Error("getValue is abstract"); +} + + +/** + * Returns a cell value by column ID. + * <p> + * Whenever you have the choice, use {@link #getValue()} instead, + * because this should be faster. + * + * @param columnId {String} the ID of the column. + * @param rowIndex {Integer} the index of the row. + * @return {var} the value of the cell. + */ +qx.Proto.getValueById = function(columnId, rowIndex) { + return this.getValue(this.getColumnIndexById(columnId), rowIndex); +} + + +/** + * Sets a cell value by column index. + * + * @param columnIndex {Integer} The index of the column. + * @param rowIndex {Integer} the index of the row. + * @param value {var} The new value. + * @see #setValueById{} + */ +qx.Proto.setValue = function(columnIndex, rowIndex, value) { + throw new Error("setValue is abstract"); +} + + +/** + * Sets a cell value by column ID. + * <p> + * Whenever you have the choice, use {@link #setValue()} instead, + * because this should be faster. + * + * @param columnId {String} The ID of the column. + * @param rowIndex {Integer} The index of the row. + * @param value {var} The new value. + */ +qx.Proto.setValueById = function(columnId, rowIndex, value) { + return this.setValue(this.getColumnIndexById(columnId), rowIndex, value); +} + + +/** {string} The type of the event fired when the data changed. */ +qx.Class.EVENT_TYPE_DATA_CHANGED = "dataChanged"; + +/** {string} The type of the event fired when the meta data changed. */ +qx.Class.EVENT_TYPE_META_DATA_CHANGED = "metaDataChanged"; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePane.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePane.js new file mode 100644 index 0000000000..ffb4d9e4cf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePane.js @@ -0,0 +1,511 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * The table pane that shows a certain section from a table. This class handles + * the display of the data part of a table and is therefore the base for virtual + * scrolling. + * + * @param paneScroller {TablePaneScroller} the TablePaneScroller the header belongs to. + */ +qx.OO.defineClass("qx.ui.table.TablePane", qx.ui.basic.Terminator, +function(paneScroller) { + qx.ui.basic.Terminator.call(this); + + this._paneScroller = paneScroller; + + // this.debug("USE_ARRAY_JOIN:" + qx.ui.table.TablePane.USE_ARRAY_JOIN + ", USE_TABLE:" + qx.ui.table.TablePane.USE_TABLE); + + this._lastColCount = 0; + this._lastRowCount = 0; +}); + +/** The index of the first row to show. */ +qx.OO.addProperty({ name:"firstVisibleRow", type:"number", defaultValue:0 }); + +/** The number of rows to show. */ +qx.OO.addProperty({ name:"visibleRowCount", type:"number", defaultValue:0 }); + + +// property modifier +qx.Proto._modifyFirstVisibleRow = function(propValue, propOldValue, propData) { + this._updateContent(); + return true; +} + + +// property modifier +qx.Proto._modifyVisibleRowCount = function(propValue, propOldValue, propData) { + this._updateContent(); + return true; +} + + +// overridden +qx.Proto._afterAppear = function() { + qx.ui.basic.Terminator.prototype._afterAppear.call(this); + + if (this._updateWantedWhileInvisible) { + // We are visible now and an update was wanted while we were invisible + // -> Do the update now + this._updateContent(); + this._updateWantedWhileInvisible = false; + } +}; + + +/** + * Returns the TablePaneScroller this pane belongs to. + * + * @return {TablePaneScroller} the TablePaneScroller. + */ +qx.Proto.getPaneScroller = function() { + return this._paneScroller; +}; + + +/** + * Returns the table this pane belongs to. + * + * @return {Table} the table. + */ +qx.Proto.getTable = function() { + return this._paneScroller.getTable(); +}; + + +/** + * Sets the currently focused cell. + * + * @param col {Integer} the model index of the focused cell's column. + * @param row {Integer} the model index of the focused cell's row. + * @param massUpdate {Boolean ? false} Whether other updates are planned as well. + * If true, no repaint will be done. + */ +qx.Proto.setFocusedCell = function(col, row, massUpdate) { + if (col != this._focusedCol || row != this._focusedRow) { + var oldCol = this._focusedCol; + var oldRow = this._focusedRow; + this._focusedCol = col; + this._focusedRow = row; + + // Update the focused row background + if (row != oldRow && !massUpdate) { + // NOTE: Only the old and the new row need update + this._updateContent(false, oldRow, true); + this._updateContent(false, row, true); + } + } +} + + +/** + * Event handler. Called when the selection has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onSelectionChanged = function(evt) { + this._updateContent(false, null, true); +} + + +/** + * Event handler. Called when the table gets or looses the focus. + * + * @param evt {Map} the event. + */ +qx.Proto._onFocusChanged = function(evt) { + this._updateContent(false, null, true); +}; + + +/** + * Event handler. Called when the width of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColWidthChanged = function(evt) { + this._updateContent(true); +} + + +/** + * Event handler. Called the column order has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColOrderChanged = function(evt) { + this._updateContent(true); +} + + +/** + * Event handler. Called when the pane model has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onPaneModelChanged = function(evt) { + this._updateContent(true); +} + + +/** + * Event handler. Called when the table model data has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelDataChanged = function(evt) { + var data = evt.getData ? evt.getData() : null; + + var firstRow = this.getFirstVisibleRow(); + var rowCount = this.getVisibleRowCount(); + if (data == null || data.lastRow == -1 + || data.lastRow >= firstRow && data.firstRow < firstRow + rowCount) + { + // The change intersects this pane + this._updateContent(); + } +} + + +/** + * Event handler. Called when the table model meta data has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelMetaDataChanged = function(evt) { + this._updateContent(); +} + + +/** + * Updates the content of the pane. + * + * @param completeUpdate {Boolean ? false} if true a complete update is performed. + * On a complete update all cell widgets are recreated. + * @param onlyRow {Integer ? null} if set only the specified row will be updated. + * @param onlySelectionOrFocusChanged {Boolean ? false} if true, cell values won't + * be updated. Only the row background will. + */ +qx.Proto._updateContent = function(completeUpdate, onlyRow, + onlySelectionOrFocusChanged) +{ + if (! this.isSeeable()) { + this._updateWantedWhileInvisible = true; + return; + } + + if (qx.ui.table.TablePane.USE_ARRAY_JOIN) { + this._updateContent_array_join(completeUpdate, onlyRow, onlySelectionOrFocusChanged); + } else { + this._updateContent_orig(completeUpdate, onlyRow, onlySelectionOrFocusChanged); + } +} + + +/** + * Updates the content of the pane (implemented using array joins). + * + * @param completeUpdate {Boolean ? false} if true a complete update is performed. + * On a complete update all cell widgets are recreated. + * @param onlyRow {Integer ? null} if set only the specified row will be updated. + * @param onlySelectionOrFocusChanged {Boolean ? false} if true, cell values won't + * be updated. Only the row background will. + */ +qx.Proto._updateContent_array_join = function(completeUpdate, onlyRow, + onlySelectionOrFocusChanged) +{ + var TablePane = qx.ui.table.TablePane; + + var table = this.getTable(); + + var selectionModel = table.getSelectionModel(); + var tableModel = table.getTableModel(); + var columnModel = table.getTableColumnModel(); + var paneModel = this.getPaneScroller().getTablePaneModel(); + var rowRenderer = table.getDataRowRenderer(); + + var colCount = paneModel.getColumnCount(); + var rowHeight = table.getRowHeight(); + + var firstRow = this.getFirstVisibleRow(); + var rowCount = this.getVisibleRowCount(); + var modelRowCount = tableModel.getRowCount(); + if (firstRow + rowCount > modelRowCount) { + rowCount = Math.max(0, modelRowCount - firstRow); + } + + var cellInfo = { table:table }; + cellInfo.styleHeight = rowHeight; + + var htmlArr = []; + var rowWidth = paneModel.getTotalWidth(); + + if (TablePane.USE_TABLE) { + // The table test + htmlArr.push('<table cellspacing\="0" cellpadding\="0" style\="table-layout:fixed;font-family:'); + htmlArr.push(qx.ui.table.TablePane.CONTENT_ROW_FONT_FAMILY_TEST); + htmlArr.push(';font-size:'); + htmlArr.push(qx.ui.table.TablePane.CONTENT_ROW_FONT_SIZE_TEST); + htmlArr.push(';width:'); + htmlArr.push(rowWidth); + htmlArr.push('px"><colgroup>'); + + for (var x = 0; x < colCount; x++) { + var col = paneModel.getColumnAtX(x); + + htmlArr.push('<col width="'); + htmlArr.push(columnModel.getColumnWidth(col)); + htmlArr.push('"/>'); + } + + htmlArr.push('</colgroup><tbody>'); + } + + tableModel.prefetchRows(firstRow, firstRow + rowCount - 1); + for (var y = 0; y < rowCount; y++) { + var row = firstRow + y; + + cellInfo.row = row; + cellInfo.selected = selectionModel.isSelectedIndex(row); + cellInfo.focusedRow = (this._focusedRow == row); + cellInfo.rowData = tableModel.getRowData(row); + + // Update this row + if (TablePane.USE_TABLE) { + htmlArr.push('<tr style\="height:'); + htmlArr.push(rowHeight); + } else { + htmlArr.push('<div style\="position:absolute;left:0px;top:'); + htmlArr.push(y * rowHeight); + htmlArr.push('px;width:'); + htmlArr.push(rowWidth); + htmlArr.push('px;height:'); + htmlArr.push(rowHeight); + htmlArr.push('px'); + } + + rowRenderer._createRowStyle_array_join(cellInfo, htmlArr); + + htmlArr.push('">'); + + var left = 0; + for (var x = 0; x < colCount; x++) { + var col = paneModel.getColumnAtX(x); + cellInfo.xPos = x; + cellInfo.col = col; + cellInfo.editable = tableModel.isColumnEditable(col); + cellInfo.focusedCol = (this._focusedCol == col); + cellInfo.value = tableModel.getValue(col, row); + var cellWidth = columnModel.getColumnWidth(col); + + cellInfo.styleLeft = left; + cellInfo.styleWidth = cellWidth; + + var cellRenderer = columnModel.getDataCellRenderer(col); + cellRenderer.createDataCellHtml_array_join(cellInfo, htmlArr); + + left += cellWidth; + } + + if (TablePane.USE_TABLE) { + htmlArr.push('</tr>'); + } else { + htmlArr.push('</div>'); + } + } + + if (TablePane.USE_TABLE) { + htmlArr.push('</tbody></table>'); + } + + var elem = this.getElement(); + // this.debug(">>>" + htmlArr.join("") + "<<<") + elem.innerHTML = htmlArr.join(""); + + this.setHeight(rowCount * rowHeight); + + this._lastColCount = colCount; + this._lastRowCount = rowCount; +} + + +/** + * Updates the content of the pane (old implementation). + * + * @param completeUpdate {Boolean ? false} if true a complete update is performed. + * On a complete update all cell widgets are recreated. + * @param onlyRow {Integer ? null} if set only the specified row will be updated. + * @param onlySelectionOrFocusChanged {Boolean ? false} if true, cell values won't + * be updated. Only the row background will. + */ +qx.Proto._updateContent_orig = function(completeUpdate, onlyRow, + onlySelectionOrFocusChanged) +{ + var TablePane = qx.ui.table.TablePane; + + var table = this.getTable(); + + var alwaysUpdateCells = table.getAlwaysUpdateCells(); + + var selectionModel = table.getSelectionModel(); + var tableModel = table.getTableModel(); + var columnModel = table.getTableColumnModel(); + var paneModel = this.getPaneScroller().getTablePaneModel(); + var rowRenderer = table.getDataRowRenderer(); + + var colCount = paneModel.getColumnCount(); + var rowHeight = table.getRowHeight(); + + var firstRow = this.getFirstVisibleRow(); + var rowCount = this.getVisibleRowCount(); + var modelRowCount = tableModel.getRowCount(); + if (firstRow + rowCount > modelRowCount) { + rowCount = Math.max(0, modelRowCount - firstRow); + } + + // Remove the rows that are not needed any more + if (completeUpdate || this._lastRowCount > rowCount) { + var firstRowToRemove = completeUpdate ? 0 : rowCount; + this._cleanUpRows(firstRowToRemove); + } + + if (TablePane.USE_TABLE) { + throw new Error("Combination of USE_TABLE==true and USE_ARRAY_JOIN==false is not yet implemented"); + } + + var elem = this.getElement(); + var childNodes = elem.childNodes; + var cellInfo = { table:table }; + tableModel.prefetchRows(firstRow, firstRow + rowCount - 1); + for (var y = 0; y < rowCount; y++) { + var row = firstRow + y; + if ((onlyRow != null) && (row != onlyRow)) { + continue; + } + + cellInfo.row = row; + cellInfo.selected = selectionModel.isSelectedIndex(row); + cellInfo.focusedRow = (this._focusedRow == row); + cellInfo.rowData = tableModel.getRowData(row); + + // Update this row + var rowElem; + var recyleRowElem; + if (y < childNodes.length) { + rowElem = childNodes[y]; + recyleRowElem = true + } else { + var rowElem = document.createElement("div"); + + //rowElem.style.position = "relative"; + rowElem.style.position = "absolute"; + rowElem.style.left = "0px"; + rowElem.style.top = (y * rowHeight) + "px"; + + rowElem.style.height = rowHeight + "px"; + elem.appendChild(rowElem); + recyleRowElem = false; + } + + rowRenderer.updateDataRowElement(cellInfo, rowElem); + + if (alwaysUpdateCells || !recyleRowElem || !onlySelectionOrFocusChanged) { + var html = ""; + var left = 0; + for (var x = 0; x < colCount; x++) { + var col = paneModel.getColumnAtX(x); + cellInfo.xPos = x; + cellInfo.col = col; + cellInfo.editable = tableModel.isColumnEditable(col); + cellInfo.focusedCol = (this._focusedCol == col); + cellInfo.value = tableModel.getValue(col, row); + var width = columnModel.getColumnWidth(col); + cellInfo.style = 'position:absolute;left:' + left + + 'px;top:0px;width:' + width + + 'px; height:' + rowHeight + "px"; + + var cellRenderer = columnModel.getDataCellRenderer(col); + if (recyleRowElem) { + var cellElem = rowElem.childNodes[x]; + cellRenderer.updateDataCellElement(cellInfo, cellElem); + } else { + html += cellRenderer.createDataCellHtml(cellInfo); + } + + left += width; + } + if (! recyleRowElem) { + rowElem.style.width = left + "px"; + rowElem.innerHTML = html; + } + } + } + + this.setHeight(rowCount * rowHeight); + + this._lastColCount = colCount; + this._lastRowCount = rowCount; +} + + +/** + * Cleans up the row widgets. + * + * @param firstRowToRemove {Integer} the visible index of the first row to clean up. + * All following rows will be cleaned up, too. + */ +qx.Proto._cleanUpRows = function(firstRowToRemove) { + var elem = this.getElement(); + if (elem) { + var childNodes = this.getElement().childNodes; + var paneModel = this.getPaneScroller().getTablePaneModel(); + var colCount = paneModel.getColumnCount(); + for (var y = childNodes.length - 1; y >= firstRowToRemove; y--) { + elem.removeChild(childNodes[y]); + } + } +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + this._cleanUpRows(0); + + return qx.ui.basic.Terminator.prototype.dispose.call(this); +} + + +qx.Class.USE_ARRAY_JOIN = false; +qx.Class.USE_TABLE = false; + + +qx.Class.CONTENT_ROW_FONT_FAMILY_TEST = "'Segoe UI', Corbel, Calibri, Tahoma, 'Lucida Sans Unicode', sans-serif"; +qx.Class.CONTENT_ROW_FONT_SIZE_TEST = "11px"; + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneHeader.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneHeader.js new file mode 100644 index 0000000000..6b7ffff6d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneHeader.js @@ -0,0 +1,277 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * Shows the header of a table. + * + * @param paneScroller {TablePaneScroller} the TablePaneScroller the header belongs to. + */ +qx.OO.defineClass("qx.ui.table.TablePaneHeader", qx.ui.layout.HorizontalBoxLayout, +function(paneScroller) { + qx.ui.layout.HorizontalBoxLayout.call(this); + + this._paneScroller = paneScroller; +}); + + +/** + * Returns the TablePaneScroller this header belongs to. + * + * @return {TablePaneScroller} the TablePaneScroller. + */ +qx.Proto.getPaneScroller = function() { + return this._paneScroller; +}; + + +/** + * Returns the table this header belongs to. + * + * @return {Table} the table. + */ +qx.Proto.getTable = function() { + return this._paneScroller.getTable(); +}; + + +/** + * Event handler. Called when the width of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColWidthChanged = function(evt) { + var data = evt.getData(); + this.setColumnWidth(data.col, data.newWidth); +} + + +/** + * Event handler. Called the column order has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColOrderChanged = function(evt) { + this._updateContent(true); +} + + +/** + * Event handler. Called when the pane model has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onPaneModelChanged = function(evt) { + this._updateContent(true); +} + + +/** + * Event handler. Called when the table model meta data has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelMetaDataChanged = function(evt) { + this._updateContent(); +} + + +/** + * Sets the column width. This overrides the width from the column model. + * + * @param col {Integer} the column to change the width for. + * @param width {Integer} the new width. + */ +qx.Proto.setColumnWidth = function(col, width) { + var x = this.getPaneScroller().getTablePaneModel().getX(col); + var children = this.getChildren(); + if (children[x] != null) { + children[x].setWidth(width); + } +} + + +/** + * Sets the column the mouse is currently over. + * + * @param col {Integer} the model index of the column the mouse is currently over or + * null if the mouse is over no column. + */ +qx.Proto.setMouseOverColumn = function(col) { + if (col != this._lastMouseOverColumn) { + var paneModel = this.getPaneScroller().getTablePaneModel(); + var children = this.getChildren(); + + if (this._lastMouseOverColumn != null) { + var widget = children[paneModel.getX(this._lastMouseOverColumn)]; + if (widget != null) { + widget.removeState("mouseover"); + } + } + if (col != null) { + children[paneModel.getX(col)].addState("mouseover"); + } + + this._lastMouseOverColumn = col; + } +} + + +/** + * Shows the feedback shown while a column is moved by the user. + * + * @param col {Integer} the model index of the column to show the move feedback for. + * @param x {Integer} the x position the left side of the feeback should have + * (in pixels, relative to the left side of the header). + */ +qx.Proto.showColumnMoveFeedback = function(col, x) { + var elem = this.getElement(); + if (this._moveFeedback == null) { + var xPos = this.getPaneScroller().getTablePaneModel().getX(col); + var cellWidget = this.getChildren()[xPos]; + + // Create the feedback + // Workaround: Since a cloned widget throws an exception when it is + // added to another component we have to create a new one + // using the renderer + //this._moveFeedback = cellWidget.clone(); + var tableModel = this.getTable().getTableModel(); + var columnModel = this.getTable().getTableColumnModel(); + var cellInfo = { xPos:xPos, col:col, name:tableModel.getColumnName(col) } + var cellRenderer = columnModel.getHeaderCellRenderer(col); + + var feedback = cellRenderer.createHeaderCell(cellInfo); + // Configure the feedback + feedback.setWidth(cellWidget.getBoxWidth()); + feedback.setHeight(cellWidget.getBoxHeight()); + feedback.setZIndex(1000000); + feedback.setOpacity(0.8); + feedback.setTop(qx.html.Location.getClientBoxTop(elem)); + this.getTopLevelWidget().add(feedback); + this._moveFeedback = feedback; + } + + this._moveFeedback.setLeft(qx.html.Location.getClientBoxLeft(elem) + x); +} + + +/** + * Hides the feedback shown while a column is moved by the user. + */ +qx.Proto.hideColumnMoveFeedback = function() { + if (this._moveFeedback != null) { + this.getTopLevelWidget().remove(this._moveFeedback); + this._moveFeedback.dispose(); + this._moveFeedback = null; + } +} + + +/** + * Returns whether the column move feedback is currently shown. + */ +qx.Proto.isShowingColumnMoveFeedback = function() { + return this._moveFeedback != null; +} + + +/** + * Updates the content of the header. + * + * @param completeUpdate {Boolean} if true a complete update is performed. On a + * complete update all header widgets are recreated. + */ +qx.Proto._updateContent = function(completeUpdate) { + var tableModel = this.getTable().getTableModel(); + var columnModel = this.getTable().getTableColumnModel(); + var paneModel = this.getPaneScroller().getTablePaneModel(); + + var children = this.getChildren(); + var oldColCount = children.length; + var colCount = paneModel.getColumnCount(); + + var sortedColum = tableModel.getSortColumnIndex(); + + // Remove all widgets on the complete update + if (completeUpdate) { + this._cleanUpCells(); + } + + // Update the header + var cellInfo = {}; + cellInfo.sortedAscending = tableModel.isSortAscending(); + for (var x = 0; x < colCount; x++) { + var col = paneModel.getColumnAtX(x); + + var colWidth = columnModel.getColumnWidth(col); + + // TODO: Get real cell renderer + var cellRenderer = columnModel.getHeaderCellRenderer(col); + + cellInfo.xPos = x; + cellInfo.col = col; + cellInfo.name = tableModel.getColumnName(col); + cellInfo.editable = tableModel.isColumnEditable(col); + cellInfo.sorted = (col == sortedColum); + + // Get the cached widget + var cachedWidget = children[x]; + + // Create or update the widget + if (cachedWidget == null) { + // We have no cached widget -> create it + cachedWidget = cellRenderer.createHeaderCell(cellInfo); + cachedWidget.set({ width:colWidth, height:"100%" }); + + this.add(cachedWidget); + } else { + // This widget already created before -> recycle it + cellRenderer.updateHeaderCell(cellInfo, cachedWidget); + } + } +} + + +/** + * Cleans up all header cells. + */ +qx.Proto._cleanUpCells = function() { + var children = this.getChildren(); + for (var x = children.length - 1; x >= 0; x--) { + var cellWidget = children[x]; + //this.debug("disposed:" + cellWidget.getDisposed() + ",has parent: " + (cellWidget.getParent() != null) + ",x:"+x); + this.remove(cellWidget); + cellWidget.dispose(); + } +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneModel.js new file mode 100644 index 0000000000..7e77757f9f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneModel.js @@ -0,0 +1,181 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * The model of a table pane. This model works as proxy to a + * {@link TableColumnModel} and manages the visual order of the columns shown in + * a {@link TablePane}. + * + * @param tableColumnModel {TableColumnModel} The TableColumnModel of which this + * model is the proxy. + * + * @event modelChanged {qx.event.type.Event} Fired when the model changed. + */ +qx.OO.defineClass("qx.ui.table.TablePaneModel", qx.core.Target, +function(tableColumnModel) { + qx.core.Target.call(this); + + tableColumnModel.addEventListener("visibilityChangedPre", this._onColVisibilityChanged, this); + + this._tableColumnModel = tableColumnModel; +}); + + +/** The visible x position of the first column this model should contain. */ +qx.OO.addProperty({ name : "firstColumnX", type : "number", defaultValue : 0 }); + +/** + * The maximum number of columns this model should contain. If -1 this model will + * contain all remaining columns. + */ +qx.OO.addProperty({ name : "maxColumnCount", type : "number", defaultValue : -1 }); + + +// property modifier +qx.Proto._modifyFirstColumnX = function(propValue, propOldValue, propData) { + this._columnCount = null; + this.createDispatchEvent(qx.ui.table.TablePaneModel.EVENT_TYPE_MODEL_CHANGED); + return true; +} + + +// property modifier +qx.Proto._modifyMaxColumnCount = function(propValue, propOldValue, propData) { + this._columnCount = null; + this.createDispatchEvent(qx.ui.table.TablePaneModel.EVENT_TYPE_MODEL_CHANGED); + return true; +} + + +/** + * Event handler. Called when the visibility of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColVisibilityChanged = function(evt) { + this._columnCount = null; + + // TODO: Check whether the column is in this model (This is a little bit + // tricky, because the column could _have been_ in this model, but is + // not in it after the change) + this.createDispatchEvent(qx.ui.table.TablePaneModel.EVENT_TYPE_MODEL_CHANGED); +} + + +/** + * Returns the number of columns in this model. + * + * @return {Integer} the number of columns in this model. + */ +qx.Proto.getColumnCount = function() { + if (this._columnCount == null) { + var firstX = this.getFirstColumnX(); + var maxColCount = this.getMaxColumnCount(); + var totalColCount = this._tableColumnModel.getVisibleColumnCount(); + + if (maxColCount == -1 || (firstX + maxColCount) > totalColCount) { + this._columnCount = totalColCount - firstX; + } else { + this._columnCount = maxColCount; + } + } + return this._columnCount; +} + + +/** + * Returns the model index of the column at the position <code>xPos</code>. + * + * @param xPos {Integer} the x postion in the table pane of the column. + * @return {Integer} the model index of the column. + */ +qx.Proto.getColumnAtX = function(xPos) { + var firstX = this.getFirstColumnX(); + return this._tableColumnModel.getVisibleColumnAtX(firstX + xPos); +} + + +/** + * Returns the x position of the column <code>col</code>. + * + * @param col {Integer} the model index of the column. + * @return {Integer} the x postion in the table pane of the column. + */ +qx.Proto.getX = function(col) { + var firstX = this.getFirstColumnX(); + var maxColCount = this.getMaxColumnCount(); + + var x = this._tableColumnModel.getVisibleX(col) - firstX; + if (x >= 0 && (maxColCount == -1 || x < maxColCount)) { + return x; + } else { + return -1; + } +} + + +/** + * Gets the position of the left side of a column (in pixels, relative to the + * left side of the table pane). + * <p> + * This value corresponds to the sum of the widths of all columns left of the + * column. + * + * @param col {Integer} the model index of the column. + * @return the position of the left side of the column. + */ +qx.Proto.getColumnLeft = function(col) { + var left = 0; + var colCount = this.getColumnCount(); + for (var x = 0; x < colCount; x++) { + var currCol = this.getColumnAtX(x); + if (currCol == col) { + return left; + } + + left += this._tableColumnModel.getColumnWidth(currCol); + } + return -1; +} + + +/** + * Returns the total width of all columns in the model. + * + * @return {Integer} the total width of all columns in the model. + */ +qx.Proto.getTotalWidth = function() { + var totalWidth = 0; + var colCount = this.getColumnCount(); + for (var x = 0; x < colCount; x++) { + var col = this.getColumnAtX(x); + totalWidth += this._tableColumnModel.getColumnWidth(col); + } + return totalWidth; +} + + +/** {string} The type of the event fired when the model changed. */ +qx.Class.EVENT_TYPE_MODEL_CHANGED = "modelChanged"; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneScroller.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneScroller.js new file mode 100644 index 0000000000..8629be1fc0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TablePaneScroller.js @@ -0,0 +1,1346 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * Shows a whole meta column. This includes a {@link TablePaneHeader}, + * a {@link TablePane} and the needed scroll bars. This class handles the + * virtual scrolling and does all the mouse event handling. + * + * @param table {Table} the table the scroller belongs to. + */ +qx.OO.defineClass("qx.ui.table.TablePaneScroller", qx.ui.layout.VerticalBoxLayout, +function(table) { + qx.ui.layout.VerticalBoxLayout.call(this); + + this._table = table; + + // init scrollbars + this._verScrollBar = new qx.ui.core.ScrollBar(false); + this._horScrollBar = new qx.ui.core.ScrollBar(true); + + var scrollBarWidth = this._verScrollBar.getPreferredBoxWidth(); + + this._verScrollBar.setWidth("auto"); + this._horScrollBar.setHeight("auto"); + this._horScrollBar.setPaddingRight(scrollBarWidth); + //this._verScrollBar.setMergeEvents(true); + + this._horScrollBar.addEventListener("changeValue", this._onScrollX, this); + this._verScrollBar.addEventListener("changeValue", this._onScrollY, this); + + // init header + this._header = new qx.ui.table.TablePaneHeader(this); + this._header.set({ width:"auto", height:"auto" }); + + this._headerClipper = new qx.ui.layout.CanvasLayout; + this._headerClipper.setDimension("1*", "auto"); + this._headerClipper.setOverflow("hidden"); + this._headerClipper.add(this._header); + + this._spacer = new qx.ui.basic.Terminator; + this._spacer.setWidth(scrollBarWidth); + + this._top = new qx.ui.layout.HorizontalBoxLayout; + this._top.setHeight("auto"); + this._top.add(this._headerClipper, this._spacer); + + // init pane + this._tablePane = new qx.ui.table.TablePane(this); + this._tablePane.set({ width:"auto", height:"auto" }); + + this._focusIndicator = new qx.ui.layout.HorizontalBoxLayout; + this._focusIndicator.setAppearance("table-focus-indicator"); + this._focusIndicator.hide(); + + // Workaround: If the _focusIndicator has no content if always gets a too + // high hight in IE. + var dummyContent = new qx.ui.basic.Terminator; + dummyContent.setWidth(0); + this._focusIndicator.add(dummyContent); + + this._paneClipper = new qx.ui.layout.CanvasLayout; + this._paneClipper.setWidth("1*"); + this._paneClipper.setOverflow("hidden"); + this._paneClipper.add(this._tablePane, this._focusIndicator); + this._paneClipper.addEventListener("mousewheel", this._onmousewheel, this); + + // add all child widgets + var scrollerBody = new qx.ui.layout.HorizontalBoxLayout; + scrollerBody.setHeight("1*"); + scrollerBody.add(this._paneClipper, this._verScrollBar); + + this.add(this._top, scrollerBody, this._horScrollBar); + + // init event handlers + this.addEventListener("mousemove", this._onmousemove, this); + this.addEventListener("mousedown", this._onmousedown, this); + this.addEventListener("mouseup", this._onmouseup, this); + this.addEventListener("click", this._onclick, this); + this.addEventListener("dblclick", this._ondblclick, this); + this.addEventListener("mouseout", this._onmouseout, this); +}); + +/** Whether to show the horizontal scroll bar */ +qx.OO.addProperty({ name:"horizontalScrollBarVisible", type:"boolean", defaultValue:true }); + +/** Whether to show the vertical scroll bar */ +qx.OO.addProperty({ name:"verticalScrollBarVisible", type:"boolean", defaultValue:true }); + +/** The table pane model. */ +qx.OO.addProperty({ name:"tablePaneModel", type:"object", instance:"qx.ui.table.TablePaneModel" }); + +/** The current position of the the horizontal scroll bar. */ +qx.OO.addProperty({ name:"scrollX", type:"number", allowNull:false, defaultValue:0 }); + +/** The current position of the the vertical scroll bar. */ +qx.OO.addProperty({ name:"scrollY", type:"number", allowNull:false, defaultValue:0 }); + +/** + * Whether column resize should be live. If false, during resize only a line is + * shown and the real resize happens when the user releases the mouse button. + */ +qx.OO.addProperty({ name:"liveResize", type:"boolean", defaultValue:false }); + +/** + * Whether the focus should moved when the mouse is moved over a cell. If false + * the focus is only moved on mouse clicks. + */ +qx.OO.addProperty({ name:"focusCellOnMouseMove", type:"boolean", defaultValue:false }); + +/** + * Whether to handle selections via the selection manager before setting the + * focus. The traditional behavior is to handle selections after setting the + * focus, but setting the focus means redrawing portions of the table, and + * some subclasses may want to modify the data to be displayed based on the + * selection. + */ +qx.OO.addProperty({ name:"selectBeforeFocus", type:"boolean", defaultValue:false }); + + +// property modifier +qx.Proto._modifyHorizontalScrollBarVisible = function(propValue, propOldValue, propData) { + // Workaround: We can't use setDisplay, because the scroll bar needs its + // correct height in order to check its value. When using + // setDisplay(false) the height isn't relayouted any more + if (propValue) { + this._horScrollBar.setHeight("auto"); + } else { + this._horScrollBar.setHeight(0); + } + this._horScrollBar.setVisibility(propValue); + + // NOTE: We have to flush the queues before updating the content so the new + // layout has been applied and _updateContent is able to work with + // correct values. + qx.ui.core.Widget.flushGlobalQueues(); + this._updateContent(); + + return true; +} + + +// property modifier +qx.Proto._modifyVerticalScrollBarVisible = function(propValue, propOldValue, propData) { + // Workaround: See _modifyHorizontalScrollBarVisible + if (propValue) { + this._verScrollBar.setWidth("auto"); + } else { + this._verScrollBar.setWidth(0); + } + this._verScrollBar.setVisibility(propValue); + + var scrollBarWidth = propValue ? this._verScrollBar.getPreferredBoxWidth() : 0; + this._horScrollBar.setPaddingRight(scrollBarWidth); + this._spacer.setWidth(scrollBarWidth); + + return true; +} + + +// property modifier +qx.Proto._modifyTablePaneModel = function(propValue, propOldValue, propData) { + if (propOldValue != null) { + propOldValue.removeEventListener("modelChanged", this._onPaneModelChanged, this); + } + propValue.addEventListener("modelChanged", this._onPaneModelChanged, this); + + return true; +} + + +// property modifier +qx.Proto._modifyScrollX = function(propValue, propOldValue, propData) { + this._horScrollBar.setValue(propValue); + return true; +} + + +// property modifier +qx.Proto._modifyScrollY = function(propValue, propOldValue, propData) { + this._verScrollBar.setValue(propValue); + return true; +} + + +/** + * Returns the table this scroller belongs to. + * + * @return {Table} the table. + */ +qx.Proto.getTable = function() { + return this._table; +}; + + +/** + * Event handler. Called when the visibility of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColVisibilityChanged = function(evt) { + this._updateHorScrollBarMaximum(); + this._updateFocusIndicator(); +} + + +/** + * Event handler. Called when the width of a column has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColWidthChanged = function(evt) { + this._header._onColWidthChanged(evt); + this._tablePane._onColWidthChanged(evt); + + var data = evt.getData(); + var paneModel = this.getTablePaneModel(); + var x = paneModel.getX(data.col); + if (x != -1) { + // The change was in this scroller + this._updateHorScrollBarMaximum(); + this._updateFocusIndicator(); + } +} + + +/** + * Event handler. Called when the column order has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onColOrderChanged = function(evt) { + this._header._onColOrderChanged(evt); + this._tablePane._onColOrderChanged(evt); + + this._updateHorScrollBarMaximum(); +} + + +/** + * Event handler. Called when the table model has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelDataChanged = function(evt) { + this._tablePane._onTableModelDataChanged(evt); + + var rowCount = this.getTable().getTableModel().getRowCount(); + if (rowCount != this._lastRowCount) { + this._lastRowCount = rowCount; + + this._updateVerScrollBarMaximum(); + if (this.getFocusedRow() >= rowCount) { + if (rowCount == 0) { + this.setFocusedCell(null, null); + } else { + this.setFocusedCell(this.getFocusedColumn(), rowCount - 1); + } + } + } +} + + +/** + * Event handler. Called when the selection has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onSelectionChanged = function(evt) { + this._tablePane._onSelectionChanged(evt); +}; + + +/** + * Event handler. Called when the table gets or looses the focus. + * + * @param evt {Map} the event. + */ +qx.Proto._onFocusChanged = function(evt) { + this._focusIndicator.setState("tableHasFocus", this.getTable().getFocused()); + + this._tablePane._onFocusChanged(evt); +}; + + +/** + * Event handler. Called when the table model meta data has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onTableModelMetaDataChanged = function(evt) { + this._header._onTableModelMetaDataChanged(evt); + this._tablePane._onTableModelMetaDataChanged(evt); +}; + + +/** + * Event handler. Called when the pane model has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onPaneModelChanged = function(evt) { + this._header._onPaneModelChanged(evt); + this._tablePane._onPaneModelChanged(evt); +}; + + +/** + * Updates the maximum of the horizontal scroll bar, so it corresponds to the + * total width of the columns in the table pane. + */ +qx.Proto._updateHorScrollBarMaximum = function() { + this._horScrollBar.setMaximum(this.getTablePaneModel().getTotalWidth()); +} + + +/** + * Updates the maximum of the vertical scroll bar, so it corresponds to the + * number of rows in the table. + */ +qx.Proto._updateVerScrollBarMaximum = function() { + var rowCount = this.getTable().getTableModel().getRowCount(); + var rowHeight = this.getTable().getRowHeight(); + + if (this.getTable().getKeepFirstVisibleRowComplete()) { + this._verScrollBar.setMaximum((rowCount + 1) * rowHeight); + } else { + this._verScrollBar.setMaximum(rowCount * rowHeight); + } +} + + +/** + * Event handler. Called when the table property "keepFirstVisibleRowComplete" + * changed. + */ +qx.Proto._onKeepFirstVisibleRowCompleteChanged = function() { + this._updateVerScrollBarMaximum(); + this._updateContent(); +}; + + +// overridden +qx.Proto._changeInnerHeight = function(newValue, oldValue) { + // The height has changed -> Update content + this._postponedUpdateContent(); + + return qx.ui.layout.VerticalBoxLayout.prototype._changeInnerHeight.call(this, newValue, oldValue); +} + + +// overridden +qx.Proto._afterAppear = function() { + qx.ui.layout.VerticalBoxLayout.prototype._afterAppear.call(this); + + var self = this; + this.getElement().onselectstart = qx.lang.Function.returnFalse; + + this._updateContent(); + this._header._updateContent(); + this._updateHorScrollBarMaximum(); + this._updateVerScrollBarMaximum(); +} + + +/** + * Event handler. Called when the horizontal scroll bar moved. + * + * @param evt {Map} the event. + */ +qx.Proto._onScrollX = function(evt) { + // Workaround: See _updateContent + this._header.setLeft(-evt.getData()); + + this._paneClipper.setScrollLeft(evt.getData()); + this.setScrollX(evt.getData()); +} + + +/** + * Event handler. Called when the vertical scroll bar moved. + * + * @param evt {Map} the event. + */ +qx.Proto._onScrollY = function(evt) { + this._postponedUpdateContent(); + this.setScrollY(evt.getData()); +} + + +/** + * Event handler. Called when the user moved the mouse wheel. + * + * @param evt {Map} the event. + */ +qx.Proto._onmousewheel = function(evt) { + this._verScrollBar.setValue(this._verScrollBar.getValue() + - evt.getWheelDelta() * this.getTable().getRowHeight()); + + // Update the focus + if (this._lastMousePageX && this.getFocusCellOnMouseMove()) { + this._focusCellAtPagePos(this._lastMousePageX, this._lastMousePageY); + } +} + + +/** + * Event handler. Called when the user moved the mouse. + * + * @param evt {Map} the event. + */ +qx.Proto._onmousemove = function(evt) { + var tableModel = this.getTable().getTableModel(); + var columnModel = this.getTable().getTableColumnModel(); + + var useResizeCursor = false; + var mouseOverColumn = null; + + var pageX = evt.getPageX(); + var pageY = evt.getPageY(); + + // Workaround: In onmousewheel the event has wrong coordinates for pageX + // and pageY. So we remember the last move event. + this._lastMousePageX = pageX; + this._lastMousePageY = pageY; + + if (this._resizeColumn != null) { + // We are currently resizing -> Update the position + var minColumnWidth = qx.ui.table.TablePaneScroller.MIN_COLUMN_WIDTH; + var newWidth = Math.max(minColumnWidth, this._lastResizeWidth + pageX - this._lastResizeMousePageX); + + if (this.getLiveResize()) { + columnModel.setColumnWidth(this._resizeColumn, newWidth); + } else { + this._header.setColumnWidth(this._resizeColumn, newWidth); + + var paneModel = this.getTablePaneModel(); + this._showResizeLine(paneModel.getColumnLeft(this._resizeColumn) + newWidth); + } + + useResizeCursor = true; + this._lastResizeMousePageX += newWidth - this._lastResizeWidth; + this._lastResizeWidth = newWidth; + } else if (this._moveColumn != null) { + // We are moving a column + + // Check whether we moved outside the click tolerance so we can start + // showing the column move feedback + // (showing the column move feedback prevents the onclick event) + var clickTolerance = qx.ui.table.TablePaneScroller.CLICK_TOLERANCE; + if (this._header.isShowingColumnMoveFeedback() + || pageX > this._lastMoveMousePageX + clickTolerance + || pageX < this._lastMoveMousePageX - clickTolerance) + { + this._lastMoveColPos += pageX - this._lastMoveMousePageX; + + this._header.showColumnMoveFeedback(this._moveColumn, this._lastMoveColPos); + + // Get the responsible scroller + var targetScroller = this._table.getTablePaneScrollerAtPageX(pageX); + if (this._lastMoveTargetScroller && this._lastMoveTargetScroller != targetScroller) { + this._lastMoveTargetScroller.hideColumnMoveFeedback(); + } + if (targetScroller != null) { + this._lastMoveTargetX = targetScroller.showColumnMoveFeedback(pageX); + } else { + this._lastMoveTargetX = null; + } + + this._lastMoveTargetScroller = targetScroller; + this._lastMoveMousePageX = pageX; + } + } else { + // This is a normal mouse move + var row = this._getRowForPagePos(pageX, pageY); + if (row == -1) { + // The mouse is over the header + var resizeCol = this._getResizeColumnForPageX(pageX); + if (resizeCol != -1) { + // The mouse is over a resize region -> Show the right cursor + useResizeCursor = true; + } else { + var col = this._getColumnForPageX(pageX); + if (col != null && tableModel.isColumnSortable(col)) { + mouseOverColumn = col; + } + } + } else if (row != null) { + // The mouse is over the data -> update the focus + if (this.getFocusCellOnMouseMove()) { + this._focusCellAtPagePos(pageX, pageY); + } + } + } + + // Workaround: Setting the cursor to the right widget doesn't work + //this._header.setCursor(useResizeCursor ? "e-resize" : null); + this.getTopLevelWidget().setGlobalCursor(useResizeCursor ? qx.ui.table.TablePaneScroller.CURSOR_RESIZE_HORIZONTAL : null); + + this._header.setMouseOverColumn(mouseOverColumn); +} + + +/** + * Event handler. Called when the user pressed a mouse button. + * + * @param evt {Map} the event. + */ +qx.Proto._onmousedown = function(evt) { + var tableModel = this.getTable().getTableModel(); + var columnModel = this.getTable().getTableColumnModel(); + + var pageX = evt.getPageX(); + var pageY = evt.getPageY(); + var row = this._getRowForPagePos(pageX, pageY); + if (row == -1) { + // mouse is in header + var resizeCol = this._getResizeColumnForPageX(pageX); + if (resizeCol != -1) { + // The mouse is over a resize region -> Start resizing + this._resizeColumn = resizeCol; + this._lastResizeMousePageX = pageX; + this._lastResizeWidth = columnModel.getColumnWidth(this._resizeColumn); + this.setCapture(true); + } else { + // The mouse is not in a resize region + var col = this._getColumnForPageX(pageX); + if (col != null) { + // Prepare column moving + this._moveColumn = col; + this._lastMoveMousePageX = pageX; + this._lastMoveColPos = this.getTablePaneModel().getColumnLeft(col); + this.setCapture(true); + } + } + } else if (row != null) { + var selectBeforeFocus = this.getSelectBeforeFocus(); + + if (selectBeforeFocus) { + this.getTable()._getSelectionManager().handleMouseDown(row, evt); + } + + // The mouse is over the data -> update the focus + if (! this.getFocusCellOnMouseMove()) { + this._focusCellAtPagePos(pageX, pageY); + } + + if (! selectBeforeFocus) { + this.getTable()._getSelectionManager().handleMouseDown(row, evt); + } + } +} + + +/** + * Event handler. Called when the user released a mouse button. + * + * @param evt {Map} the event. + */ +qx.Proto._onmouseup = function(evt) { + var columnModel = this.getTable().getTableColumnModel(); + var paneModel = this.getTablePaneModel(); + + if (this._resizeColumn != null) { + // We are currently resizing -> Finish resizing + if (! this.getLiveResize()) { + this._hideResizeLine(); + columnModel.setColumnWidth(this._resizeColumn, this._lastResizeWidth); + } + + this._resizeColumn = null; + this.setCapture(false); + + this.getTopLevelWidget().setGlobalCursor(null); + } else if (this._moveColumn != null) { + // We are moving a column -> Drop the column + this._header.hideColumnMoveFeedback(); + if (this._lastMoveTargetScroller) { + this._lastMoveTargetScroller.hideColumnMoveFeedback(); + } + + if (this._lastMoveTargetX != null) { + var fromVisXPos = paneModel.getFirstColumnX() + paneModel.getX(this._moveColumn); + var toVisXPos = this._lastMoveTargetX; + if (toVisXPos != fromVisXPos && toVisXPos != fromVisXPos + 1) { + // The column was really moved to another position + // (and not moved before or after itself, which is a noop) + + // Translate visible positions to overall positions + var fromCol = columnModel.getVisibleColumnAtX(fromVisXPos); + var toCol = columnModel.getVisibleColumnAtX(toVisXPos); + var fromOverXPos = columnModel.getOverallX(fromCol); + var toOverXPos = (toCol != null) ? columnModel.getOverallX(toCol) : columnModel.getOverallColumnCount(); + + if (toOverXPos > fromOverXPos) { + // Don't count the column itself + toOverXPos--; + } + + // Move the column + columnModel.moveColumn(fromOverXPos, toOverXPos); + } + } + + this._moveColumn = null; + this._lastMoveTargetX = null; + this.setCapture(false); + } else { + // This is a normal mouse up + var row = this._getRowForPagePos(evt.getPageX(), evt.getPageY()); + if (row != -1 && row != null) { + this.getTable()._getSelectionManager().handleMouseUp(row, evt); + } + } +} + + +/** + * Event handler. Called when the user clicked a mouse button. + * + * @param evt {Map} the event. + */ +qx.Proto._onclick = function(evt) { + var tableModel = this.getTable().getTableModel(); + + var pageX = evt.getPageX(); + var pageY = evt.getPageY(); + var row = this._getRowForPagePos(pageX, pageY); + if (row == -1) { + // mouse is in header + var resizeCol = this._getResizeColumnForPageX(pageX); + if (resizeCol == -1) { + // mouse is not in a resize region + var col = this._getColumnForPageX(pageX); + if (col != null && tableModel.isColumnSortable(col)) { + // Sort that column + var sortCol = tableModel.getSortColumnIndex(); + var ascending = (col != sortCol) ? true : !tableModel.isSortAscending(); + + tableModel.sortByColumn(col, ascending); + this.getTable().getSelectionModel().clearSelection(); + } + } + } else if (row != null) { + this.getTable()._getSelectionManager().handleClick(row, evt); + } +} + + +/** + * Event handler. Called when the user double clicked a mouse button. + * + * @param evt {Map} the event. + */ +qx.Proto._ondblclick = function(evt) { + if (! this.isEditing()) { + this._focusCellAtPagePos(evt.getPageX(), evt.getPageY()); + this.startEditing(); + } +} + + +/** + * Event handler. Called when the mouse moved out. + * + * @param evt {Map} the event. + */ +qx.Proto._onmouseout = function(evt) { + /* + // Workaround: See _onmousemove + this._lastMousePageX = null; + this._lastMousePageY = null; + */ + + // Reset the resize cursor when the mouse leaves the header + // If currently a column is resized then do nothing + // (the cursor will be reset on mouseup) + if (this._resizeColumn == null) { + this.getTopLevelWidget().setGlobalCursor(null); + } + + this._header.setMouseOverColumn(null); +} + + +/** + * Shows the resize line. + * + * @param x {Integer} the position where to show the line (in pixels, relative to + * the left side of the pane). + */ +qx.Proto._showResizeLine = function(x) { + var resizeLine = this._resizeLine; + if (resizeLine == null) { + resizeLine = new qx.ui.basic.Terminator; + resizeLine.setBackgroundColor("#D6D5D9"); + resizeLine.setWidth(3); + this._paneClipper.add(resizeLine); + qx.ui.core.Widget.flushGlobalQueues(); + + this._resizeLine = resizeLine; + } + + resizeLine._applyRuntimeLeft(x - 2); // -1 for the width + resizeLine._applyRuntimeHeight(this._paneClipper.getBoxHeight() + this._paneClipper.getScrollTop()); + + this._resizeLine.removeStyleProperty("visibility"); +} + + +/** + * Hides the resize line. + */ +qx.Proto._hideResizeLine = function() { + this._resizeLine.setStyleProperty("visibility", "hidden"); +} + + +/** + * Shows the feedback shown while a column is moved by the user. + * + * @param pageX {Integer} the x position of the mouse in the page (in pixels). + * @return {Integer} the visible x position of the column in the whole table. + */ +qx.Proto.showColumnMoveFeedback = function(pageX) { + var paneModel = this.getTablePaneModel(); + var columnModel = this.getTable().getTableColumnModel(); + var paneLeftX = qx.html.Location.getClientBoxLeft(this._tablePane.getElement()); + var colCount = paneModel.getColumnCount(); + + var targetXPos = 0; + var targetX = 0; + var currX = paneLeftX; + for (var xPos = 0; xPos < colCount; xPos++) { + var col = paneModel.getColumnAtX(xPos); + var colWidth = columnModel.getColumnWidth(col); + + if (pageX < currX + colWidth / 2) { + break; + } + + currX += colWidth; + targetXPos = xPos + 1; + targetX = currX - paneLeftX; + } + + // Ensure targetX is visible + var clipperLeftX = qx.html.Location.getClientBoxLeft(this._paneClipper.getElement()); + var clipperWidth = this._paneClipper.getBoxWidth(); + var scrollX = clipperLeftX - paneLeftX; + // NOTE: +2/-1 because of feedback width + targetX = qx.lang.Number.limit(targetX, scrollX + 2, scrollX + clipperWidth - 1); + + this._showResizeLine(targetX); + + // Return the overall target x position + return paneModel.getFirstColumnX() + targetXPos; +} + + +/** + * Hides the feedback shown while a column is moved by the user. + */ +qx.Proto.hideColumnMoveFeedback = function() { + this._hideResizeLine(); +} + + +/** + * Sets the focus to the cell that's located at the page position + * <code>pageX</code>/<code>pageY</code>. If there is no cell at that position, + * nothing happens. + * + * @param pageX {Integer} the x position in the page (in pixels). + * @param pageY {Integer} the y position in the page (in pixels). + */ +qx.Proto._focusCellAtPagePos = function(pageX, pageY) { + var row = this._getRowForPagePos(pageX, pageY); + if (row != -1 && row != null) { + // The mouse is over the data -> update the focus + var col = this._getColumnForPageX(pageX); + if (col != null) { + this._table.setFocusedCell(col, row); + } + } +} + + +/** + * Sets the currently focused cell. + * + * @param col {Integer} the model index of the focused cell's column. + * @param row {Integer} the model index of the focused cell's row. + */ +qx.Proto.setFocusedCell = function(col, row) { + if (!this.isEditing()) { + this._tablePane.setFocusedCell(col, row, this._updateContentPlanned); + + this._focusedCol = col; + this._focusedRow = row; + + // Move the focus indicator + if (! this._updateContentPlanned) { + this._updateFocusIndicator(); + } + } +} + + +/** + * Returns the column of currently focused cell. + * + * @return {Integer} the model index of the focused cell's column. + */ +qx.Proto.getFocusedColumn = function() { + return this._focusedCol; +}; + + +/** + * Returns the row of currently focused cell. + * + * @return {Integer} the model index of the focused cell's column. + */ +qx.Proto.getFocusedRow = function() { + return this._focusedRow; +}; + + +/** + * Scrolls a cell visible. + * + * @param col {Integer} the model index of the column the cell belongs to. + * @param row {Integer} the model index of the row the cell belongs to. + */ +qx.Proto.scrollCellVisible = function(col, row) { + var paneModel = this.getTablePaneModel(); + var xPos = paneModel.getX(col); + + if (xPos != -1) { + var columnModel = this.getTable().getTableColumnModel(); + + var colLeft = paneModel.getColumnLeft(col); + var colWidth = columnModel.getColumnWidth(col); + var rowHeight = this.getTable().getRowHeight(); + var rowTop = row * rowHeight; + + var scrollX = this.getScrollX(); + var scrollY = this.getScrollY(); + var viewWidth = this._paneClipper.getBoxWidth(); + var viewHeight = this._paneClipper.getBoxHeight(); + + // NOTE: We don't use qx.lang.Number.limit, because min should win if max < min + var minScrollX = Math.min(colLeft, colLeft + colWidth - viewWidth); + var maxScrollX = colLeft; + this.setScrollX(Math.max(minScrollX, Math.min(maxScrollX, scrollX))); + + var minScrollY = rowTop + rowHeight - viewHeight; + if (this.getTable().getKeepFirstVisibleRowComplete()) { + minScrollY += rowHeight - 1; + } + var maxScrollY = rowTop; + this.setScrollY(Math.max(minScrollY, Math.min(maxScrollY, scrollY))); + } +} + + +/** + * Returns whether currently a cell is editing. + * + * @return whether currently a cell is editing. + */ +qx.Proto.isEditing = function() { + return this._cellEditor != null; +} + + +/** + * Starts editing the currently focused cell. Does nothing if already editing + * or if the column is not editable. + * + * @return {Boolean} whether editing was started + */ +qx.Proto.startEditing = function() { + var tableModel = this.getTable().getTableModel(); + var col = this._focusedCol; + + if (!this.isEditing() && (col != null) && tableModel.isColumnEditable(col)) { + var row = this._focusedRow; + var xPos = this.getTablePaneModel().getX(col); + var value = tableModel.getValue(col, row); + + this._cellEditorFactory = this.getTable().getTableColumnModel().getCellEditorFactory(col); + var cellInfo = { col:col, row:row, xPos:xPos, value:value } + this._cellEditor = this._cellEditorFactory.createCellEditor(cellInfo); + this._cellEditor.set({ width:"100%", height:"100%" }); + + this._focusIndicator.add(this._cellEditor); + this._focusIndicator.addState("editing"); + + this._cellEditor.addEventListener("changeFocused", this._onCellEditorFocusChanged, this); + + // Workaround: Calling focus() directly has no effect + var editor = this._cellEditor; + window.setTimeout(function() { + editor.focus(); + }, 0); + + return true; + } + + return false; +} + + +/** + * Stops editing and writes the editor's value to the model. + */ +qx.Proto.stopEditing = function() { + this.flushEditor(); + this.cancelEditing(); +} + + +/** + * Writes the editor's value to the model. + */ +qx.Proto.flushEditor = function() { + if (this.isEditing()) { + var value = this._cellEditorFactory.getCellEditorValue(this._cellEditor); + this.getTable().getTableModel().setValue(this._focusedCol, this._focusedRow, value); + + this._table.focus(); + } +} + + +/** + * Stops editing without writing the editor's value to the model. + */ +qx.Proto.cancelEditing = function() { + if (this.isEditing()) { + this._focusIndicator.remove(this._cellEditor); + this._focusIndicator.removeState("editing"); + this._cellEditor.dispose(); + + this._cellEditor.removeEventListener("changeFocused", this._onCellEditorFocusChanged, this); + this._cellEditor = null; + this._cellEditorFactory = null; + } +} + + +/** + * Event handler. Called when the focused state of the cell editor changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onCellEditorFocusChanged = function(evt) { + if (!this._cellEditor.getFocused()) { + this.stopEditing(); + } +} + + +/** + * Returns the model index of the column the mouse is over or null if the mouse + * is not over a column. + * + * @param pageX {Integer} the x position of the mouse in the page (in pixels). + * @return {Integer} the model index of the column the mouse is over. + */ +qx.Proto._getColumnForPageX = function(pageX) { + var headerLeftX = qx.html.Location.getClientBoxLeft(this._header.getElement()); + + var columnModel = this.getTable().getTableColumnModel(); + var paneModel = this.getTablePaneModel(); + var colCount = paneModel.getColumnCount(); + var currX = headerLeftX; + for (var x = 0; x < colCount; x++) { + var col = paneModel.getColumnAtX(x); + var colWidth = columnModel.getColumnWidth(col); + currX += colWidth; + + if (pageX < currX) { + return col; + } + } + + return null; +} + + +/** + * Returns the model index of the column that should be resized when dragging + * starts here. Returns -1 if the mouse is in no resize region of any column. + * + * @param pageX {Integer} the x position of the mouse in the page (in pixels). + * @return {Integer} the column index. + */ +qx.Proto._getResizeColumnForPageX = function(pageX) { + var headerLeftX = qx.html.Location.getClientBoxLeft(this._header.getElement()); + + var columnModel = this.getTable().getTableColumnModel(); + var paneModel = this.getTablePaneModel(); + var colCount = paneModel.getColumnCount(); + var currX = headerLeftX; + var regionRadius = qx.ui.table.TablePaneScroller.RESIZE_REGION_RADIUS; + for (var x = 0; x < colCount; x++) { + var col = paneModel.getColumnAtX(x); + var colWidth = columnModel.getColumnWidth(col); + currX += colWidth; + + if (pageX >= (currX - regionRadius) && pageX <= (currX + regionRadius)) { + return col; + } + } + + return -1; +} + + +/** + * Returns the model index of the row the mouse is currently over. Returns -1 if + * the mouse is over the header. Returns null if the mouse is not over any + * column. + * + * @param pageX {Integer} the mouse x position in the page. + * @param pageY {Integer} the mouse y position in the page. + * @return {Integer} the model index of the row the mouse is currently over. + */ +qx.Proto._getRowForPagePos = function(pageX, pageY) { + var paneClipperElem = this._paneClipper.getElement(); + var paneClipperLeftX = qx.html.Location.getClientBoxLeft(paneClipperElem); + var paneClipperRightX = qx.html.Location.getClientBoxRight(paneClipperElem); + if (pageX < paneClipperLeftX || pageX > paneClipperRightX) { + // There was no cell or header cell hit + return null; + } + + var paneClipperTopY = qx.html.Location.getClientBoxTop(paneClipperElem); + var paneClipperBottomY = qx.html.Location.getClientBoxBottom(paneClipperElem); + if (pageY >= paneClipperTopY && pageY <= paneClipperBottomY) { + // This event is in the pane -> Get the row + var rowHeight = this.getTable().getRowHeight(); + + var scrollY = this._verScrollBar.getValue(); + if (this.getTable().getKeepFirstVisibleRowComplete()) { + scrollY = Math.floor(scrollY / rowHeight) * rowHeight; + } + + var tableY = scrollY + pageY - paneClipperTopY; + var row = Math.floor(tableY / rowHeight); + + var rowCount = this.getTable().getTableModel().getRowCount(); + return (row < rowCount) ? row : null; + } + + var headerElem = this._headerClipper.getElement(); + if (pageY >= qx.html.Location.getClientBoxTop(headerElem) + && pageY <= qx.html.Location.getClientBoxBottom(headerElem) + && pageX <= qx.html.Location.getClientBoxRight(headerElem)) + { + // This event is in the pane -> Return -1 for the header + return -1; + } + + return null; +} + + +/** + * Sets the widget that should be shown in the top right corner. + * <p> + * The widget will not be disposed, when this table scroller is disposed. So the + * caller has to dispose it. + * + * @param widget {qx.ui.core.Widget} The widget to set. May be null. + */ +qx.Proto.setTopRightWidget = function(widget) { + var oldWidget = this._topRightWidget; + if (oldWidget != null) { + this._top.remove(oldWidget); + } + + if (widget != null) { + this._top.remove(this._spacer); + this._top.add(widget); + } else if (oldWidget != null) { + this._top.add(this._spacer); + } + + this._topRightWidget = widget; +} + + +/** + * Returns the header. + * + * @return {TablePaneHeader} the header. + */ +qx.Proto.getHeader = function() { + return this._header; +} + + +/** + * Returns the table pane. + * + * @return {TablePane} the table pane. + */ +qx.Proto.getTablePane = function() { + return this._tablePane; +} + + +/** + * Returns which scrollbars are needed. + * + * @param forceHorizontal {Boolean ? false} Whether to show the horizontal + * scrollbar always. + * @param preventVertical {Boolean ? false} Whether tp show the vertical scrollbar + * never. + * @return {Integer} which scrollbars are needed. This may be any combination of + * {@link #HORIZONTAL_SCROLLBAR} or {@link #VERTICAL_SCROLLBAR} + * (combined by OR). + */ +qx.Proto.getNeededScrollBars = function(forceHorizontal, preventVertical) { + var barWidth = this._verScrollBar.getPreferredBoxWidth(); + + // Get the width and height of the view (without scroll bars) + var viewWidth = this._paneClipper.getInnerWidth(); + if (this.getVerticalScrollBarVisible()) { + viewWidth += barWidth; + } + var viewHeight = this._paneClipper.getInnerHeight(); + if (this.getHorizontalScrollBarVisible()) { + viewHeight += barWidth; + } + + // Get the (virtual) width and height of the pane + var paneWidth = this.getTablePaneModel().getTotalWidth(); + var paneHeight = this.getTable().getRowHeight() * this.getTable().getTableModel().getRowCount(); + + // Check which scrollbars are needed + var horNeeded = false; + var verNeeded = false; + if (paneWidth > viewWidth) { + horNeeded = true; + if (paneHeight > viewHeight - barWidth) { + verNeeded = true; + } + } else if (paneHeight > viewHeight) { + verNeeded = true; + if (!preventVertical && (paneWidth > viewWidth - barWidth)) { + horNeeded = true; + } + } + + // Create the mask + var horBar = qx.ui.table.TablePaneScroller.HORIZONTAL_SCROLLBAR; + var verBar = qx.ui.table.TablePaneScroller.VERTICAL_SCROLLBAR; + return ((forceHorizontal || horNeeded) ? horBar : 0) + | ((preventVertical || !verNeeded) ? 0 : verBar); +} + + +/** + * Does a postponed update of the content. + * + * @see #_updateContent + */ +qx.Proto._postponedUpdateContent = function() { + if (! this._updateContentPlanned) { + var self = this; + window.setTimeout(function() { + self._updateContent(); + self._updateContentPlanned = false; + qx.ui.core.Widget.flushGlobalQueues(); + }, 0); + this._updateContentPlanned = true; + } +} + + +/** + * Updates the content. Sets the right section the table pane should show and + * does the scrolling. + */ +qx.Proto._updateContent = function() { + var paneHeight = this._paneClipper.getInnerHeight(); + var scrollX = this._horScrollBar.getValue(); + var scrollY = this._verScrollBar.getValue(); + var rowHeight = this.getTable().getRowHeight(); + + var firstRow = Math.floor(scrollY / rowHeight); + var oldFirstRow = this._tablePane.getFirstVisibleRow(); + this._tablePane.setFirstVisibleRow(firstRow); + + var rowCount = Math.ceil(paneHeight / rowHeight); + var paneOffset = 0; + if (! this.getTable().getKeepFirstVisibleRowComplete()) { + // NOTE: We don't consider paneOffset, because this may cause alternating + // adding and deleting of one row when scolling. Instead we add one row + // in every case. + rowCount++; + paneOffset = scrollY % rowHeight; + } + this._tablePane.setVisibleRowCount(rowCount); + + if (firstRow != oldFirstRow) { + this._updateFocusIndicator(); + } + + // Workaround: We can't use scrollLeft for the header because IE + // automatically scrolls the header back, when a column is + // resized. + this._header.setLeft(-scrollX); + this._paneClipper.setScrollLeft(scrollX); + this._paneClipper.setScrollTop(paneOffset); + + //this.debug("paneHeight:"+paneHeight+",rowHeight:"+rowHeight+",firstRow:"+firstRow+",rowCount:"+rowCount+",paneOffset:"+paneOffset); +} + + +/** + * Updates the location and the visibility of the focus indicator. + */ +qx.Proto._updateFocusIndicator = function() { + if (this._focusedCol == null) { + this._focusIndicator.hide(); + } else { + var xPos = this.getTablePaneModel().getX(this._focusedCol); + if (xPos == -1) { + this._focusIndicator.hide(); + } else { + var columnModel = this.getTable().getTableColumnModel(); + var paneModel = this.getTablePaneModel(); + + var firstRow = this._tablePane.getFirstVisibleRow(); + var rowHeight = this.getTable().getRowHeight(); + + this._focusIndicator.setHeight(rowHeight + 3); + this._focusIndicator.setWidth(columnModel.getColumnWidth(this._focusedCol) + 3); + this._focusIndicator.setTop((this._focusedRow - firstRow) * rowHeight - 2); + this._focusIndicator.setLeft(paneModel.getColumnLeft(this._focusedCol) - 2); + + this._focusIndicator.show(); + } + } +} + + +// overridden +qx.Proto.dispose = function() { + if (this.getDisposed()) { + return true; + } + + if (this.getElement() != null) { + this.getElement().onselectstart = null; + } + + this._verScrollBar.dispose(); + this._horScrollBar.dispose(); + this._header.dispose(); + this._headerClipper.dispose(); + this._spacer.dispose(); + this._top.dispose(); + this._tablePane.dispose(); + this._paneClipper.dispose(); + + if (this._resizeLine != null) { + this._resizeLine.dispose(); + } + + this.removeEventListener("mousemove", this._onmousemove, this); + this.removeEventListener("mousedown", this._onmousedown, this); + this.removeEventListener("mouseup", this._onmouseup, this); + this.removeEventListener("click", this._onclick, this); + this.removeEventListener("dblclick", this._ondblclick, this); + this.removeEventListener("mouseout", this._onmouseout, this); + + var tablePaneModel = this.getTablePaneModel(); + if (tablePaneModel != null) { + tablePaneModel.removeEventListener("modelChanged", this._onPaneModelChanged, this); + } + + return qx.ui.layout.VerticalBoxLayout.prototype.dispose.call(this); +} + + +/** {int} The minimum width a colum could get in pixels. */ +qx.Class.MIN_COLUMN_WIDTH = 10; + +/** {int} The radius of the resize region in pixels. */ +qx.Class.RESIZE_REGION_RADIUS = 5; + +/** + * (int) The number of pixels the mouse may move between mouse down and mouse up + * in order to count as a click. + */ +qx.Class.CLICK_TOLERANCE = 5; + +/** + * (int) The mask for the horizontal scroll bar. + * May be combined with {@link #VERTICAL_SCROLLBAR}. + * + * @see #getNeededScrollBars + */ +qx.Class.HORIZONTAL_SCROLLBAR = 1; + +/** + * (int) The mask for the vertical scroll bar. + * May be combined with {@link #HORIZONTAL_SCROLLBAR}. + * + * @see #getNeededScrollBars + */ +qx.Class.VERTICAL_SCROLLBAR = 2; + +/** + * (string) The correct value for the CSS style attribute "cursor" for the + * horizontal resize cursor. + */ +qx.Class.CURSOR_RESIZE_HORIZONTAL = (qx.core.Client.getInstance().isGecko() && (qx.core.Client.getInstance().getMajor() > 1 || qx.core.Client.getInstance().getMinor() >= 8)) ? "ew-resize" : "e-resize"; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TextFieldCellEditorFactory.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TextFieldCellEditorFactory.js new file mode 100644 index 0000000000..5496904aa2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/TextFieldCellEditorFactory.js @@ -0,0 +1,60 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_table) + +************************************************************************ */ + +/** + * A cell editor factory creating text fields. + */ +qx.OO.defineClass("qx.ui.table.TextFieldCellEditorFactory", qx.ui.table.CellEditorFactory, +function() { + qx.ui.table.CellEditorFactory.call(this); +}); + + +// overridden +qx.Proto.createCellEditor = function(cellInfo) { + var cellEditor = new qx.ui.form.TextField; + cellEditor.setAppearance("table-editor-textfield"); + cellEditor.originalValue = cellInfo.value; + cellEditor.setValue("" + cellInfo.value); + + cellEditor.addEventListener("appear", function() { + this.selectAll(); + }); + + return cellEditor; +} + + +// overridden +qx.Proto.getCellEditorValue = function(cellEditor) { + // Workaround: qx.ui.form.TextField.getValue() delivers the old value, so we use the + // value property of the DOM element directly + var value = cellEditor.getElement().value; + + if (typeof cellEditor.originalValue == "number") { + value = parseFloat(value); + } + return value; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Button.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Button.js new file mode 100644 index 0000000000..4794537d40 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Button.js @@ -0,0 +1,49 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.Button", qx.ui.form.Button, +function(vText, vIcon, vIconWidth, vIconHeight, vFlash) +{ + qx.ui.form.Button.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); + + // Omit focus + this.setTabIndex(-1); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "toolbar-button" }); + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = qx.lang.Function.returnTrue; +qx.Proto._onkeyup = qx.lang.Function.returnTrue; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/CheckBox.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/CheckBox.js new file mode 100644 index 0000000000..4466bd1be2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/CheckBox.js @@ -0,0 +1,88 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.CheckBox", qx.ui.toolbar.Button, +function(vText, vIcon, vChecked) +{ + qx.ui.toolbar.Button.call(this, vText, vIcon); + + if (vChecked != null) { + this.setChecked(vChecked); + } +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "checked", type : "boolean", defaultValue : false, getAlias:"isChecked" }); + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) +{ + propValue ? this.addState("checked") : this.removeState("checked"); + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseup = function(e) +{ + this.setCapture(false); + + if (!this.hasState("abandoned")) + { + this.addState("over"); + this.setChecked(!this.getChecked()); + this.execute(); + } + + this.removeState("abandoned"); + this.removeState("pressed"); + + e.stopPropagation(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/MenuButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/MenuButton.js new file mode 100644 index 0000000000..0a890ced88 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/MenuButton.js @@ -0,0 +1,254 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) +#module(ui_menu) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.MenuButton", qx.ui.toolbar.Button, +function(vText, vMenu, vIcon, vIconWidth, vIconHeight, vFlash) +{ + qx.ui.toolbar.Button.call(this, vText, vIcon, vIconWidth, vIconHeight, vFlash); + + if (vMenu != null) { + this.setMenu(vMenu); + } +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "menu", type : "object", instance : "qx.ui.menu.Menu" }); +qx.OO.addProperty({ name : "direction", type : "string", allowNull : false, possibleValues : [ "up", "down" ], defaultValue : "down" }); + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getParentToolBar = function() +{ + var vParent = this.getParent(); + + if (vParent instanceof qx.ui.toolbar.Part) { + vParent = vParent.getParent(); + } + + return vParent instanceof qx.ui.toolbar.ToolBar ? vParent : null; +} + +qx.Proto._showMenu = function(vFromKeyEvent) +{ + var vMenu = this.getMenu(); + + if (vMenu) + { + // Caching common stuff + var vMenuParent = vMenu.getParent(); + var vMenuParentElement = vMenuParent.getElement(); + var vButtonElement = this.getElement(); + var vButtonHeight = qx.html.Dimension.getBoxHeight(vButtonElement); + + // Apply X-Location + var vMenuParentLeft = qx.html.Location.getPageBoxLeft(vMenuParentElement); + var vButtonLeft = qx.html.Location.getPageBoxLeft(vButtonElement); + + vMenu.setLeft(vButtonLeft - vMenuParentLeft); + + // Apply Y-Location + switch(this.getDirection()) + { + case "up": + var vBodyHeight = qx.html.Dimension.getInnerHeight(document.body); + var vMenuParentBottom = qx.html.Location.getPageBoxBottom(vMenuParentElement); + var vButtonBottom = qx.html.Location.getPageBoxBottom(vButtonElement); + + vMenu.setBottom(vButtonHeight + (vBodyHeight - vButtonBottom) - (vBodyHeight - vMenuParentBottom)); + vMenu.setTop(null); + break; + + case "down": + var vButtonTop = qx.html.Location.getPageBoxTop(vButtonElement); + + vMenu.setTop(vButtonTop + vButtonHeight); + vMenu.setBottom(null); + break; + } + + this.addState("pressed"); + + // If this show is called from a key event occured, we want to highlight + // the first menubutton inside. + if (vFromKeyEvent) { + vMenu.setHoverItem(vMenu.getFirstActiveChild()); + } + + vMenu.show(); + } +} + +qx.Proto._hideMenu = function() +{ + var vMenu = this.getMenu(); + + if (vMenu) { + vMenu.hide(); + } +} + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyMenu = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + propOldValue.setOpener(null); + + propOldValue.removeEventListener("appear", this._onmenuappear, this); + propOldValue.removeEventListener("disappear", this._onmenudisappear, this); + } + + if (propValue) + { + propValue.setOpener(this); + + propValue.addEventListener("appear", this._onmenuappear, this); + propValue.addEventListener("disappear", this._onmenudisappear, this); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS: MOUSE +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + if (e.getTarget() != this || !e.isLeftButtonPressed()) { + return; + } + + this.hasState("pressed") ? this._hideMenu() : this._showMenu(); +} + +qx.Proto._onmouseup = function(e) {} + +qx.Proto._onmouseout = function(e) +{ + if (e.getTarget() != this) { + return; + } + + this.removeState("over"); +} + +qx.Proto._onmouseover = function(e) +{ + var vToolBar = this.getParentToolBar(); + + if (vToolBar) + { + var vMenu = this.getMenu(); + + switch(vToolBar.getOpenMenu()) + { + case null: + case vMenu: + break; + + default: + // hide other menus + qx.manager.object.MenuManager.getInstance().update(); + + // show this menu + this._showMenu(); + } + } + + return qx.ui.toolbar.Button.prototype._onmouseover.call(this, e); +} + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS: MENU +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmenuappear = function(e) +{ + var vToolBar = this.getParentToolBar(); + + if (!vToolBar) { + return; + } + + var vMenu = this.getMenu(); + + vToolBar.setOpenMenu(vMenu); +} + +qx.Proto._onmenudisappear = function(e) +{ + var vToolBar = this.getParentToolBar(); + + if (!vToolBar) { + return; + } + + var vMenu = this.getMenu(); + + if (vToolBar.getOpenMenu() == vMenu) { + vToolBar.setOpenMenu(null); + } +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Part.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Part.js new file mode 100644 index 0000000000..7d7c1649a0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Part.js @@ -0,0 +1,84 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.Part", qx.ui.layout.HorizontalBoxLayout, +function() +{ + qx.ui.layout.HorizontalBoxLayout.call(this); + + this._handle = new qx.ui.toolbar.PartHandle; + this.add(this._handle); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "toolbar-part" }); + + + + + +/* +--------------------------------------------------------------------------- + CLONE +--------------------------------------------------------------------------- +*/ + +// Omit recursive cloning of qx.ui.toolbar.PartHandle +qx.Proto._cloneRecursive = function(cloneInstance) +{ + var vChildren = this.getChildren(); + var vLength = vChildren.length; + + for (var i=0; i<vLength; i++) { + if (!(vChildren[i] instanceof qx.ui.toolbar.PartHandle)) { + cloneInstance.add(vChildren[i].clone(true)); + } + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + if (this._handle) + { + this._handle.dispose(); + this._handle = null; + } + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/PartHandle.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/PartHandle.js new file mode 100644 index 0000000000..280175dec3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/PartHandle.js @@ -0,0 +1,37 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.PartHandle", qx.ui.layout.CanvasLayout, +function() +{ + qx.ui.layout.CanvasLayout.call(this); + + var l = new qx.ui.basic.Terminator; + l.setAppearance("toolbar-part-handle-line"); + this.add(l); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "toolbar-part-handle" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/RadioButton.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/RadioButton.js new file mode 100644 index 0000000000..3ace9452fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/RadioButton.js @@ -0,0 +1,118 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.RadioButton", qx.ui.toolbar.CheckBox, +function(vText, vIcon, vChecked) { + qx.ui.toolbar.CheckBox.call(this, vText, vIcon, vChecked); +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + The assigned qx.manager.selection.RadioManager which handles the switching between registered buttons +*/ +qx.OO.addProperty({ name : "manager", type : "object", instance : "qx.manager.selection.RadioManager", allowNull : true }); + +/*! + The name of the radio group. All the radio elements in a group (registered by the same manager) + have the same name (and could have a different value). +*/ +qx.OO.addProperty({ name : "name", type : "string" }); + +/*! + Prohibit the deselction of the checked radio button when clicked on it. +*/ +qx.OO.addProperty({ name : "disableUncheck", type : "boolean", defaultValue : false }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyChecked = function(propValue, propOldValue, propData) +{ + qx.ui.toolbar.CheckBox.prototype._modifyChecked.call(this, propValue, propOldValue, propData); + + var vManager = this.getManager(); + if (vManager) { + vManager.handleItemChecked(this, propValue); + } + + return true; +} + +qx.Proto._modifyManager = function(propValue, propOldValue, propData) +{ + if (propOldValue) { + propOldValue.remove(this); + } + + if (propValue) { + propValue.add(this); + } + + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmouseup = function(e) +{ + this.setCapture(false); + + if (!this.hasState("abandoned")) + { + this.addState("over"); + this.setChecked(this.getDisableUncheck() || !this.getChecked()); + this.execute(); + } + + this.removeState("abandoned"); + this.removeState("pressed"); + + e.stopPropagation(); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Separator.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Separator.js new file mode 100644 index 0000000000..7984021661 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/Separator.js @@ -0,0 +1,37 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.Separator", qx.ui.layout.CanvasLayout, +function() +{ + qx.ui.layout.CanvasLayout.call(this); + + var l = new qx.ui.basic.Terminator; + l.setAppearance("toolbar-separator-line"); + this.add(l); +}); + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "toolbar-separator" }); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/ToolBar.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/ToolBar.js new file mode 100644 index 0000000000..6b62985172 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/toolbar/ToolBar.js @@ -0,0 +1,244 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_toolbar) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.toolbar.ToolBar", qx.ui.layout.HorizontalBoxLayout, +function() +{ + qx.ui.layout.HorizontalBoxLayout.call(this); + + this.addEventListener("keypress", this._onkeypress); +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "openMenu", type : "object", instance : "qx.ui.menu.Menu" }); + +/*! + Appearance of the widget +*/ +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "toolbar" }); + + + + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getAllButtons = function() +{ + var vChildren = this.getChildren(); + var vLength = vChildren.length; + var vDeepChildren = []; + var vCurrent; + + for (var i=0; i<vLength; i++) + { + vCurrent = vChildren[i]; + + if (vCurrent instanceof qx.ui.toolbar.MenuButton) + { + vDeepChildren.push(vCurrent); + } + else if (vCurrent instanceof qx.ui.toolbar.Part) + { + vDeepChildren = vDeepChildren.concat(vCurrent.getChildren()); + } + } + + return vDeepChildren; +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS +--------------------------------------------------------------------------- +*/ + +/*! + Wraps key events to target functions +*/ +qx.Proto._onkeypress = function(e) +{ + switch(e.getKeyIdentifier()) + { + case "Left": + return this._onkeypress_left(); + + case "Right": + return this._onkeypress_right(); + } +} + +qx.Proto._onkeypress_left = function() +{ + var vMenu = this.getOpenMenu(); + if (!vMenu) { + return; + } + + var vOpener = vMenu.getOpener(); + if (!vOpener) { + return; + } + + var vChildren = this.getAllButtons(); + var vChildrenLength = vChildren.length; + var vIndex = vChildren.indexOf(vOpener); + var vCurrent; + var vPrevButton = null; + + for (var i=vIndex-1; i>=0; i--) + { + vCurrent = vChildren[i]; + + if (vCurrent instanceof qx.ui.toolbar.MenuButton && vCurrent.getEnabled()) + { + vPrevButton = vCurrent; + break; + } + } + + // If none found, try again from the begin (looping) + if (!vPrevButton) + { + for (var i=vChildrenLength-1; i>vIndex; i--) + { + vCurrent = vChildren[i]; + + if (vCurrent instanceof qx.ui.toolbar.MenuButton && vCurrent.getEnabled()) + { + vPrevButton = vCurrent; + break; + } + } + } + + if (vPrevButton) + { + // hide other menus + qx.manager.object.MenuManager.getInstance().update(); + + // show previous menu + vPrevButton._showMenu(true); + } +} + +qx.Proto._onkeypress_right = function() +{ + var vMenu = this.getOpenMenu(); + if (!vMenu) { + return; + } + + var vOpener = vMenu.getOpener(); + if (!vOpener) { + return; + } + + var vChildren = this.getAllButtons(); + var vChildrenLength = vChildren.length; + var vIndex = vChildren.indexOf(vOpener); + var vCurrent; + var vNextButton = null; + + for (var i=vIndex+1; i<vChildrenLength; i++) + { + vCurrent = vChildren[i]; + + if (vCurrent instanceof qx.ui.toolbar.MenuButton && vCurrent.getEnabled()) + { + vNextButton = vCurrent; + break; + } + } + + // If none found, try again from the begin (looping) + if (!vNextButton) + { + for (var i=0; i<vIndex; i++) + { + vCurrent = vChildren[i]; + + if (vCurrent instanceof qx.ui.toolbar.MenuButton && vCurrent.getEnabled()) + { + vNextButton = vCurrent; + break; + } + } + } + + if (vNextButton) + { + // hide other menus + qx.manager.object.MenuManager.getInstance().update(); + + // show next menu + vNextButton._showMenu(true); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("keypress", this._onkeypress); + + return qx.ui.layout.HorizontalBoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/AbstractTreeElement.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/AbstractTreeElement.js new file mode 100644 index 0000000000..cbaf27f35c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/AbstractTreeElement.js @@ -0,0 +1,505 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tree) +#embed(qx.widgettheme/tree/*) +#embed(qx.icontheme/16/actions/document-new.png) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.tree.AbstractTreeElement", qx.ui.layout.BoxLayout, +function(vLabel, vIcon, vIconSelected) +{ + if (this.classname == qx.ui.tree.AbstractTreeElement.ABSTRACT_CLASS) { + throw new Error("Please omit the usage of qx.ui.tree.AbstractTreeElement directly. Choose between qx.ui.tree.TreeFolder and qx.ui.tree.TreeFile instead!"); + } + + // Precreate subwidgets + this._indentObject = new qx.ui.embed.HtmlEmbed; + this._iconObject = new qx.ui.basic.Image; + this._labelObject = new qx.ui.basic.Label; + + // Make anonymous + this._indentObject.setAnonymous(true); + this._iconObject.setAnonymous(true); + this._labelObject.setAnonymous(true); + + // Behaviour and Hard Styling + this._labelObject.setSelectable(false); + this._labelObject.setStyleProperty("lineHeight", "100%"); + + qx.ui.layout.BoxLayout.call(this, "horizontal"); + + this.setLabel(vLabel); + + // Prohibit selection + this.setSelectable(false); + + // Base URL used for indent images + this.BASE_URI = qx.manager.object.AliasManager.getInstance().resolvePath("widget/tree/"); + + // Adding subwidgets + this.add(this._indentObject, this._iconObject, this._labelObject); + + // Set Icons + if (vIcon != null) { + this.setIcon(vIcon); + this.setIconSelected(vIcon); + } + + if (vIconSelected != null) { + this.setIconSelected(vIconSelected); + } + + // Setup initial icon + this._iconObject.setSource(this._evalCurrentIcon()); + + // Set Appearance + this._iconObject.setAppearance("tree-element-icon"); + this._labelObject.setAppearance("tree-element-label"); + + // Register event listeners + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); +}); + +qx.ui.tree.AbstractTreeElement.ABSTRACT_CLASS = "qx.ui.tree.AbstractTreeElement"; + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tree-element" }); + +/*! + The icons +*/ +qx.OO.addProperty({ name : "icon", type : "string" }); +qx.OO.addProperty({ name : "iconSelected", type : "string" }); + +/*! + The label/caption/text of the qx.ui.basic.Atom instance +*/ +qx.OO.addProperty({ name : "label" }); + +/*! + Selected property +*/ +qx.OO.addProperty({ name : "selected", type : "boolean", defaultValue : false }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyLabel = function(propValue, propOldValue, propData) +{ + if (this._labelObject) { + this._labelObject.setHtml(propValue); + } + + return true; +} + +qx.Proto._modifySelected = function(propValue, propOldValue, propData) +{ + propValue ? this.addState("selected") : this.removeState("selected"); + propValue ? this._labelObject.addState("selected") : this._labelObject.removeState("selected"); + + var vTree = this.getTree(); + if (!vTree._fastUpdate || (propOldValue && vTree._oldItem == this)) + { + this._iconObject.setSource(this._evalCurrentIcon()); + + if (propValue) { + this._iconObject.addState("selected"); + } else { + this._iconObject.removeState("selected"); + } + } + + var vManager = this.getTree().getManager(); + + if (propOldValue && vManager.getSelectedItem() == this) + { + vManager.deselectAll(); + } + else if (propValue && vManager.getSelectedItem() != this) + { + vManager.setSelectedItem(this); + } + + return true; +} + +qx.Proto._evalCurrentIcon = function() +{ + if (this.getSelected() && this.getIconSelected()) { + return this.getIconSelected(); + } else { + return this.getIcon() || "icon/16/actions/document-new.png"; + } +} + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getParentFolder = function() +{ + try { + return this.getParent().getParent(); + } catch(ex) {} + + return null; +} + +qx.Proto.getLevel = function() +{ + var vParentFolder = this.getParentFolder(); + return vParentFolder ? vParentFolder.getLevel() + 1 : null; +} + +qx.Proto.getTree = function() +{ + var vParentFolder = this.getParentFolder(); + return vParentFolder ? vParentFolder.getTree() : null; +} + +qx.Proto.getIndentObject = function() { + return this._indentObject; +} + +qx.Proto.getIconObject = function() { + return this._iconObject; +} + +qx.Proto.getLabelObject = function() { + return this._labelObject; +} + +/** + * <p>deselects, disconnects, removes and disposes the + * current tree element and its content. + * </p> + * + * <p>destroys the current item (TreeFile or TreeFolder) + * and all its subitems. The destruction of the subitems + * is done by calling destroyContent. This is done if the + * subitem has the method destroyContent which is true if the + * subitem is a TreeFolder (or one of its subclasses). + * </p> + * + * <p>The method destroyContent is defined in the TreeFolder class. + * </p> + */ +qx.Proto.destroy = function() { + var manager = this.getTree() ? this.getTree().getManager() : null; + if(manager) { + + // if the current destroyed item is + // selectd deselect the item. If we are + // in single selection mode we have to + // call deselectAll because setItemSelected + // refuses to deselect in this case + if(manager.getItemSelected(this)) { + if(manager.getMultiSelection()) { + manager.setItemSelected(this,false); + } + else { + manager.deselectAll(); + } + } + + // set the leadItem to null if the current + // destroyed item is the leadItem + if(manager.getLeadItem() == this) { + manager.setLeadItem(null); + } + // set the anchorItem to null if the current + // destroyed item is the anchorItem + if(manager.getAnchorItem() == this) { + manager.setAnchorItem(null); + } + } + + // if the item has the method destroyContent defined + // then it is a TreeFolder (and it's subclasses) + // which potentially have content which also + // has to be destroyed + if(this.destroyContent) { + this.destroyContent(); + } + + // first disconnect the item so rendering + // of the tree lines can be done correctly + this.disconnect(); + + // remove the current item from + // the parent folder + var parentFolder = this.getParentFolder(); + if(parentFolder) { + parentFolder.remove(this); + } + + this.dispose(); +} + + + + + +/* +--------------------------------------------------------------------------- + QUEUE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.addToTreeQueue = function() +{ + var vTree = this.getTree(); + if (vTree) { + vTree.addChildToTreeQueue(this); + } +} + +qx.Proto.removeFromTreeQueue = function() +{ + var vTree = this.getTree(); + if (vTree) { + vTree.removeChildFromTreeQueue(this); + } +} + +qx.Proto.addToCustomQueues = function(vHint) +{ + this.addToTreeQueue(); + + qx.ui.layout.BoxLayout.prototype.addToCustomQueues.call(this, vHint); +} + +qx.Proto.removeFromCustomQueues = function(vHint) +{ + this.removeFromTreeQueue(); + + qx.ui.layout.BoxLayout.prototype.removeFromCustomQueues.call(this, vHint); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPLAYBLE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyParent = function(propValue, propOldValue, propData) +{ + qx.ui.layout.BoxLayout.prototype._modifyParent.call(this, propValue, propOldValue, propData); + + // Be sure to update previous folder also if it is closed currently (plus/minus symbol) + if (propOldValue && !propOldValue.isDisplayable() && propOldValue.getParent() && propOldValue.getParent().isDisplayable()) { + propOldValue.getParent().addToTreeQueue(); + } + + // Be sure to update new folder also if it is closed currently (plus/minus symbol) + if (propValue && !propValue.isDisplayable() && propValue.getParent() && propValue.getParent().isDisplayable()) { + propValue.getParent().addToTreeQueue(); + } + + return true; +} + +qx.Proto._handleDisplayableCustom = function(vDisplayable, vParent, vHint) +{ + qx.ui.layout.BoxLayout.prototype._handleDisplayableCustom.call(this, vDisplayable, vParent, vHint); + + if (vHint) + { + var vParentFolder = this.getParentFolder(); + var vPreviousParentFolder = this._previousParentFolder; + + if (vPreviousParentFolder) + { + if (this._wasLastVisibleChild) + { + vPreviousParentFolder._updateIndent(); + } + else if (!vPreviousParentFolder.hasContent()) + { + vPreviousParentFolder.addToTreeQueue(); + } + } + + if (vParentFolder && vParentFolder.isDisplayable() && vParentFolder._initialLayoutDone) { + vParentFolder.addToTreeQueue(); + } + + if (this.isLastVisibleChild()) + { + var vPrev = this.getPreviousVisibleSibling(); + + if (vPrev && vPrev instanceof qx.ui.tree.AbstractTreeElement) { + vPrev._updateIndent(); + } + } + + if (vDisplayable) { + this._updateIndent(); + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + this.getTree().getManager().handleMouseDown(this, e); + e.stopPropagation(); +} + +qx.Proto._onmouseup = qx.lang.Function.returnTrue; + + + + + +/* +--------------------------------------------------------------------------- + TREE FLUSH +--------------------------------------------------------------------------- +*/ + +qx.Proto.flushTree = function() +{ + // store informations for update process + this._previousParentFolder = this.getParentFolder(); + this._wasLastVisibleChild = this.isLastVisibleChild(); + + // generate html for indent area + var vLevel = this.getLevel(); + var vTree = this.getTree(); + var vImage; + var vHtml = []; + var vCurrentObject = this; + + for (var i=0; i<vLevel; i++) + { + vImage = vCurrentObject.getIndentSymbol(vTree.getUseTreeLines(), i==0); + + if (vImage) + { + vHtml.push("<img style=\"position:absolute;top:0px;left:"); + vHtml.push((vLevel-i-1) * 19); + vHtml.push("px\" src=\""); + vHtml.push(this.BASE_URI); + vHtml.push(vImage); + vHtml.push("."); + vHtml.push("gif"); + vHtml.push("\" />"); + } + + vCurrentObject = vCurrentObject.getParentFolder(); + } + + this._indentObject.setHtml(vHtml.join("")); + this._indentObject.setWidth(vLevel * 19); +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._indentObject) + { + this._indentObject.dispose(); + this._indentObject = null; + } + + if (this._iconObject) + { + this._iconObject.dispose(); + this._iconObject = null; + } + + if (this._labelObject) + { + this._labelObject.dispose(); + this._labelObject = null; + } + + this._previousParentFolder = null; + + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/Tree.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/Tree.js new file mode 100644 index 0000000000..850891e058 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/Tree.js @@ -0,0 +1,400 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tree) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.tree.Tree", qx.ui.tree.TreeFolder, +function(vLabel, vIcon, vIconSelected) +{ + qx.ui.tree.TreeFolder.call(this, vLabel, vIcon, vIconSelected); + + // ************************************************************************ + // INITILISIZE MANAGER + // ************************************************************************ + this._manager = new qx.manager.selection.TreeSelectionManager(this); + + + this._iconObject.setAppearance("tree-icon"); + this._labelObject.setAppearance("tree-label"); + + + // ************************************************************************ + // DEFAULT STATE + // ************************************************************************ + // The tree should be open by default + this.setOpen(true); + + // Fix vertical alignment of empty tree + this.addToFolder(); + + + // ************************************************************************ + // KEY EVENT LISTENER + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + this.addEventListener("keyup", this._onkeyup); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "useDoubleClick", type : "boolean", defaultValue : false, getAlias : "useDoubleClick" }); +qx.OO.addProperty({ name : "useTreeLines", type : "boolean", defaultValue : true, getAlias : "useTreeLines" }); + + + + + + +/* +--------------------------------------------------------------------------- + MANAGER BINDING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + +qx.Proto.getSelectedElement = function() { + return this.getManager().getSelectedItem(); +} + + + + + + +/* +--------------------------------------------------------------------------- + QUEUE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.addChildToTreeQueue = function(vChild) +{ + if (!vChild._isInTreeQueue && !vChild._isDisplayable) { + this.debug("Ignoring invisible child: " + vChild); + } + + if (!vChild._isInTreeQueue && vChild._isDisplayable) + { + qx.ui.core.Widget.addToGlobalWidgetQueue(this); + + if (!this._treeQueue) { + this._treeQueue = {}; + } + + this._treeQueue[vChild.toHashCode()] = vChild; + + vChild._isInTreeQueue = true; + } +} + +qx.Proto.removeChildFromTreeQueue = function(vChild) +{ + if (vChild._isInTreeQueue) + { + if (this._treeQueue) { + delete this._treeQueue[vChild.toHashCode()]; + } + + delete vChild._isInTreeQueue; + } +} + +qx.Proto.flushWidgetQueue = function() { + this.flushTreeQueue(); +} + +qx.Proto.flushTreeQueue = function() +{ + if (!qx.lang.Object.isEmpty(this._treeQueue)) + { + for (var vHashCode in this._treeQueue) + { + // this.debug("Flushing Tree Child: " + this._treeQueue[vHashCode]); + this._treeQueue[vHashCode].flushTree(); + delete this._treeQueue[vHashCode]._isInTreeQueue; + } + + delete this._treeQueue; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyUseTreeLines = function(propValue, propOldValue, propData) +{ + if (this._initialLayoutDone) { + this._updateIndent(); + } + + return true; +} + + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getTree = function() { + return this; +} + +qx.Proto.getParentFolder = function() { + return null; +} + +qx.Proto.getLevel = function() { + return 0; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + COMMON CHECKERS +--------------------------------------------------------------------------- +*/ + +qx.ui.tree.Tree.isTreeFolder = function(vObject) { + return vObject && vObject instanceof qx.ui.tree.TreeFolder && !(vObject instanceof qx.ui.tree.Tree); +}; + +qx.ui.tree.Tree.isOpenTreeFolder = function(vObject) { + return vObject instanceof qx.ui.tree.TreeFolder && vObject.getOpen() && vObject.hasContent(); +}; + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) +{ + var vSelectedItem = this.getManager().getSelectedItem(); + + if (e.getKeyIdentifier() == "Enter") { + e.preventDefault(); + + if (qx.ui.tree.Tree.isTreeFolder(vSelectedItem)) { + return vSelectedItem.toggle(); + } + } +}; + + +qx.Proto._onkeypress = function(e) +{ + var vManager = this.getManager(); + var vSelectedItem = vManager.getSelectedItem(); + + switch(e.getKeyIdentifier()) + { + case "Left": + e.preventDefault(); + + if (qx.ui.tree.Tree.isTreeFolder(vSelectedItem)) + { + if (!vSelectedItem.getOpen()) + { + var vParent = vSelectedItem.getParentFolder(); + if (vParent instanceof qx.ui.tree.TreeFolder) { + if (!(vParent instanceof qx.ui.tree.Tree)) { + vParent.close(); + } + + this.setSelectedElement(vParent); + } + } + else + { + return vSelectedItem.close(); + } + } + else if (vSelectedItem instanceof qx.ui.tree.TreeFile) + { + var vParent = vSelectedItem.getParentFolder(); + if (vParent instanceof qx.ui.tree.TreeFolder) { + if (!(vParent instanceof qx.ui.tree.Tree)) { + vParent.close(); + } + + this.setSelectedElement(vParent); + } + } + + break; + + case "Right": + e.preventDefault(); + + if (qx.ui.tree.Tree.isTreeFolder(vSelectedItem)) + { + if (!vSelectedItem.getOpen()) + { + return vSelectedItem.open(); + } + else if (vSelectedItem.hasContent()) + { + var vFirst = vSelectedItem.getFirstVisibleChildOfFolder(); + this.setSelectedElement(vFirst); + + if (vFirst instanceof qx.ui.tree.TreeFolder) { + vFirst.open(); + } + + return; + } + } + + break; + + default: + if (!this._fastUpdate) + { + this._fastUpdate = true; + this._oldItem = vSelectedItem; + } + + vManager.handleKeyPress(e); + } +}; + + +qx.Proto._onkeyup = function(e) +{ + if (this._fastUpdate) + { + var vOldItem = this._oldItem; + var vNewItem = this.getManager().getSelectedItem(); + + vNewItem.getIconObject().addState("selected"); + + delete this._fastUpdate; + delete this._oldItem; + } +}; + + +qx.Proto.getLastTreeChild = function() +{ + var vLast = this; + + while (vLast instanceof qx.ui.tree.AbstractTreeElement) + { + if (!(vLast instanceof qx.ui.tree.TreeFolder) || !vLast.getOpen()) { + return vLast; + } + + vLast = vLast.getLastVisibleChildOfFolder(); + } + + return null; +}; + + +qx.Proto.getFirstTreeChild = function() { + return this; +}; + + +qx.Proto.setSelectedElement = function(vElement) +{ + var vManager = this.getManager(); + + vManager.setSelectedItem(vElement); + vManager.setLeadItem(vElement); +}; + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + this.removeEventListener("keyup", this._onkeyup); + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + delete this._oldItem; + + return qx.ui.tree.TreeFolder.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/TreeFile.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/TreeFile.js new file mode 100644 index 0000000000..8c74fa1bf5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/TreeFile.js @@ -0,0 +1,64 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tree) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.tree.TreeFile", qx.ui.tree.AbstractTreeElement, +function(vLabel, vIcon, vIconSelected) { + qx.ui.tree.AbstractTreeElement.call(this, vLabel, vIcon, vIconSelected); +}); + + + + +/* +--------------------------------------------------------------------------- + INDENT HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto.getIndentSymbol = function(vUseTreeLines, vIsLastColumn) +{ + if (vUseTreeLines) + { + if (vIsLastColumn) + { + return this.isLastChild() ? "end" : "cross"; + } + else + { + return "line"; + } + } + + return null; +} + +qx.Proto._updateIndent = function() { + this.addToTreeQueue(); +} + +qx.Proto.getItems = function() { + return [this]; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/TreeFolder.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/TreeFolder.js new file mode 100644 index 0000000000..236a776de5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/tree/TreeFolder.js @@ -0,0 +1,624 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_tree) +#embed(qx.icontheme/16/status/folder-open.png) +#embed(qx.icontheme/16/places/folder.png) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.tree.TreeFolder", qx.ui.tree.AbstractTreeElement, +function(vLabel, vIcon, vIconSelected) +{ + qx.ui.tree.AbstractTreeElement.call(this, vLabel, vIcon, vIconSelected); + + this._iconObject.setAppearance("tree-folder-icon"); + this._labelObject.setAppearance("tree-folder-label"); + + this.addEventListener("dblclick", this._ondblclick); + + // Remapping of add/remove methods + this.add = this.addToFolder; + this.addBefore = this.addBeforeToFolder; + this.addAfter = this.addAfterToFolder; + this.addAt = this.addAtToFolder; + this.addAtBegin = this.addAtBeginToFolder; + this.addAtEnd = this.addAtEndToFolder; + this.remove = this.removeFromFolder; +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + + +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "tree-folder" }); +qx.OO.changeProperty({ name : "icon", type : "string" }); +qx.OO.changeProperty({ name : "iconSelected", type : "string" }); + +qx.OO.addProperty({ name : "open", type : "boolean", defaultValue : false }); +qx.OO.addProperty({ name : "alwaysShowPlusMinusSymbol", type : "boolean", defaultValue : false }); + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.hasContent = function() { + return this._containerObject && this._containerObject.getChildrenLength() > 0; +} + +qx.Proto.open = function() +{ + if (this.getOpen()) { + return; + } + + if (this.hasContent() && this.isSeeable()) + { + this.getTopLevelWidget().setGlobalCursor("progress"); + qx.client.Timer.once(this._openCallback, this, 0); + } + else + { + this.setOpen(true); + } +} + +qx.Proto.close = function() { + this.setOpen(false); +} + +qx.Proto.toggle = function() { + this.getOpen() ? this.close() : this.open(); +} + +qx.Proto._openCallback = function() +{ + this.setOpen(true); + qx.ui.core.Widget.flushGlobalQueues(); + this.getTopLevelWidget().setGlobalCursor(null); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._createChildrenStructure = function() +{ + this.setAppearance(this instanceof qx.ui.tree.Tree ? "tree-container" : "tree-folder-container"); + + if (!this._horizontalLayout) + { + this.setOrientation("vertical"); + + this._horizontalLayout = new qx.ui.layout.HorizontalBoxLayout; + this._horizontalLayout.setWidth(null); + this._horizontalLayout.setParent(this); + this._horizontalLayout.setAnonymous(true); + this._horizontalLayout.setAppearance(this instanceof qx.ui.tree.Tree ? "tree" : "tree-folder"); + + this._indentObject.setParent(this._horizontalLayout); + this._iconObject.setParent(this._horizontalLayout); + this._labelObject.setParent(this._horizontalLayout); + } + + if (!this._containerObject) + { + this._containerObject = new qx.ui.layout.VerticalBoxLayout; + this._containerObject.setWidth(null); + this._containerObject.setAnonymous(true); + + // it should be faster to first handle display, + // because the default display value is true and if we first + // setup the parent the logic do all to make the + // widget first visible and then, if the folder is not + // opened again invisible. + this._containerObject.setDisplay(this.getOpen()); + this._containerObject.setParent(this); + + // remap remove* functions + this.remapChildrenHandlingTo(this._containerObject); + } +} + +qx.Proto._handleChildMove = function(vChild, vRelationIndex, vRelationChild) +{ + if (vChild.isDisplayable()) + { + var vChildren = this._containerObject.getChildren(); + var vOldChildIndex = vChildren.indexOf(vChild); + + if (vOldChildIndex != -1) + { + if (vRelationChild) { + vRelationIndex = vChildren.indexOf(vRelationChild); + } + + if (vRelationIndex == vChildren.length-1) + { + vChild._updateIndent(); + + // Update indent of previous last child + this._containerObject.getLastVisibleChild()._updateIndent(); + } + else if (vChild._wasLastVisibleChild) + { + vChild._updateIndent(); + + // Update indent for new last child + var vPreviousSibling = vChild.getPreviousVisibleSibling(); + if (vPreviousSibling) { + vPreviousSibling._updateIndent(); + } + } + } + } +} + +qx.Proto.addToFolder = function() +{ + this._createChildrenStructure(); + + if (this._containerObject) { + return this._containerObject.add.apply(this._containerObject, arguments); + } +} + +qx.Proto.addBeforeToFolder = function(vChild, vBefore) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + this._handleChildMove(vChild, null, vBefore); + return this._containerObject.addBefore.apply(this._containerObject, arguments); + } +} + +qx.Proto.addAfterToFolder = function(vChild, vAfter) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + this._handleChildMove(vChild, null, vAfter); + return this._containerObject.addAfter.apply(this._containerObject, arguments); + } +} + +qx.Proto.addAtToFolder = function(vChild, vIndex) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + this._handleChildMove(vChild, vIndex); + return this._containerObject.addAt.apply(this._containerObject, arguments); + } +} + +qx.Proto.addAtBeginToFolder = function(vChild) { + return this.addAtToFolder(vChild, 0); +} + +qx.Proto.addAtEndToFolder = function(vChild) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + var vLast = this._containerObject.getLastChild(); + + if (vLast) + { + this._handleChildMove(vChild, null, vLast); + return this._containerObject.addAfter.call(this._containerObject, vChild, vLast); + } + else + { + return this.addAtBeginToFolder(vChild); + } + } +} + +qx.Proto._remappingChildTable = [ "remove", "removeAt", "removeAll" ]; + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getContainerObject = function() { + return this._containerObject; +} + +qx.Proto.getHorizontalLayout = function() { + return this._horizontalLayout; +} + +qx.Proto.getFirstVisibleChildOfFolder = function() +{ + if (this._containerObject) { + return this._containerObject.getFirstChild(); + } +} + +qx.Proto.getLastVisibleChildOfFolder = function() +{ + if (this._containerObject) { + return this._containerObject.getLastChild(); + } +} + +qx.Proto.getItems = function(recursive, invisible) +{ + var a = [this]; + + if (this._containerObject) + { + var ch = invisible == true ? this._containerObject.getChildren() : this._containerObject.getVisibleChildren(); + + if (recursive == false) + { + a = a.concat(ch); + } + else + { + for (var i=0, chl=ch.length; i<chl; i++) { + a = a.concat(ch[i].getItems(recursive, invisible)); + } + } + } + + return a; +} + +/** + * <p>deselects, disconnects, removes and disposes the + * content of the folder and its subfolders. + * </p> + * + * <p>the current items subitems (and the subitems of each + * subitem) are destroyed going top down the TreeFolder + * hierarchy. The current item is left as is. + * </p> + */ +qx.Proto.destroyContent = function() +{ + if(!this.hasContent()) { + return; + } + + var manager = this.getTree() ? this.getTree().getManager() : null; + + var leadItem; + var anchorItem; + if(manager) { + leadItem = manager.getLeadItem(); + anchorItem = manager.getAnchorItem(); + } + + // set the container objects display property + // to true so getChildren will retreive all + // children objects + this._containerObject.setDisplay(true); + var items = this._containerObject.getChildren(); + var item; + + for(var i=items.length-1;i>=0;--i) { + item = items[i]; + + // this.getItems seems to also contain "this". + // In order to avoid endless loops by calling + // recursively destroyContent we have to avoid + // destroying ourselves + if(item != this) { + if(manager) { + // set the leadItem to null if the current + // destroyed item is the leadItem + if(leadItem == item) { + manager.setLeadItem(null); + } + // set the anchorItem to null if the current + // destroyed item is the anchorItem + if(anchorItem == item) { + manager.setAnchorItem(null); + } + + // if the current destroyed item is + // selected, deselect the item. If we are + // in single selection mode we have to + // call deselectAll because setItemSelected + // refuses to deselect in this case + if(manager.getItemSelected(item)) { + if(manager.getMultiSelection()) { + manager.setItemSelected(item,false); + } + else { + manager.deselectAll(); + } + } + + // if the item has the method destroyContent defined + // then it is a TreeFolder (and it's subclasses) + // which potentially have content which also + // has to be destroyed + if (item.destroyContent) { + item.destroyContent(); + } + } + + // first disconnect the item so rendering + // of the tree lines can be done correctly + item.removeFromTreeQueue(); + item.disconnect(); + + // remove the item from the containerObject + this._containerObject.remove(item); + item.dispose(); + delete items[i]; + } + } +} + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._evalCurrentIcon = function() +{ + if (this.getSelected()) { + return this.getIconSelected() || "icon/16/status/folder-open.png"; + } else { + return this.getIcon() || "icon/16/places/folder.png"; + } +} + +qx.Proto._modifyOpen = function(propValue, propOldValue, propData) +{ + this._updateLastColumn(); + + if (this._containerObject) { + this._containerObject.setDisplay(propValue); + } + + return true; +} + +qx.Proto._modifyAlwaysShowPlusMinusSymbol = function(propValue, propOldValue, propData) +{ + this._updateLastColumn(); + + return true; +} + +qx.Proto._updateLastColumn = function() +{ + if (this._indentObject) + { + var vElement = this._indentObject.getElement(); + + if (vElement && vElement.firstChild) { + vElement.firstChild.src = this.BASE_URI + this.getIndentSymbol(this.getTree().getUseTreeLines(), true) + ".gif"; + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + var vOriginalTarget = e.getOriginalTarget(); + + switch(vOriginalTarget) + { + case this._indentObject: + if (this._indentObject.getElement().firstChild == e.getDomTarget()) + { + this.toggle(); + + // Only if we just get closed and the current selection is inside of this node. + if (!this.getOpen()) + { + if(qx.lang.Array.contains(this.getItems(true, true), this.getTree().getSelectedElement())) { + this.getTree().getManager().handleMouseDown(this, e); + } + } + } + + break; + + case this._containerObject: + break; + + case this: + if (this._containerObject) { + break; + } + + // no break here + + default: + this.getTree().getManager().handleMouseDown(this, e); + } + + e.stopPropagation(); +} + +qx.Proto._onmouseup = function(e) +{ + var vOriginalTarget = e.getOriginalTarget(); + + switch(vOriginalTarget) + { + case this._indentObject: + case this._containerObject: + case this: + break; + + default: + if (!this.getTree().getUseDoubleClick()) { + this.open(); + } + } +} + +qx.Proto._ondblclick = function(e) +{ + if (!this.getTree().getUseDoubleClick()) { + return; + } + + this.toggle(); + e.stopPropagation(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + INDENT HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto.getIndentSymbol = function(vUseTreeLines, vIsLastColumn) +{ + if (vIsLastColumn) + { + if (this.hasContent() || this.getAlwaysShowPlusMinusSymbol()) + { + if (!vUseTreeLines) + { + return this.getOpen() ? "minus" : "plus"; + } + else if (this.isLastChild()) + { + return this.getOpen() ? "end_minus" : "end_plus"; + } + else + { + return this.getOpen() ? "cross_minus" : "cross_plus"; + } + } + else if (vUseTreeLines) + { + return this.isLastChild() ? "end" : "cross"; + } + } + else + { + return vUseTreeLines && !this.isLastChild() ? "line" : null; + } +} + +qx.Proto._updateIndent = function() +{ + // Intentionally bypass superclass; the _updateIndent we want is in TreeFile + qx.ui.tree.TreeFile.prototype._updateIndent.call(this); + + if (!this._containerObject) { + return; + } + + var ch = this._containerObject.getVisibleChildren(); + for (var i=0, l=ch.length; i<l; i++) { + ch[i]._updateIndent(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("dblclick", this._ondblclick); + + if (this._horizontalLayout) + { + this._horizontalLayout.dispose(); + this._horizontalLayout = null; + } + + if (this._containerObject) + { + this._containerObject.dispose(); + this._containerObject = null; + } + + return qx.ui.tree.AbstractTreeElement.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/AbstractTreeElement.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/AbstractTreeElement.js new file mode 100644 index 0000000000..17a9ba8ce7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/AbstractTreeElement.js @@ -0,0 +1,532 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_treefullcontrol) +#embed(qx.widgettheme/tree/*) +#embed(qx.icontheme/16/actions/document-new.png) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.treefullcontrol.AbstractTreeElement", qx.ui.layout.BoxLayout, +function(treeRowStructure) +{ + if (this.classname == qx.ui.treefullcontrol.AbstractTreeElement.ABSTRACT_CLASS) { + throw new Error("Please omit the usage of qx.ui.treefullcontrol.AbstractTreeElement directly. Choose between qx.ui.treefullcontrol.TreeFolder, qx.ui.treefullcontrol.TreeFolderSimple, qx.ui.treefullcontrol.TreeFile and qx.ui.treefullcontrol.TreeFileSimple instead!"); + } + + if (treeRowStructure !== qx.ui.treefullcontrol.TreeRowStructure.getInstance()) + { + throw new Error("A qx.ui.treefullcontrol.TreeRowStructure parameter is required."); + } + + // Precreate subwidgets + this._indentObject = treeRowStructure._indentObject; + this._iconObject = treeRowStructure._iconObject; + this._labelObject = treeRowStructure._labelObject; + + // Make anonymous + this._indentObject.setAnonymous(true); + this._iconObject.setAnonymous(true); + this._labelObject.setAnonymous(true); + + // Behaviour and Hard Styling + this._labelObject.setSelectable(false); + this._labelObject.setStyleProperty("lineHeight", + "100%"); + + qx.ui.layout.BoxLayout.call(this, "horizontal"); + + if (qx.util.Validation.isValid(treeRowStructure._label)) { + this.setLabel(treeRowStructure._label); + } + + // Prohibit selection + this.setSelectable(false); + + // Base URL used for indent images + this.BASE_URI = qx.manager.object.AliasManager.getInstance().resolvePath("widget/tree/"); + + /* + * Add all of the objects which are to be in the horizontal layout. + */ + for (var i = 0; i < treeRowStructure._fields.length; i++) + { + this.add(treeRowStructure._fields[i]); + } + + // Set Icons + if ((treeRowStructure._icons.unselected != null) && + (qx.util.Validation.isValidString(treeRowStructure._icons.unselected))) { + this.setIcon(treeRowStructure._icons.unselected); + this.setIconSelected(treeRowStructure._icons.unselected); + } + if ((treeRowStructure._icons.selected != null) && + (qx.util.Validation.isValidString(treeRowStructure._icons.selected))) { + this.setIconSelected(treeRowStructure._icons.selected); + } + + // Setup initial icon + this._iconObject.setSource(this._evalCurrentIcon()); + + // Set Appearance + this._iconObject.setAppearance("tree-element-icon"); + this._labelObject.setAppearance("tree-element-label"); + + // Register event listeners + this.addEventListener("mousedown", this._onmousedown); + this.addEventListener("mouseup", this._onmouseup); +}); + +qx.ui.treefullcontrol.AbstractTreeElement.ABSTRACT_CLASS = "qx.ui.treefullcontrol.AbstractTreeElement"; + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.changeProperty({ name : "appearance", + type : "string", + defaultValue : "tree-element" + }); + +/*! + The icons +*/ +qx.OO.addProperty({ name : "icon", + type : "string" + }); + +qx.OO.addProperty({ name : "iconSelected", + type : "string" + }); + +/*! + The label/caption/text of the qx.ui.basic.Atom instance +*/ +qx.OO.addProperty({ name : "label" + }); + +/*! + Selected property +*/ +qx.OO.addProperty({ name : "selected", + type : "boolean", + defaultValue : false + }); + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyLabel = function(propValue, propOldValue, propData) +{ + if (this._labelObject) { + this._labelObject.setHtml(propValue); + } + + return true; +} + +qx.Proto._modifySelected = function(propValue, propOldValue, propData) +{ + if (propValue) { + this.addState("selected"); + this._labelObject.addState("selected"); + } else { + this.removeState("selected"); + this._labelObject.removeState("selected"); + } + + var vTree = this.getTree(); + if (!vTree._fastUpdate || + (propOldValue && vTree._oldItem == this)) { + this._iconObject.setSource(this._evalCurrentIcon()); + + if (propValue) { + this._iconObject.addState("selected"); + } else { + this._iconObject.removeState("selected"); + } + } + + var vManager = this.getTree().getManager(); + + if (propOldValue && vManager.getSelectedItem() == this) + { + vManager.deselectAll(); + } + else if (propValue && vManager.getSelectedItem() != this) + { + vManager.setSelectedItem(this); + } + + return true; +} + +qx.Proto._evalCurrentIcon = function() +{ + if (this.getSelected() && this.getIconSelected()) { + return this.getIconSelected(); + } else { + return this.getIcon() || "icon/16/actions/document-new.png"; + } +} + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getParentFolder = function() +{ + try { + return this.getParent().getParent(); + } catch(ex) {} + + return null; +} + +qx.Proto.getLevel = function() +{ + var vParentFolder = this.getParentFolder(); + return vParentFolder ? vParentFolder.getLevel() + 1 : null; +} + +qx.Proto.getTree = function() +{ + var vParentFolder = this.getParentFolder(); + return vParentFolder ? vParentFolder.getTree() : null; +} + +qx.Proto.getIndentObject = function() { + return this._indentObject; +} + +qx.Proto.getIconObject = function() { + return this._iconObject; +} + +qx.Proto.getLabelObject = function() { + return this._labelObject; +} + +/** + * Obtain the entire hierarchy of labels from the root down to the current + * node. + * + * @param + * vArr - + * When called by the user, arr should typically be an empty array. Each + * level from the current node upwards will push its label onto the array. + */ +qx.Proto.getHierarchy = function(vArr) { + // Add our label to the array + if (this._labelObject) { + vArr.unshift(this._labelObject.getHtml()); + } + + // Get the parent folder + var parent = this.getParentFolder(); + + // If it exists... + if (parent) { + // ... then add it and its ancestors' labels to the array. + parent.getHierarchy(vArr); + } + + // Give 'em what they came for + return vArr; +} + + + + +/* +--------------------------------------------------------------------------- + QUEUE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.addToTreeQueue = function() +{ + var vTree = this.getTree(); + if (vTree) { + vTree.addChildToTreeQueue(this); + } +} + +qx.Proto.removeFromTreeQueue = function() +{ + var vTree = this.getTree(); + if (vTree) { + vTree.removeChildFromTreeQueue(this); + } +} + +qx.Proto.addToCustomQueues = function(vHint) +{ + this.addToTreeQueue(); + + qx.ui.layout.BoxLayout.prototype.addToCustomQueues.call(this, vHint); +} + +qx.Proto.removeFromCustomQueues = function(vHint) +{ + this.removeFromTreeQueue(); + + qx.ui.layout.BoxLayout.prototype.removeFromCustomQueues.call(this, vHint); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPLAYBLE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyParent = function(propValue, propOldValue, propData) +{ + qx.ui.layout.BoxLayout.prototype._modifyParent.call(this, propValue, propOldValue, propData); + + // Be sure to update previous folder also if it is closed currently + // (plus/minus symbol) + if (propOldValue && + !propOldValue.isDisplayable() && + propOldValue.getParent() && + propOldValue.getParent().isDisplayable()) { + propOldValue.getParent().addToTreeQueue(); + } + + // Be sure to update new folder also if it is closed currently + // (plus/minus symbol) + if (propValue && + !propValue.isDisplayable() && + propValue.getParent() && + propValue.getParent().isDisplayable()) { + propValue.getParent().addToTreeQueue(); + } + + return true; +} + +qx.Proto._handleDisplayableCustom = function(vDisplayable, vParent, vHint) +{ + qx.ui.layout.BoxLayout.prototype._handleDisplayableCustom.call(this, + vDisplayable, + vParent, + vHint); + + if (vHint) + { + var vParentFolder = this.getParentFolder(); + var vPreviousParentFolder = this._previousParentFolder; + + if (vPreviousParentFolder) + { + if (this._wasLastVisibleChild) + { + vPreviousParentFolder._updateIndent(); + } + else if (!vPreviousParentFolder.hasContent()) + { + vPreviousParentFolder.addToTreeQueue(); + } + } + + if (vParentFolder && + vParentFolder.isDisplayable() && + vParentFolder._initialLayoutDone) { + vParentFolder.addToTreeQueue(); + } + + if (this.isLastVisibleChild()) + { + var vPrev = this.getPreviousVisibleSibling(); + + if (vPrev && + vPrev instanceof qx.ui.treefullcontrol.AbstractTreeElement) { + vPrev._updateIndent(); + } + } + + if (vDisplayable) { + this._updateIndent(); + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + this.getTree().getManager().handleMouseDown(this, e); + e.stopPropagation(); +} + +qx.Proto._onmouseup = qx.lang.Function.returnTrue; + + + + + +/* +--------------------------------------------------------------------------- + TREE FLUSH +--------------------------------------------------------------------------- +*/ + +qx.Proto.flushTree = function() +{ + // store information for update process + this._previousParentFolder = this.getParentFolder(); + this._wasLastVisibleChild = this.isLastVisibleChild(); + + // generate html for indent area + var vLevel = this.getLevel(); + var vTree = this.getTree(); + var vImage; + var vHtml = []; + var vCurrentObject = this; + var vMinLevel = 0; + var vMaxLevel = vLevel; + + // If we're displaying the open/close button for the root node (normal)... + if (vTree.getRootOpenClose()) { + // ... then we need one more level + vMaxLevel = vLevel + 1; + } + + // If we're not displaying the root node (creating virtual roots)... + if (vTree.hideNode()) { + // ... then start one level higher + vMinLevel = 1; + } + + for (var i=vMinLevel; i<vMaxLevel; i++) + { + vImage = vCurrentObject.getIndentSymbol(vTree.getUseTreeLines(), + i, + vMinLevel, + vMaxLevel); + + if (vImage) + { + vHtml.push("<img style=\"position:absolute;top:0px;left:"); + + // location of image; Root's image could be left of margin (invisible) + vHtml.push((vMaxLevel-i-1) * 19); + + vHtml.push("px\" src=\""); + vHtml.push(this.BASE_URI); + vHtml.push(vImage); + vHtml.push("."); + vHtml.push("gif"); + vHtml.push("\" />"); + } + + vCurrentObject = vCurrentObject.getParentFolder(); + } + + this._indentObject.setHtml(vHtml.join("")); + this._indentObject.setWidth((vMaxLevel - vMinLevel) * 19); +} + + + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._indentObject) + { + this._indentObject.dispose(); + this._indentObject = null; + } + + if (this._iconObject) + { + this._iconObject.dispose(); + this._iconObject = null; + } + + if (this._labelObject) + { + this._labelObject.dispose(); + this._labelObject = null; + } + + this._previousParentFolder = null; + + this.removeEventListener("mousedown", this._onmousedown); + this.removeEventListener("mouseup", this._onmouseup); + + return qx.ui.layout.BoxLayout.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/Tree.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/Tree.js new file mode 100644 index 0000000000..e29e06777a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/Tree.js @@ -0,0 +1,541 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_treefullcontrol) + +************************************************************************ */ + +/** + * qx.ui.treefullcontrol.Tree objects are tree root nodes but act like + * TreeFolder. + * + * @param treeRowStructure An instance of qx.ui.treefullcontrol.TreeRowStructure, + * defining the structure of this tree row. + */ +qx.OO.defineClass("qx.ui.treefullcontrol.Tree", qx.ui.treefullcontrol.TreeFolder, +function(treeRowStructure) +{ + qx.ui.treefullcontrol.TreeFolder.call(this, treeRowStructure); + + // ************************************************************************ + // INITILISIZE MANAGER + // ************************************************************************ + this._manager = new qx.manager.selection.TreeFullControlSelectionManager(this); + + + this._iconObject.setAppearance("tree-icon"); + this._labelObject.setAppearance("tree-label"); + + + // ************************************************************************ + // DEFAULT STATE + // ************************************************************************ + // The tree should be open by default + this.setOpen(true); + + // Fix vertical alignment of empty tree + this.addToFolder(); + + + // ************************************************************************ + // KEY EVENT LISTENER + // ************************************************************************ + this.addEventListener("keydown", this._onkeydown); + this.addEventListener("keypress", this._onkeypress); + this.addEventListener("keyup", this._onkeyup); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +qx.OO.addProperty({ name : "useDoubleClick", + type : "boolean", + defaultValue : false, + getAlias : "useDoubleClick" + }); + +qx.OO.addProperty({ name : "useTreeLines", + type : "boolean", + defaultValue : true, + getAlias : "useTreeLines" + }); + +/*! + In specific applications, it is desirable to omit tree lines for only + certain indentation levels. This property provides an array wherein the + index of the array corresponds to the indentation level, counted from left + to right; and the value of that element, if it contains, specifically, the + boolean value <i>true</i>, indicates that tree lines at that indentation + level are to be omitted. Any value of that element other than <i>true</i>, + or if an indentation level's index does not exist in the array, means that + tree lines should be displayed for that indentation level. (There are some + minor code efficiencies that are realized if this array is empty, so after + having set an element to <i>true</i> and desiring to reset the default + behavior, you should 'delete' the element rather than setting it to some + value other than <i>true</i>.) + + If useTreeLines is <i>false</i>, then all tree lines are excluded and this + property is ignored. +*/ +qx.OO.addProperty({ name : "excludeSpecificTreeLines", + type : "object", + defaultValue : [] + }); + +/*! + Hide the root (Tree) node. This differs from the visibility property in + that this property hides *only* the current node, not the node's children. +*/ +qx.OO.addProperty({ name : "hideNode", + type : "boolean", + defaultValue : false, + getAlias : "hideNode" + }); + +/*! + Whether the Root should have an open/close button. This may also be + used in conjunction with the hideNode property to provide for virtual root + nodes. In the latter case, be very sure that the virtual root nodes are + expanded programatically, since there will be no open/close button for the + user to open them. +*/ +qx.OO.addProperty({ name : "rootOpenClose", + type : "boolean", + defaultValue : true + }); + + +/* +--------------------------------------------------------------------------- + MANAGER BINDING +--------------------------------------------------------------------------- +*/ + +qx.Proto.getManager = function() { + return this._manager; +} + +qx.Proto.getSelectedElement = function() { + return this.getManager().getSelectedItems()[0]; +} + + + + + + +/* +--------------------------------------------------------------------------- + QUEUE HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto.addChildToTreeQueue = function(vChild) +{ + if (!vChild._isInTreeQueue && !vChild._isDisplayable) { + this.debug("Ignoring invisible child: " + vChild); + } + + if (!vChild._isInTreeQueue && vChild._isDisplayable) + { + qx.ui.core.Widget.addToGlobalWidgetQueue(this); + + if (!this._treeQueue) { + this._treeQueue = {}; + } + + this._treeQueue[vChild.toHashCode()] = vChild; + + vChild._isInTreeQueue = true; + } +} + +qx.Proto.removeChildFromTreeQueue = function(vChild) +{ + if (vChild._isInTreeQueue) + { + if (this._treeQueue) { + delete this._treeQueue[vChild.toHashCode()]; + } + + delete vChild._isInTreeQueue; + } +} + +qx.Proto.flushWidgetQueue = function() { + this.flushTreeQueue(); +} + +qx.Proto.flushTreeQueue = function() +{ + if (!qx.lang.Object.isEmpty(this._treeQueue)) + { + for (var vHashCode in this._treeQueue) + { + // this.debug("Flushing Tree Child: " + this._treeQueue[vHashCode]); + this._treeQueue[vHashCode].flushTree(); + delete this._treeQueue[vHashCode]._isInTreeQueue; + } + + delete this._treeQueue; + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyUseTreeLines = function(propValue, propOldValue, propData) +{ + if (this._initialLayoutDone) { + this._updateIndent(); + } + + return true; +} + +qx.Proto._modifyHideNode = function(propValue, propOldValue, propData) +{ + if (! propValue) { + this._horizontalLayout.setHeight(this._horizontalLayout.originalHeight); + this._horizontalLayout.show(); + } else { + this._horizontalLayout.originalHeight = this._horizontalLayout.getHeight(); + this._horizontalLayout.setHeight(0); + this._horizontalLayout.hide(); + } + + if (this._initialLayoutDone) { + this._updateIndent(); + } + + return true; +} + +qx.Proto._modifyRootOpenClose = function(propValue, propOldValue, propData) +{ + if (this._initialLayoutDone) { + this._updateIndent(); + } + + return true; +} + +// Override getter so we can return a clone of the array. Otherwise, the +// setter finds the identical array (after user modifications) and the modify +// function doesn't get called. +qx.Proto.getExcludeSpecificTreeLines = function() +{ + var vName = "excludeSpecificTreeLines"; + var vUpName = qx.lang.String.toFirstUp(vName); + var vStorageField = "_value" + vUpName; + + return this[vStorageField].slice(0); +} + +qx.Proto._modifyExcludeSpecificTreeLines = function(propValue, + propOldValue, + propData) +{ + if (this._initialLayoutDone) { + this._updateIndent(); + } + + return true; +} + + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getTree = function() { + return this; +} + +qx.Proto.getParentFolder = function() { + return null; +} + +qx.Proto.getLevel = function() { + return 0; +} + + + + + + + + +/* +--------------------------------------------------------------------------- + COMMON CHECKERS +--------------------------------------------------------------------------- +*/ + +qx.ui.treefullcontrol.Tree.isTreeFolder = function(vObject) { + return (vObject && + vObject instanceof qx.ui.treefullcontrol.TreeFolder && + !(vObject instanceof qx.ui.treefullcontrol.Tree)); +} + +qx.ui.treefullcontrol.Tree.isOpenTreeFolder = function(vObject) { + return (vObject instanceof qx.ui.treefullcontrol.TreeFolder && + vObject.getOpen() && + vObject.hasContent()); +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT HANDLER +--------------------------------------------------------------------------- +*/ + +qx.Proto._onkeydown = function(e) +{ + var vManager = this.getManager(); + var vSelectedItem = vManager.getSelectedItem(); + + if (e.getKeyIdentifier() == "Enter") + { + e.preventDefault(); + if (qx.ui.treefullcontrol.Tree.isTreeFolder(vSelectedItem)) { + return vSelectedItem.toggle(); + } + } +} + + +qx.Proto._onkeypress = function(e) +{ + var vManager = this.getManager(); + var vSelectedItem = vManager.getSelectedItem(); + + switch(e.getKeyIdentifier()) + { + case "Left": + e.preventDefault(); + + if (qx.ui.treefullcontrol.Tree.isTreeFolder(vSelectedItem)) + { + if (!vSelectedItem.getOpen()) + { + var vParent = vSelectedItem.getParentFolder(); + if (vParent instanceof qx.ui.treefullcontrol.TreeFolder) { + if (!(vParent instanceof qx.ui.treefullcontrol.Tree)) { + vParent.close(); + } + + this.setSelectedElement(vParent); + } + } + else + { + return vSelectedItem.close(); + } + } + else if (vSelectedItem instanceof qx.ui.treefullcontrol.TreeFile) + { + var vParent = vSelectedItem.getParentFolder(); + if (vParent instanceof qx.ui.treefullcontrol.TreeFolder) { + if (!(vParent instanceof qx.ui.treefullcontrol.Tree)) { + vParent.close(); + } + + this.setSelectedElement(vParent); + } + } + + break; + + case "Right": + e.preventDefault(); + + if (qx.ui.treefullcontrol.Tree.isTreeFolder(vSelectedItem)) + { + if (!vSelectedItem.getOpen()) + { + return vSelectedItem.open(); + } + else if (vSelectedItem.hasContent()) + { + var vFirst = vSelectedItem.getFirstVisibleChildOfFolder(); + this.setSelectedElement(vFirst); + + if (vFirst instanceof qx.ui.tree.TreeFolder) { + vFirst.open(); + } + + return; + } + } + + break; + + default: + if (!this._fastUpdate) + { + this._fastUpdate = true; + this._oldItem = vSelectedItem; + } + + vManager.handleKeyPress(e); + } +}; + + +qx.Proto._onkeyup = function(e) +{ + if (this._fastUpdate) + { + var vNewItem = this.getManager().getSelectedItem(); + + if (! vNewItem) { + return; + } + + vNewItem.getIconObject().addState("selected"); + + delete this._fastUpdate; + delete this._oldItem; + } +} + +qx.Proto.getLastTreeChild = function() +{ + var vLast = this; + + while (vLast instanceof qx.ui.treefullcontrol.AbstractTreeElement) + { + if (!(vLast instanceof qx.ui.treefullcontrol.TreeFolder) || + !vLast.getOpen()) { + return vLast; + } + + vLast = vLast.getLastVisibleChildOfFolder(); + } + + return null; +} + +qx.Proto.getFirstTreeChild = function() { + return this; +} + +qx.Proto.setSelectedElement = function(vElement) +{ + var vManager = this.getManager(); + + vManager.setSelectedItem(vElement); + vManager.setLeadItem(vElement); +} + +/* Override getHierarchy: do not add label if root node is hidden */ +qx.Proto.getHierarchy = function(vArr) +{ + if (! this.hideNode() && this._labelObject) { + vArr.unshift(this._labelObject.getHtml()); + } + return vArr; +} + + +qx.Proto.getIndentSymbol = function(vUseTreeLines, vColumn, vLastColumn) +{ + if (vColumn == vLastColumn && + (this.hasContent() || this.getAlwaysShowPlusMinusSymbol())) + { + if (! vUseTreeLines) + { + return this.getOpen() ? "minus" : "plus"; + } + else + { + return this.getOpen() ? "only_minus" : "only_plus"; + } + } + else + { + return null; + } +} + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("keydown", this._onkeydown); + this.removeEventListener("keypress", this._onkeypress); + this.removeEventListener("keyup", this._onkeyup); + + if (this._manager) + { + this._manager.dispose(); + this._manager = null; + } + + delete this._oldItem; + + return qx.ui.treefullcontrol.TreeFolder.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFile.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFile.js new file mode 100644 index 0000000000..cb1f6ef892 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFile.js @@ -0,0 +1,83 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_treefullcontrol) + +************************************************************************ */ + +/** + * qx.ui.treefullcontrol.TreeFile objects are terminal tree rows (i.e. no + * sub-trees) + * + * @param + * treeRowStructure - + * An instance of qx.ui.treefullcontrol.TreeRowStructure, defining the + * structure of this tree row. + */ +qx.OO.defineClass("qx.ui.treefullcontrol.TreeFile", qx.ui.treefullcontrol.AbstractTreeElement, +function(treeRowStructure) +{ + qx.ui.treefullcontrol.AbstractTreeElement.call(this, treeRowStructure); +}); + + + + +/* +--------------------------------------------------------------------------- + INDENT HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto.getIndentSymbol = function(vUseTreeLines, + vColumn, + vFirstColumn, + vLastColumn) +{ + var vLevel = this.getLevel(); + var vExcludeList = this.getTree().getExcludeSpecificTreeLines(); + var vExclude = vExcludeList[vLastColumn - vColumn - 1]; + + if (vUseTreeLines && ! (vExclude === true)) + { + if (vColumn == vFirstColumn) + { + return this.isLastChild() ? "end" : "cross"; + } + else + { + return "line"; + } + } + + return null; +} + +qx.Proto._updateIndent = function() { + this.addToTreeQueue(); +} + +qx.Proto.getItems = function() { + return [this]; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFolder.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFolder.js new file mode 100644 index 0000000000..0ca957e35f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeFolder.js @@ -0,0 +1,655 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_treefullcontrol) +#embed(qx.icontheme/16/status/folder-open.png) +#embed(qx.icontheme/16/places/folder.png) + +************************************************************************ */ + +/** + * qx.ui.treefullcontrol.TreeFolder objects are tree rows which may contain + * sub-trees + * + * @param + * treeRowStructure - + * An instance of qx.ui.treefullcontrol.TreeRowStructure, defining the + * structure of this tree row. + * + * @event treeOpenWithContent {qx.event.type.DataEvent} + * @event treeOpenWhileEmpty {qx.event.type.DataEvent} + * @event treeClose {qx.event.type.DataEvent} + */ +qx.OO.defineClass("qx.ui.treefullcontrol.TreeFolder", qx.ui.treefullcontrol.AbstractTreeElement, +function(treeRowStructure) +{ + qx.ui.treefullcontrol.AbstractTreeElement.call(this, treeRowStructure); + + // Save the tree row field order. We'll need it to create children structure. + this._treeRowStructureFields = treeRowStructure._fields; + + this._iconObject.setAppearance("tree-folder-icon"); + this._labelObject.setAppearance("tree-folder-label"); + + this.addEventListener("dblclick", this._ondblclick); + + // Remapping of add/remove methods + this.add = this.addToFolder; + this.addBefore = this.addBeforeToFolder; + this.addAfter = this.addAfterToFolder; + this.addAt = this.addAtToFolder; + this.addAtBegin = this.addAtBeginToFolder; + this.addAtEnd = this.addAtEndToFolder; +}); + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + + +qx.OO.changeProperty({ name : "appearance", + type : "string", + defaultValue : "tree-folder" + }); + +qx.OO.changeProperty({ name : "icon", + type : "string" + }); + +qx.OO.changeProperty({ name : "iconSelected", + type : "string" + }); + +qx.OO.addProperty({ name : "open", + type : "boolean", + defaultValue : false + }); + +qx.OO.addProperty({ name : "alwaysShowPlusMinusSymbol", + type : "boolean", + defaultValue : false + }); + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.hasContent = function() { + return (this._containerObject && + this._containerObject.getChildrenLength() > 0); +} + +qx.Proto.open = function() +{ + if (this.getOpen()) { + return; + } + + if (this.hasContent()) + { + // If there are listeners waiting for a treeOpenWithContent event... + if (this.getTree().hasEventListeners("treeOpenWithContent")) { + // ... then issue the event + this.getTree().dispatchEvent(new qx.event.type.DataEvent("treeOpenWithContent", this), true); + } + + this.getTopLevelWidget().setGlobalCursor("progress"); + qx.client.Timer.once(this._openCallback, this, 0); + } + else + { + // If there are listeners waiting for a treeOpenWithContent event... + if (this.getTree().hasEventListeners("treeOpenWhileEmpty")) { + // ... then issue the event + this.getTree().dispatchEvent(new qx.event.type.DataEvent("treeOpenWhileEmpty", this), true); + } + + this.setOpen(true); + } +} + +qx.Proto.close = function() +{ + // If there are listeners waiting for a treeClose event... + if (this.getTree().hasEventListeners("treeClose")) { + // ... then issue the event + this.getTree().dispatchEvent(new qx.event.type.DataEvent("treeClose", this), true); + } + + this.setOpen(false); +} + +qx.Proto.toggle = function() +{ + this.getOpen() ? this.close() : this.open(); +} + +qx.Proto._openCallback = function() +{ + this.setOpen(true); + qx.ui.core.Widget.flushGlobalQueues(); + this.getTopLevelWidget().setGlobalCursor(null); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN HANDLING +--------------------------------------------------------------------------- +*/ + +qx.Proto._createChildrenStructure = function() +{ + this.setAppearance(this instanceof qx.ui.treefullcontrol.Tree + ? "tree-container" + : "tree-folder-container"); + + if (!this._horizontalLayout) + { + this.setOrientation("vertical"); + + // Create a horizontal layout for this tree row + this._horizontalLayout = new qx.ui.layout.HorizontalBoxLayout; + this._horizontalLayout.setWidth(null); + this._horizontalLayout.setParent(this); + this._horizontalLayout.setAnonymous(true); + this._horizontalLayout.setAppearance(this instanceof qx.ui.treefullcontrol.Tree + ? "tree" + : "tree-folder"); + + // Move the row fields into the horizontal layout + for (var i = 0; i < this._treeRowStructureFields.length; i++) + { + this._treeRowStructureFields[i].setParent(this._horizontalLayout); + } + + // We don't need the tree row structure any more. + this._treeRowStructureFields = null; + } + + if (!this._containerObject) + { + // Create a veritcal box layout for all of this folder's children + this._containerObject = new qx.ui.layout.VerticalBoxLayout; + this._containerObject.setWidth(null); + this._containerObject.setAnonymous(true); + + // it should be faster to first handle display, + // because the default display value is true and if we first + // setup the parent the logic do all to make the + // widget first visible and then, if the folder is not + // opened again invisible. + this._containerObject.setDisplay(this.getOpen()); + this._containerObject.setParent(this); + + // remap remove* functions + this.remapChildrenHandlingTo(this._containerObject); + } +} + +qx.Proto._handleChildMove = function(vChild, vRelationIndex, vRelationChild) +{ + if (vChild.isDisplayable()) + { + var vChildren = this._containerObject.getChildren(); + var vOldChildIndex = vChildren.indexOf(vChild); + + if (vOldChildIndex != -1) + { + if (vRelationChild) { + vRelationIndex = vChildren.indexOf(vRelationChild); + } + + if (vRelationIndex == vChildren.length-1) + { + vChild._updateIndent(); + + // Update indent of previous last child + this._containerObject.getLastVisibleChild()._updateIndent(); + } + else if (vChild._wasLastVisibleChild) + { + vChild._updateIndent(); + + // Update indent for new last child + var vPreviousSibling = vChild.getPreviousVisibleSibling(); + if (vPreviousSibling) { + vPreviousSibling._updateIndent(); + } + } + } + } +} + +qx.Proto.addToFolder = function() +{ + this._createChildrenStructure(); + + if (this._containerObject) { + return this._containerObject.add.apply(this._containerObject, arguments); + } +} + +qx.Proto.addBeforeToFolder = function(vChild, vBefore) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + this._handleChildMove(vChild, null, vBefore); + return this._containerObject.addBefore.apply(this._containerObject, + arguments); + } +} + +qx.Proto.addAfterToFolder = function(vChild, vAfter) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + this._handleChildMove(vChild, null, vAfter); + return this._containerObject.addAfter.apply(this._containerObject, + arguments); + } +} + +qx.Proto.addAtToFolder = function(vChild, vIndex) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + this._handleChildMove(vChild, vIndex); + return this._containerObject.addAt.apply(this._containerObject, arguments); + } +} + +qx.Proto.addAtBeginToFolder = function(vChild) { + return this.addAtToFolder(vChild, 0); +} + +qx.Proto.addAtEndToFolder = function(vChild) +{ + this._createChildrenStructure(); + + if (this._containerObject) + { + var vLast = this._containerObject.getLastChild(); + + if (vLast) + { + this._handleChildMove(vChild, null, vLast); + return this._containerObject.addAfter.call(this._containerObject, + vChild, + vLast); + } + else + { + return this.addAtBeginToFolder(vChild); + } + } +} + +qx.Proto._remappingChildTable = [ "remove", "removeAt", "removeAll" ]; + + + + + + +/* +--------------------------------------------------------------------------- + CHILDREN UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getContainerObject = function() +{ + return this._containerObject; +} + +qx.Proto.getHorizontalLayout = function() +{ + return this._horizontalLayout; +} + +qx.Proto.getFirstVisibleChildOfFolder = function() +{ + if (this._containerObject) { + return this._containerObject.getFirstChild(); + } +} + +qx.Proto.getLastVisibleChildOfFolder = function() +{ + if (this._containerObject) { + return this._containerObject.getLastChild(); + } +} + +qx.Proto.getItems = function() +{ + var a = [this]; + + if (this._containerObject) + { + var ch = this._containerObject.getVisibleChildren(); + + for (var i=0, chl=ch.length; i<chl; i++) { + a = a.concat(ch[i].getItems()); + } + } + + return a; +} + + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._evalCurrentIcon = function() +{ + if (this.getSelected()) { + return this.getIconSelected() || "icon/16/status/folder-open.png"; + } else { + return this.getIcon() || "icon/16/places/folder.png"; + } +} + +qx.Proto._modifyOpen = function(propValue, propOldValue, propData) +{ + // we need the whole indent process if certain tree lines are to be excluded + if (this.getTree().getExcludeSpecificTreeLines().length > 0) { + this._updateIndent(); + } else { + this._updateLastColumn(); + } + + if (this._containerObject) { + this._containerObject.setDisplay(propValue); + } + + return true; +} + +qx.Proto._modifyAlwaysShowPlusMinusSymbol = function(propValue, propOldValue, propData) +{ + var t = this.getTree(); + if (t) { + // we need the whole indent process if only certain tree lines are to be + // excluded + if (t.getExcludeSpecificTreeLines().length > 0) { + this._updateIndent(); + } else { + this._updateLastColumn(); + } + } + + return true; +} + +qx.Proto._updateLastColumn = function() +{ + if (this._indentObject) + { + var vElement = this._indentObject.getElement(); + + if (vElement && vElement.firstChild) { + vElement.firstChild.src = + (this.BASE_URI + + this.getIndentSymbol(this.getTree().getUseTreeLines(), 0, 0, 0) + + ".gif"); + } + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onmousedown = function(e) +{ + var vOriginalTarget = e.getOriginalTarget(); + + switch(vOriginalTarget) + { + case this._indentObject: + if (this._indentObject.getElement().firstChild == e.getDomTarget()) + { + this.getTree().getManager().handleMouseDown(this, e); + this.toggle(); + } + + break; + + case this._containerObject: + break; + + case this: + if (this._containerObject) { + break; + } + + // no break here + + default: + this.getTree().getManager().handleMouseDown(this, e); + } + + e.stopPropagation(); +} + +qx.Proto._onmouseup = function(e) +{ + var vOriginalTarget = e.getOriginalTarget(); + + switch(vOriginalTarget) + { + case this._indentObject: + case this._containerObject: + case this: + break; + + default: + if (!this.getTree().getUseDoubleClick()) { + this.open(); + } + } +} + +qx.Proto._ondblclick = function(e) +{ + if (!this.getTree().getUseDoubleClick()) { + return; + } + + this.toggle(); + e.stopPropagation(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + INDENT HELPER +--------------------------------------------------------------------------- +*/ + +qx.Proto.getIndentSymbol = function(vUseTreeLines, + vColumn, + vFirstColumn, + vLastColumn) +{ + var vLevel = this.getLevel(); + var vExcludeList = this.getTree().getExcludeSpecificTreeLines(); + var vExclude = vExcludeList[vLastColumn - vColumn - 1]; + + if (vColumn == vFirstColumn) + { + if (this.hasContent() || this.getAlwaysShowPlusMinusSymbol()) + { + // If tree lines were not requested, don't display them + if (!vUseTreeLines) + { + return this.getOpen() ? "minus" : "plus"; + } + + + // If this is the first level under the root... + if (vLevel == 1) { + // ... and the root is not being displayed and this is the first + // child... + var vParentFolder = this.getParentFolder(); + if (vParentFolder && + !vParentFolder._horizontalLayout.getVisibility() && + this.isFirstChild()) + { + //... then if this is also the last (i.e. only) child, use no tree + // lines; otherwise, use descender lines but no ascender. + if (this.isLastChild() || vExclude === true) + { + return this.getOpen() ? "only_minus" : "only_plus"; + } + else + { + return this.getOpen() ? "start_minus" : "start_plus"; + } + } + } + + if (vExclude === true) + { + return this.getOpen() ? "only_minus" : "only_plus"; + } + else if (this.isLastChild()) + { + return this.getOpen() ? "end_minus" : "end_plus"; + } + else + { + return this.getOpen() ? "cross_minus" : "cross_plus"; + } + } + else if (vUseTreeLines && ! (vExclude === true)) + { + return this.isLastChild() ? "end" : "cross"; + } + } + else + { + if (vUseTreeLines && ! this.isLastChild()) { + if (vExclude === true) { + return null; + } + return "line"; + } + return null; + } +} + +qx.Proto._updateIndent = function() +{ + // Intentionally bypass superclass; the _updateIndent we want is in TreeFile + qx.ui.treefullcontrol.TreeFile.prototype._updateIndent.call(this); + + if (!this._containerObject) { + return; + } + + var ch = this._containerObject.getVisibleChildren(); + for (var i=0, l=ch.length; i<l; i++) { + ch[i]._updateIndent(); + } +} + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return; + } + + this.removeEventListener("dblclick", this._ondblclick); + + if (this._horizontalLayout) + { + this._horizontalLayout.dispose(); + this._horizontalLayout = null; + } + + if (this._containerObject) + { + this._containerObject.dispose(); + this._containerObject = null; + } + + return qx.ui.treefullcontrol.AbstractTreeElement.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeRowStructure.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeRowStructure.js new file mode 100644 index 0000000000..9eedf64718 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treefullcontrol/TreeRowStructure.js @@ -0,0 +1,268 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_treefullcontrol) + +************************************************************************ */ + +/** + * The structure of a tree row. + * + * This is a singleton class. The constructor is not accessed by users; + * instead, to obtain the one and only TreeRowStructure object, call either + * + * <pre>qx.ui.treefullcontrol.TreeRowStructure.newRow()</pre> + * + * or + * + * <pre>qx.ui.treefullcontrol.TreeRowStructure.standard().</pre> + * + * The structure of a tree row is provided by a + * qx.ui.treefullcontrol.TreeRowStructure. The order of elements added to + * this object is the order in which they will be presented in a tree row. + * + * The three standard parts of a tree: the indentation (and its associated + * tree-lines, if enabled), the icon (selected or unselected), and the label + * are added to the structure in the desired order by calling, respectively, + * the methods addIndent(), addIcon() and addLabel(). + * + * By default, indentation will appear at the beginning of the tree row. This + * can be changed by calling the addIndent() method after having calling other + * add*() methods on this object. If indentation is to be at the beginning of + * the tree row, simply do not call addIndent(). + * + * Any other object which is valid within a qx.ui.layout.HorizontalBoxLayout + * may be added to the structure using addObject(). If the object has no + * special treatment, it may be made anonymous with obj.SetAnonymous(true). + * Otherwise, all handling for the object should be done by the application. + * + * A "standard" (traditional) tree row would be generated like this: + * + * <pre> + * treeRowStructure = qx.ui.treefullcontrol.TreeRowStructure.standard("Trash"); + * </pre> + * + * which equates to issuing these commands: + * + * <pre> + * treeRowStructure = qx.ui.treefullcontrol.TreeRowStructure.newRow(); + * + * //treeRowStructure.addIndent() // defaults to here; no need to call + * treeRowStructure.addIcon(); + * treeRowStructure.addLabel("Trash"); + * </pre> + * + * The former method is typically preferred. + * + * An example of a more sophisticated structure: + * + * <pre> + * treeRowStructure = qx.ui.treefullcontrol.TreeRowStructure.newRow(); + * + * // A left-justified icon + * obj = new qx.ui.basic.Image("icon/16/apps/accessories-alarm.png"); + * treeRowStructure.addObject(obj, true); + * + * // Here's our indentation and tree-lines + * treeRowStructure.addIndent(); + * + * // The standard tree icon follows + * treeRowStructure.addIcon("icon/16/places/user-desktop.png","icon/16/apps/accessories-dictionary.png"); + * + * // Right after the tree icon is a checkbox + * obj = new qx.ui.form.CheckBox(null, 23, null, false); + * obj.setPadding(0, 0); + * treeRowStructure.addObject(obj, true); + * + * // The label + * treeRowStructure.addLabel("Trash"); + * + * // All else should be right justified + * obj = new qx.ui.basic.HorizontalSpacer; + * treeRowStructure.addObject(obj, true); + * + * // Add a file size, date and mode + * obj = new qx.ui.basic.Label("23kb"); + * obj.setWidth(50); + * treeRowStructure.addObject(obj, true); + * obj = new qx.ui.basic.Label("11 Sept 1959"); + * obj.setWidth(150); + * treeRowStructure.addObject(obj, true); + * obj = new qx.ui.basic.Label("-rw-r--r--"); + * obj.setWidth(80); + * treeRowStructure.addObject(obj, true); + * </pre> + */ + +qx.OO.defineClass("qx.ui.treefullcontrol.TreeRowStructure", qx.core.Object, +function() +{ + qx.core.Object.call(this); +}); + + +/** + * Prepare to define a new row. + * + * This reinitializes the singleton TreeRowStructure so that it is ready to + * define a new tree row. + * + * @return The singleton itself, purely for convenience. + */ +qx.Proto.newRow = function() +{ + /* Create the indent, icon, and label objects */ + this._indentObject = new qx.ui.embed.HtmlEmbed; + this._iconObject = new qx.ui.basic.Image; + this._labelObject = new qx.ui.basic.Label; + + /* Create an object to hold the ordering of row objects */ + this._fields = new Array; + + /* Create an object to hold the icon names */ + this._icons = new Object; + + /* Initially assume that indentation goes at the beginning of the row */ + this._fields.push(this._indentObject); + + /* Set initial flags */ + this._indentAdded = false; + this._iconAdded = false; + this._labelAdded = false; + + /* Return the singleton (from which we were called) */ + return this; +} + +/** + * Define a new row with the 'standard' structure. + * + * This reinitializes the singleton TreeRowStructure to the state of a + * standard'or traditional tree row: + * - indentation + * - icon + * - label + * + * The icon parameters may be omitted in which case the defaults will be + * used. If the label parameter is omitted, no label will appear. + * + * @param vLabel {String} The label text + * @param vIcon {String} Relative path to the 'non-selected' icon + * @param vIconSelected {String} Relative path to the 'selected' icon + * + * @return The singleton itself, purely for convenience. + */ +qx.Proto.standard = function(vLabel, vIcon, vIconSelected) +{ + this.newRow(); + this.addIcon(vIcon, vIconSelected); + this.addLabel(vLabel); + + return this; +} + +qx.Proto.addIndent = function() +{ + /* If the assumed indent object is in use... */ + if (! this._indentAdded) + { + /* ... then remove it. */ + this._fields.shift(); + this._indentAdded = true; + } + else + { + throw new Error("Indent object added more than once."); + } + + /* Add the indentation to the structure */ + this._fields.push(this._indentObject); +} + +qx.Proto.addIcon = function(vIcon, vIconSelected) +{ + /* Ensure only one standard icon is added */ + if (! this._iconAdded) + { + this._iconAdded = true; + } + else + { + throw new Error("Icon object added more than once."); + } + + /* Track the two icon names */ + this._icons.unselected = vIcon; + this._icons.selected = vIconSelected; + + /* Add the icon to the structure */ + this._fields.push(this._iconObject); +} + +qx.Proto.addLabel = function(vLabel) +{ + /* Ensure only one standard label is added */ + if (! this._labelAdded) + { + this._labelAdded = true; + } + else + { + throw new Error("Label added more than once."); + } + + /* Track the label text */ + this._label = vLabel; + + /* Add the label to the structure */ + this._fields.push(this._labelObject); +} + +/* + * Add an object to the tree row structure. For convenience, vAnonymous can + * be provided, and if a boolean value is provided, vObj.setAnonymous() is + * called with the provided value. If the object has already been + * setAnonymous or if there is no need to do so, then provide no value for + * vAnonymous or pass 'null'. + */ +qx.Proto.addObject = function(vObj, vAnonymous) +{ + /* Is requested, set this object's anonymous state */ + if (typeof vAnonymous == "boolean") + { + vObj.setAnonymous(vAnonymous); + } + + /* Add this user-specified object to the structure */ + this._fields.push(vObj); +} + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/DefaultDataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/DefaultDataCellRenderer.js new file mode 100644 index 0000000000..adedd829a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/DefaultDataCellRenderer.js @@ -0,0 +1,45 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(treevirtual) + +************************************************************************ */ + +/** + * The default data cell renderer for a virtual tree (columns other than the + * tree column) + */ +qx.OO.defineClass("qx.ui.treevirtual.DefaultDataCellRenderer", + qx.ui.table.DefaultDataCellRenderer, +function() +{ + qx.ui.table.DefaultDataCellRenderer.call(this); +}); + + +// overridden +qx.Proto._getCellStyle = function(cellInfo) +{ + // Return the style for the div for the cell. If there's cell-specific + // style information provided, append it. + var html = qx.ui.treevirtual.SimpleTreeDataCellRenderer.MAIN_DIV_STYLE; + return html; +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataCellRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataCellRenderer.js new file mode 100644 index 0000000000..71abc0eb3f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataCellRenderer.js @@ -0,0 +1,314 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(treevirtual) + +************************************************************************ */ + +/** + * A data cell renderer for the tree column of a simple tree + */ +qx.OO.defineClass("qx.ui.treevirtual.SimpleTreeDataCellRenderer", + qx.ui.table.AbstractDataCellRenderer, +function() +{ + qx.ui.table.AbstractDataCellRenderer.call(this); + + // Base URL used for indent images + var Am = qx.manager.object.AliasManager; + this.WIDGET_TREE_URI = Am.getInstance().resolvePath("widget/tree/"); + this.STATIC_IMAGE_URI = Am.getInstance().resolvePath("static/image/") +}); + + +/** + * Set whether lines linking tree children shall be drawn on the tree. + */ +qx.OO.addProperty({ + name : "useTreeLines", + type : "boolean", + defaultValue : true, + getAlias : "useTreeLines" + }); + +/** + * Set whether the open/close button should be displayed on a branch, even if + * the branch has no children. + */ +qx.OO.addProperty({ + name : "alwaysShowOpenCloseSymbol", + type : "boolean", + defaultValue : false + }); + +/** + * When true, exclude only the first-level tree lines, creating, effectively, + * multiple unrelated root nodes. + */ +qx.OO.addProperty({ + name : "jensLautenbacherMode", + type : "boolean", + defaultValue : false + }); + + + + +// overridden +qx.Proto._getCellStyle = function(cellInfo) +{ + var node = cellInfo.value; + + // Return the style for the div for the cell. If there's cell-specific + // style information provided, append it. + var html = + qx.ui.treevirtual.SimpleTreeDataCellRenderer.MAIN_DIV_STYLE + + (node.cellStyle ? node.cellStyle + ";" : ""); + return html; +}; + + +// overridden +qx.Proto._getContentHtml = function(cellInfo) +{ + var html = ""; + var node = cellInfo.value; + var imageUrl; + var _this = this; + var Stdcr = qx.ui.treevirtual.SimpleTreeDataCellRenderer; + + function addImage(urlAndToolTip) + { + var html = Stdcr.IMG_START; + var Am = qx.manager.object.AliasManager; + + if (qx.core.Client.getInstance().isMshtml() && + /\.png$/i.test(urlAndToolTip.url)) + { + html += + this.STATIC_IMAGE_URI + "blank.gif" + + '" style="filter:' + + "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + + " src='" + urlAndToolTip.url + "',sizingMethod='scale')"; + } + else + { + var imageUrl = Am.getInstance().resolvePath(urlAndToolTip.url); + html += imageUrl + '" style="'; + } + + if (urlAndToolTip.imageWidth && urlAndToolTip.imageHeight) + { + html += + ';width:' + urlAndToolTip.imageWidth + 'px' + + ';height:' + urlAndToolTip.imageHeight + 'px'; + } + + var tooltip = urlAndToolTip.tooltip; + if (tooltip != null) + { + html += Stdcr.IMG_TITLE_START + tooltip; + } + html += Stdcr.IMG_END; + + return html; + } + + // Generate the indentation. Obtain icon determination values once rather + // than each time through the loop. + var bUseTreeLines = this.getUseTreeLines(); + var bJensLautenbacherMode = this.getJensLautenbacherMode(); + var bAlwaysShowOpenCloseSymbol = this.getAlwaysShowOpenCloseSymbol(); + + for (var i = 0; i < node.level; i++) + { + imageUrl = this._getIndentSymbol(i, + node, + bUseTreeLines, + bAlwaysShowOpenCloseSymbol, + bJensLautenbacherMode); + html += addImage({ + url : imageUrl, + imageWidth : 19, + imageHeight : 16 + }); + } + + // Add the node's icon + imageUrl = (node.bSelected ? node.iconSelected : node.icon); + if (! imageUrl) + { + if (node.type == qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF) + { + imageUrl = (node.bSelected + ? "icon/16/actions/document-open.png" + : "icon/16/actions/document-new.png"); + } + else + { + imageUrl = (node.bSelected + ? "icon/16/status/folder-open.png" + : "icon/16/places/folder.png"); + } + } + html += addImage({ url:imageUrl }); + + // Add the node's label. We calculate the "left" property with: each tree + // line (indentation) icon is 19 pixels wide; the folder icon is 16 pixels + // wide, there are two pixels of padding at the left, and we want 2 pixels + // between the folder icon and the label + html += + '<div style="position:absolute;' + + 'left:' + ((node.level * 19) + 16 + 2 + 2) + ';' + + 'top:0' + + (node.labelStyle ? ";" + node.labelStyle : "") + + ';">' + + node.label + + '</div>'; + + return html; +}; + + +qx.Proto._getIndentSymbol = function(column, + node, + bUseTreeLines, + bAlwaysShowOpenCloseSymbol, + bJensLautenbacherMode) +{ + // If we're in column 0 and jensLautenbacherMode is enabled, then we treat + // this as if no tree lines were requested. + if (column == 0 && bJensLautenbacherMode) + { + bUseTreeLines = false; + } + + // If we're not on the final column... + if (column < node.level - 1) + { + // then return either a line or a blank icon, depending on bUseTreeLines + return (bUseTreeLines && ! node.lastChild[column] + ? this.WIDGET_TREE_URI + "line.gif" + : this.STATIC_IMAGE_URI + "blank.gif"); + } + + var bLastChild = node.lastChild[node.lastChild.length - 1]; + + // Is this a branch node? + if (node.type == qx.ui.treevirtual.SimpleTreeDataModel.Type.BRANCH && + (node.opened === true || node.opened === false)) + { + // Determine if this node has any children + var child = null; + for (child in node.children) + { + // If we find even one, we're done here. + break; + } + + // Does this node have any children, or do we always want the open/close + // symbol to be shown? + if (child !== null || bAlwaysShowOpenCloseSymbol) + { + // If we're not showing tree lines... + if (! bUseTreeLines) + { + // ... then just use a plus or minus + return (node.opened + ? this.WIDGET_TREE_URI + "minus.gif" + : this.WIDGET_TREE_URI + "plus.gif"); + } + + // Are we looking at a top-level, first child of its parent? + if (column == 0 && node.bFirstChild) + { + // Yup. If it's also a last child... + if (bLastChild) + { + // ... then use no tree lines. + return (node.opened + ? this.WIDGET_TREE_URI + "only_minus.gif" + : this.WIDGET_TREE_URI + "only_plus.gif"); + } + else + { + // otherwise, use descender lines but no ascender. + return (node.opened + ? this.WIDGET_TREE_URI + "start_minus.gif" + : this.WIDGET_TREE_URI + "start_plus.gif"); + } + } + + // It's not a top-level, first child. Is this the last child of its + // parent? + if (bLastChild) + { + // Yup. Return an ending plus or minus, or blank if node.opened so + // indicates. + return (node.opened + ? this.WIDGET_TREE_URI + "end_minus.gif" + : this.WIDGET_TREE_URI + "end_plus.gif"); + } + + // Otherwise, return a crossing plus or minus, or a blank if + // node.opened so indicates. + return (node.opened + ? this.WIDGET_TREE_URI + "cross_minus.gif" + : this.WIDGET_TREE_URI + "cross_plus.gif"); + } + } + + // This node does not have any children. Return an end or cross, if we're + // using tree lines. + if (bUseTreeLines) + { + // If this is a last child, return and ending line; otherwise cross. + return (bLastChild + ? this.WIDGET_TREE_URI + "end.gif" + : this.WIDGET_TREE_URI + "cross.gif"); + } + + return this.STATIC_IMAGE_URI + "blank.gif"; +} + + +// overridden +qx.Proto._createCellStyle_array_join = function(cellInfo, htmlArr) +{ + throw new Error("USE_ARRAY_JOIN not supported"); +}; + + + +qx.Proto._createContentHtml_array_join = function(cellInfo, htmlArr) +{ + throw new Error("USE_ARRAY_JOIN not supported"); +}; + +qx.Class.MAIN_DIV_STYLE = + ';overflow:hidden;white-space:nowrap;border-right:1px solid #eeeeee;' + + 'padding-left:2px;padding-right:2px;cursor:default' + + (qx.core.Client.getInstance().isMshtml() ? '' : ';-moz-user-select:none;'); + +qx.Class.IMG_START = '<img src="'; +qx.Class.IMG_END = '"/>'; +qx.Class.IMG_TITLE_START = '" title="'; + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js new file mode 100644 index 0000000000..215830c224 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js @@ -0,0 +1,576 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(treevirtual) + +************************************************************************ */ + + + +/* + * A simple tree data model used as the table model + * + * The object structure of a single node of the tree is: + * + * { + * type : qx.ui.treevirtual.Type.LEAF, + * parentNodeId : 23, // index in _nodeArr of the parent node + * label : "My Documents", + * bSelected : true, // true if node is selected; false otherwise + * opened : null, // true (-), false (+), or null (no +/-) + * icon : "images/folder.gif", + * iconSelected : "images/folder_selected.gif", + * children : [ ], // each value is an index into _nodeArr + * + * cellStyle : "background-color:cyan" + * labelStyle : "background-color:red;color:white" + * + * // The following properties need not (and should not) be set by the + * // caller, but are automatically calculated. Some are used internally, + * // while others may be of use to event listeners. + * + * nodeId : 42, // The index in _nodeArr, useful to event listeners + * + * level : 2, // The indentation level of this tree node + * + * bFirstChild : true, + * lastChild : [ false ], // Array where the index is the column of + * // indentation, and the value is a boolean. + * // These are used to locate the + * // appropriate "tree line" icon. + * } + */ +qx.OO.defineClass("qx.ui.treevirtual.SimpleTreeDataModel", + qx.ui.table.AbstractTableModel, +function() +{ + qx.ui.table.AbstractTableModel.call(this); + + this._rowArr = [ ]; // rows, resorted into tree order as necessary + this._nodeArr = [ ]; // tree nodes, organized with hierarchy + + this._nodeRowMap = [ ]; // map nodeArr index to rowArr index. The + // index of this array is the index of + // _nodeArr, and the values in this array are + // the indexes into _rowArr. + + + this._treeColumn = 0; // default column for tree nodes + + this._selections = { }; // list of indexes of selected nodes + + this._nodeArr.push( // the root node, needed to store its children + { + label : "<virtual root>", + opened : true, + children : [ ] + }); +}); + + +// overridden +qx.Proto.setEditable = function(editable) +{ + throw new Error("Tree columns can not be made editable"); +}; + + +// overridden +qx.Proto.setColumnEditable = function(columnIndex, editable) +{ + throw new Error("Tree columns can not be made editable"); +}; + + +// overridden +qx.Proto.isColumnEditable = function(columnIndex) +{ + return false; +}; + + +// overridden +qx.Proto.isColumnSortable = function(columnIndex) +{ + return false; +}; + + +// overridden +qx.Proto.sortByColumn = function(columnIndex, ascending) +{ + throw new Error("Trees can not be sorted by column"); +}; + + +qx.Proto.getSortColumnIndex = function() +{ + return -1; +}; + + +qx.Proto.isSortAscending = function() +{ + return true; +}; + + +qx.Proto.getRowCount = function() +{ + return this._rowArr.length; +}; + + +qx.Proto.setTreeColumn = function(columnIndex) +{ + this._treeColumn = columnIndex; +} + + +qx.Proto.getTreeColumn = function() +{ + return this._treeColumn; +} + + +qx.Proto.getRowData = function(rowIndex) +{ + return this._rowArr[rowIndex]; +} + + +qx.Proto.getValue = function(columnIndex, rowIndex) +{ + if (rowIndex < 0 || rowIndex >= this._rowArr.length) + { + throw new Error ("this._rowArr row " + + "(" + rowIndex + ") out of bounds: " + + this._rowArr + + " (0.." + + (this._rowArr.length - 1) + ")");b + } + + if (columnIndex < 0 || columnIndex >= this._rowArr[rowIndex].length) + { + throw new Error ("this._rowArr column " + + "(" + columnIndex + ") out of bounds: " + + this._rowArr[rowIndex] + + " (0.." + + (this._rowArr[rowIndex].length - 1) + ")"); + } + + return this._rowArr[rowIndex][columnIndex]; +}; + + +qx.Proto._addNode = function(parentNodeId, + label, + opened, + type, + icon, + iconSelected) +{ + var parentNode; + + // Ensure that if parent was specified, it exists + if (parentNodeId) + { + parentNode = this._nodeArr[parentNodeId]; + if (! parentNode) + { + throw new Error("Request to add a child to a non-existent parent"); + } + + // Ensure parent isn't a leaf + if (parentNode.type == qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF) + { + throw new Error("Sorry, a LEAF may not have children."); + } + } + else + { + // This is a child of the root + parentNode = this._nodeArr[0]; + parentNodeId = 0; + } + + // If this is a file, we don't present open/close icon + if (type == qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF && opened) + { + throw new Error("Attempt to display a LEAF opened [" + label + "]"); + } + + // Determine the node id of this new node + var nodeId = this._nodeArr.length; + + // Set the data for this node. + var node = + { + type : type, + parentNodeId : parentNodeId, + label : label, + bSelected : false, + opened : opened, + icon : icon, + iconSelected : iconSelected, + children : [ ], + columnData : [ ] + }; + + // Add this node to the array + this._nodeArr.push(node); + + // Add this node to its parent's child array. + parentNode.children.push(nodeId); + + // Return the node id we just added + return nodeId; +}; + + + +qx.Proto.addBranch = function(parentNodeId, + label, + opened, + icon, + iconSelected) +{ + return this._addNode(parentNodeId, + label, + opened, + qx.ui.treevirtual.SimpleTreeDataModel.Type.BRANCH, + icon, + iconSelected); +}; + + +qx.Proto.addLeaf = function(parentNodeId, + label, + icon, + iconSelected) +{ + return this._addNode(parentNodeId, + label, + false, + qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF, + icon, + iconSelected); +}; + + +qx.Proto.prune = function(nodeId) +{ + // First, recursively remove all children + for (var i = 0; i < this._nodeArr[nodeId].children.length; i++) + { + this.prune(this._nodeArr[nodeId].children[i]); + } + + // Delete ourself from our parent's children list + var node = this._nodeArr[nodeId]; + qx.lang.Array.remove(this._nodeArr[node.parentNodeId].children, nodeId); + + // Delete ourself from the selections list, if we're in it. + if (this._selections[nodeId]) + { + delete this._selections[nodeId]; + } + + // We can't splice the node itself out, because that would muck up the + // nodeId == index correspondence. Instead, just replace the node with + // null so its index just becomes unused. + this._nodeArr[nodeId] = null; +}; + + + +/** + * Sets the whole data en bulk, or notifies the data model that node + * modifications are complete. + * + * @param nodeArr {Array | null} + * Pass either an Array of node objects, or null. + * + * If non-null, nodeArr is an array of node objects containing the entire + * tree to be displayed. If loading the whole data en bulk in this way, it + * is assumed that the data is correct! No error checking or validation is + * done. You'd better know what you're doing! Caveat emptor. + * + * If nodeArr is null, then this call is a notification that the user has + * completed building or modifying a tree by issuing a series of calls to + * addNode(). + */ +qx.Proto.setData = function(nodeArr) +{ + if (nodeArr instanceof Array) + { + // Determine the set of selected nodes + for (i = 0; i < nodeArr.length; i++) + { + if (nodeArr[i].selected) + { + this._selections[i] = true; + } + } + + // Save the user-supplied data. + this._nodeArr = nodeArr; + } + else if (nodeArr !== null && nodeArr !== undefined) + { + throw new Error("Expected array of node objects or null/undefined; got " + + typeof(nodeArr)); + } + + // Re-render the row array + this._render(); +}; + + +/** + * Return the array of node data. + * + * @return {Array} + * Array of node objects. See {@link qx.ui.treevirtual.SimpleTreeDataModel} + * for a description of each node. + */ +qx.Proto.getData = function() +{ + return this._nodeArr; +}; + + + +/** + * Add data to an additional column of the tree. + * + * @param nodeId + * A node identifier, as previously returned by addBranch() or addLeaf(). + * + * @param columnIndex + * The column number to which the provided data applies + * + * @param data + * The cell data for the specified column + */ +qx.Proto.setColumnData = function(nodeId, columnIndex, data) +{ + this._nodeArr[nodeId].columnData[columnIndex] = data; +} + + +qx.Proto.setState = function(nodeId, attributes) +{ + for (var attribute in attributes) + { + // If the selected state is changing... + if (attribute == "bSelected") + { + // ... then keep track of what is selected + if (attributes[attribute]) + { + this._selections[nodeId] = true; + } + else + { + delete this._selections[nodeId]; + } + } + + this._nodeArr[nodeId][attribute] = attributes[attribute]; + } +}; + + +qx.Proto.getNodeRowMap = function() +{ + return this._nodeRowMap; +}; + + +qx.Proto.clearSelections = function() +{ + // Clear selected state for any selected nodes. + for (var selection in this._selections) + { + this._nodeArr[selection].bSelected = false; + } + + // Reinitialize selections array. + this._selections = { }; +}; + + +qx.Proto.getSelections = function() +{ + return this._selections; +}; + + +/** + * Render (or re-render) the tree. Call this function after having added + * and/or deleted tree nodes (Files or Folders), or after having made changes + * to tree (or tree node) options that will cause the tree to be rendered + * differently. This function should typically be called after a set of + * concurrent changes, not after each change. + */ +qx.Proto._render = function() +{ + var _this = this; + + var inorder = function(nodeId, level) + { + var child = null; + var childNodeId; + + // For each child of the specified node... + var numChildren = _this._nodeArr[nodeId].children.length; + for (var i = 0; i < numChildren; i++) + { + // Determine the node id of this child + childNodeId = _this._nodeArr[nodeId].children[i]; + + // Get the child node + child = _this._nodeArr[childNodeId]; + + // Skip deleted nodes + if (child == null) + { + continue; + } + + // Listeners will need to know a node's id when they receive an event + child.nodeId = childNodeId; + + // (Re-)assign this node's level + child.level = level; + + // Determine if we're the first child of our parent + child.bFirstChild = (i == 0); + + // Determine if we're the last child of our parent + child.lastChild = [ i == numChildren - 1 ]; + + // Get our parent. + var parent = _this._nodeArr[child.parentNodeId]; + + // For each parent node, determine if it is a last child + while (parent.nodeId) + { + var bLast = parent.lastChild[parent.lastChild.length - 1]; + child.lastChild.unshift(bLast); + parent = _this._nodeArr[parent.parentNodeId]; + } + + // Ensure there's an entry in the columnData array for each column + if (! child.columnData) + { + child.columnData = [ ]; + } + + if (child.columnData.length < _this.getColumnCount()) + { + child.columnData[_this.getColumnCount() - 1] = null; + } + + // Add this node to the row array. Initialize a row data array. + var rowData = [ ]; + + // If additional column data is provided... + if (child.columnData) + { + // ... then add each column data. + for (var j = 0; j < child.columnData.length; j++) + { + // Is this the tree column? + if (j == _this._treeColumn) + { + // Yup. Add the tree node data + rowData.push(child); + } + else + { + // Otherwise, add the column data verbatim. + rowData.push(child.columnData[j]); + } + } + } + else + { + // No column data. Just add the tree node. + rowData.push(child); + } + + // If this node is selected, ... + if (child.bSelected) + { + // ... indicate so for the row. + rowData.selected = true; + } + + // Track the _rowArr index for each node so we can handle selections + _this._nodeRowMap[child.nodeId] = _this._rowArr.length; + + // Add the row data to the row array + _this._rowArr.push(rowData) + + // If this child is opened, ... + if (child.opened) + { + // ... then add its children too. + inorder(childNodeId, level + 1); + } + } + } + + // Reset the row array + this._rowArr = []; + + // Reset the _nodeArr -> _rowArr map + this._nodeRowMap = [ ]; + + // Begin in-order traversal of the tree from the root to regenerate _rowArr + inorder(0, 1); + + // Inform the listeners + if (this.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) + { + var data = + { + firstRow : 0, + lastRow : this._rowArr.length - 1, + firstColumn : 0, + lastColumn : this.getColumnCount() - 1 + }; + + this.dispatchEvent(new qx.event.type.DataEvent( + qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, + data), + true); + } +}; + + +// We currently support these types of tree nodes +qx.Class.Type = {}; +qx.Class.Type.LEAF = 1; +qx.Class.Type.BRANCH = 2; + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataRowRenderer.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataRowRenderer.js new file mode 100644 index 0000000000..33ae27110a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/SimpleTreeDataRowRenderer.js @@ -0,0 +1,61 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(treevirtual) + +************************************************************************ */ + +/** + * A data row renderer for a simple tree row + */ +qx.OO.defineClass("qx.ui.treevirtual.SimpleTreeDataRowRenderer", + qx.ui.table.DefaultDataRowRenderer, +function() +{ + qx.ui.table.DefaultDataRowRenderer.call(this); +}); + + +// overridden +qx.Proto.updateDataRowElement = function(rowInfo, rowElem) +{ + // If the node is selected, select the row + var tree = rowInfo.table; + var rowData = rowInfo.rowData; + var tableModel = tree.getTableModel(); + var treeCol = tableModel.getTreeColumn(); + var node = rowData[treeCol]; + + // Set the row's selected state based on the data model + rowInfo.selected = node.bSelected; + + if (node.bSelected) + { + // Ensure that the selection model knows it's selected + var nodeRowMap = tableModel.getNodeRowMap(); + var row = nodeRowMap[node.nodeId]; + tree.getSelectionModel()._addSelectionInterval(row, row); + } + + // Now call our superclass + var ddrr = qx.ui.table.DefaultDataRowRenderer; + ddrr.prototype.updateDataRowElement.call(this, rowInfo, rowElem); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/TreeVirtual.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/TreeVirtual.js new file mode 100644 index 0000000000..0acf87f56f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/treevirtual/TreeVirtual.js @@ -0,0 +1,634 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(treevirtual) + +************************************************************************ */ + +/** + * A "virtual" tree + * + * @event treeOpenWithContent {qx.event.type.DataEvent} + * @event treeOpenWhileEmpty {qx.event.type.DataEvent} + * @event treeClose {qx.event.type.DataEvent} + * @event changeSelection {qx.event.type.Event} + * + * WARNING: This widget is in active development and the interface to it is + * very likely to change, possibly on a daily basis, for a while. Do + * not use this widget yet. + * + */ +qx.OO.defineClass("qx.ui.treevirtual.TreeVirtual", qx.ui.table.Table, +function(headings) +{ + // Create a table model + var tableModel = new qx.ui.treevirtual.SimpleTreeDataModel(); + + // Specify the column headings. We accept a single string (one single + // column) or an array of strings (one or more columns). + if (typeof(headings) == "string") + { + headings = [ headings ]; + } + tableModel.setColumns(headings); + + // Call our superclass constructor + qx.ui.table.Table.call(this, tableModel); + + // Set sizes + this.setRowHeight(16); + this.setMetaColumnCounts([1, -1]); + + // Set the data cell render. We use the SimpleTreeDataCellRenderer for the + // tree column, and our DefaultDataCellRenderer for all other columns. + var stdcr = new qx.ui.treevirtual.SimpleTreeDataCellRenderer(); + var ddcr = new qx.ui.treevirtual.DefaultDataCellRenderer(); + var tcm = this.getTableColumnModel(); + var treeCol = this.getTableModel().getTreeColumn(); + for (var i = 0; i < headings.length; i++) + { + tcm.setDataCellRenderer(i, i == treeCol ? stdcr : ddcr); + } + + // Set the data row renderer. + this.setDataRowRenderer(new qx.ui.treevirtual.SimpleTreeDataRowRenderer()); + + // We need our cell renderer called on selection change, to update the icon + this.setAlwaysUpdateCells(true); + + // Move the focus with the mouse + this.setFocusCellOnMouseMove(true); + + // Change focus colors. Make them less obtrusive. + this.setRowColors( + { + bgcolFocused : "#f0f0f0", + bgcolFocusedBlur : "#f0f0f0" + }); + +/* + // Use this instead, to help determine which does what + this.setRowColors( + { + bgcolFocusedSelected : "cyan", + bgcolFocusedSelectedBlur : "green", + bgcolFocused : "yellow", + bgcolFocusedBlur : "blue", + bgcolSelected : "red", + bgcolSelectedBlur : "pink", + }); +*/ + + // Remove the outline on focus. + // + // KLUDGE ALERT: I really want to remove the old appearance, but I don't + // know how to do that. Instead, for the moment, I'll just use an existing + // appearance that won't affect the focus indicator, making the appearance + // effectively a no-op. + var scrollerArr = this._getPaneScrollerArr(); + for (var i = 0; i < scrollerArr.length; i++) + { + scrollerArr[i]._focusIndicator.setAppearance("image"); + + // Set the pane scrollers to handle the selection before displaying the + // focus, so we can manipulate the selected icon. + scrollerArr[i].setSelectBeforeFocus(true); + } + + // Arrange to select events locally. Replace the selection manager's method + // with one that calls our _handleSelectEvent method first, and it it + // indicates we should actually select the row, then call the selection + // manager's method. Our method handles deciding if the click was on the + // open/close button, and toggling the opened/closed state as necessary. + // The selection manager's method handles marking the selected row. + var _this = this; + this._getSelectionManager()._handleSelectEvent = function(index, evt) + { + var Sm = qx.ui.table.SelectionManager; + var Tv = qx.ui.treevirtual.TreeVirtual; + + // Call our local method to toggle the open/close state, if necessary + var bNoSelect = Tv.prototype._handleSelectEvent.call(_this, index, evt); + + // If we haven't been told not to do the selection... + if (! bNoSelect) + { + // then call the Selection Manager's method to do it. + Sm.prototype._handleSelectEvent.call(_this, index, evt); + } + }; +}); + + +/** + * Whether a click on the open/close button should also cause selection of the + * row. + */ +qx.OO.addProperty( + { + name : "openCloseClickSelectsRow", + type : "boolean", + defaultValue : false, + getAlias : "openCloseClickSelectsRow" + }); + + +/** + * Return the data model for this tree. + */ +qx.Proto.getDataModel = function() +{ + return this.getTableModel(); +}; + + +/** + * Set whether lines linking tree children shall be drawn on the tree. + * + * @param b {Boolean} + * <i>true</i> if tree lines should be shown; <i>false</i> otherwise. + */ +qx.Proto.setUseTreeLines = function(b) +{ + var stdcm = this.getTableModel(); + var treeCol = stdcm.getTreeColumn(); + var dcr = this.getTableColumnModel().getDataCellRenderer(treeCol); + dcr.setUseTreeLines(b); + + // Inform the listeners + if (stdcm.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) + { + var data = + { + firstRow : 0, + lastRow : stdcm._rowArr.length - 1, + firstColumn : 0, + lastColumn : stdcm.getColumnCount() - 1 + }; + + stdcm.dispatchEvent(new qx.event.type.DataEvent( + qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, + data), + true); + } +}; + + +/** + * Get whether lines linking tree children shall be drawn on the tree. + * + * @return {Boolean} + * <i>true</i> if tree lines are in use; <i>false</i> otherwise. + */ +qx.Proto.getUseTreeLines = function() +{ + var treeCol = this.getTableModel().getTreeColumn(); + var dcr = this.getTableColumnModel().getDataCellRenderer(treeCol); + return dcr.getUseTreeLines(); +} + + +/** + * Set whether the open/close button should be displayed on a branch, even if + * the branch has no children. + * + * @param b {Boolean} + * <i>true</i> if the open/close button should be shown; <i>false</i> + * otherwise. + */ +qx.Proto.setAlwaysShowOpenCloseSymbol = function(b) +{ + var stdcm = this.getTableModel(); + var treeCol = stdcm.getTreeColumn(); + var dcr = this.getTableColumnModel().getDataCellRenderer(treeCol); + dcr.setAlwaysShowOpenCloseSymbol(b); + + // Inform the listeners + if (stdcm.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) + { + var data = + { + firstRow : 0, + lastRow : stdcm._rowArr.length - 1, + firstColumn : 0, + lastColumn : stdcm.getColumnCount() - 1 + }; + + stdcm.dispatchEvent(new qx.event.type.DataEvent( + qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, + data), + true); + } +}; + + +/** + * Set whether drawing of first-level tree-node lines are disabled. + * + * @param b {Boolean} + * <i>true</i> if first-level tree lines should be disabled; + * <i>false</i> for normal operation. + */ +qx.Proto.setJensLautenbacherMode = function(b) +{ + var stdcm = this.getTableModel(); + var treeCol = stdcm.getTreeColumn(); + var dcr = this.getTableColumnModel().getDataCellRenderer(treeCol); + dcr.setJensLautenbacherMode(b); + + // Inform the listeners + if (stdcm.hasEventListeners(qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED)) + { + var data = + { + firstRow : 0, + lastRow : stdcm._rowArr.length - 1, + firstColumn : 0, + lastColumn : stdcm.getColumnCount() - 1 + }; + + stdcm.dispatchEvent(new qx.event.type.DataEvent( + qx.ui.table.TableModel.EVENT_TYPE_DATA_CHANGED, + data), + true); + } +}; + + +/** + * Get whether drawing of first-level tree lines should be disabled + * + * @return {Boolean} + * <i>true</i> if tree lines are in use; <i>false</i> otherwise. + */ +qx.Proto.getJensLautenbacherMode = function() +{ + var treeCol = this.getTableModel().getTreeColumn(); + var dcr = this.getTableColumnModel().getDataCellRenderer(treeCol); + return dcr.getJensLautenbacherMode(); +} + + +/** + * Set whether the open/close button should be displayed on a branch, even if + * the branch has no children. + * + * @return {Boolean} + * <i>true</i> if tree lines are in use; <i>false</i> otherwise. + */ +qx.Proto.getAlwaysShowOpenCloseSymbol = function() +{ + var treeCol = this.getTableModel().getTreeColumn(); + var dcr = this.getTableColumnModel().getDataCellRenderer(treeCol); + return dcr.getAlwaysShowOpenCloseSymbol(); +}; + + +qx.Proto.setSelectionMode = function(mode) +{ + this.getSelectionModel().setSelectionMode(mode); +} + + +qx.Proto.getSelectionMode = function(mode) +{ + return this.getSelectionModel().getSelectionMode(); +} + + +/** + * Toggle the opened state of the node: if the node is opened, close + * it; if it is closed, open it. + * + * @param node {Object} + * The object representing the node to have its opened/closed state + * toggled. + */ +qx.Proto.toggleOpened = function(node) +{ + // Ignore toggle request if 'opened' is not a boolean (i.e. we've been + // told explicitely not to display the open/close button). + if (node.opened !== true && node.opened !== false) + { + return; + } + + // Are we opening or closing? + if (node.opened) + { + // We're closing. If there are listeners, generate a treeClose event. + this.createDispatchDataEvent("treeClose", node); + } + else + { + // We're opening. Are there any children? + if (node.children.length > 0) + { + // Yup. If there any listeners, generate a "treeOpenWithContent" event. + this.createDispatchDataEvent("treeOpenWithContent", node); + } + else + { + // No children. If there are listeners, generate a "treeOpenWhileEmpty" + // event. + this.createDispatchDataEvent("treeOpenWhileEmpty", node); + } + } + + // Event handler may have modified the opened state. Check before toggling. + if (node.opened === true || node.opened === false) + { + // It's still boolean. Toggle the state + node.opened = ! node.opened; + + // Get the selection model + var sm = this.getSelectionModel(); + + // Clear the old selections in the tree + this.getSelectionModel()._clearSelection(); + + // Clear the old selections in the data model + this.getTableModel().clearSelections(); + } + + // Re-render the row data since formerly visible rows may now be invisible, + // or vice versa. + this.getTableModel()._render(); +}; + + +/** + * Set state attributes of a tree node. + * + * @param nodeId {Integer} + * The node identifier (returned by addBranch() or addLeaf()) representing + * the node for which attributes are being set. + * + * @param attributes {Map} + * Map with the node properties to be set. The map may contain any of the + * properties described in {@link qx.ui.treevirtual.SimpleTreeDataModel} + */ +qx.Proto.setState = function(nodeId, attributes) +{ + this.getTableModel().setState(nodeId, attributes); +}; + + +/** + * Allow setting the tree row colors. + * + * @param colors {Map} + * The value of each property in the map is a string containing either a + * number (e.g. "#518ad3") or color name ("white") representing the color + * for that type of display. The map may contain any or all of the + * following properties: + * <ul> + * <li>bgcolFocusedSelected</li> + * <li>bgcolFocusedSelectedBlur</li> + * <li>bgcolFocused</li> + * <li>bgcolFocusedBlur</li> + * <li>bgcolSelected</li> + * <li>bgcolSelectedBlur</li> + * <li>bgcolEven</li> + * <li>bgcolOdd</li> + * <li>colSelected</li> + * <li>colNormal</li> + * </ul> + */ +qx.Proto.setRowColors = function(colors) +{ + this.getDataRowRenderer().setRowColors(colors); +}; + + +/** + * Event handler. Called when a key was pressed. + * + * We handle the Enter key to toggle opened/closed tree state. All + * other keydown events are passed to our superclass. + * + * @param evt {Map} the event. + */ +qx.Proto._onkeydown = function(evt) +{ + var identifier = evt.getKeyIdentifier(); + + var consumed = false; + if (evt.getModifiers() == 0) + { + switch (identifier) + { + case "Enter": + var node = this.getTableModel().getValue(this.getFocusedColumn(), + this.getFocusedRow()); + + this.toggleOpened(node); + consumed = true; + break; + } + } + + // Was this one of our events that we handled? + if (consumed) + { + // Yup. Don't propagate it. + evt.preventDefault(); + evt.stopPropagation(); + } + else + { + // It's not one of ours. Let our superclass handle this event + qx.ui.table.Table.prototype._onkeydown.call(this, evt); + } +}; + + +/** + * Event handler. Called when the selection has changed. + * + * @param evt {Map} the event. + */ +qx.Proto._onSelectionChanged = function(evt) +{ + // Clear the old list of selected nodes + this.getTableModel().clearSelections(); + + // If selections are allowed, pass an event to our listeners + if (this.getSelectionMode() != + qx.ui.treevirtual.TreeVirtual.SelectionMode.NONE) + { + var selectedNodes = this._calculateSelectedNodes(); + + // Get the now-focused + this.createDispatchDataEvent("changeSelection", selectedNodes); + } + + // Call the superclass method + qx.ui.table.Table.prototype._onSelectionChanged.call(this, evt); +}; + + +/** + * Handles the a selection event + * + * @param index {Integer} + * The row index the mouse is pointing at. + * + * @param evt {Map} + * The mouse event. + * + * @return {Boolean} + * Returns <i>true</i> if the event was a click on the open/close button, + * <i>false</i> otherwise. + */ +qx.Proto._handleSelectEvent = function(index, evt) +{ + // Get the node to which this event applies + var node = this.getTableModel().getValue(this.getFocusedColumn(), + this.getFocusedRow()); + if (! node) + { + return false; + } + + // Was this a mouse event? + if (evt instanceof qx.event.type.MouseEvent) + { + // Yup. Get the order of the columns + var tcm = this.getTableColumnModel(); + var columnPositions = tcm._getColToXPosMap(); + + // Calculate the position of the beginning of the tree column + var treeCol = this.getTableModel().getTreeColumn(); + var left = 0; + for (i = 0; i < columnPositions[treeCol].visX; i++) + { + left += tcm.getColumnWidth(columnPositions[i].visX); + } + + // Was the click on the open/close button? That button begins at + // (node.level - 1) * 19 + 2 (the latter for padding), and has width 19. + // We add a bit of latitude to that. + var x = evt.getClientX(); + var latitude = 2; + + var buttonPos = left + (node.level - 1) * 19 + 2; + + if (x >= buttonPos - latitude && x <= buttonPos + 19 + latitude) + { + // Yup. Toggle the opened state for this node. + this.toggleOpened(node); + return true; + } + } + else + { + // Key event. Toggle the open state + this.toggleOpened(node); + return true; + } + + return this.openCloseClickSelectsRow() ? true : false; +}; + + +qx.Proto.getHierarchy = function(nodeId) +{ + var _this = this; + var components = [ ]; + + function addHierarchy(nodeId) + { + // If we're at the root... + if (! nodeId) + { + // ... then we're done + return; + } + + // Get the requested node + var node = _this.getTableModel().getData()[nodeId]; + + // Add its label to the hierarchy components + components.unshift(node.label); + + // Call recursively to our parent node. + addHierarchy(node.parentNodeId); + } + + addHierarchy(nodeId); + return components; +} + + +qx.Proto._calculateSelectedNodes = function() +{ + // Create an array of nodes that are now selected + var stdcm = this.getTableModel(); + var selectedRanges = this.getSelectionModel().getSelectedRanges(); + var selectedNodes = [ ]; + var node; + + for (var i = 0; i < selectedRanges.length; i++) + { + for (var j = selectedRanges[i].minIndex; + j <= selectedRanges[i].maxIndex; + j++) + { + node = stdcm.getValue(stdcm.getTreeColumn(), j); + stdcm.setState(node.nodeId, { bSelected : true }); + selectedNodes.push(node); + } + } + + return selectedNodes; +}; + + +/* + * Selection Modes {int} + * + * NONE + * Nothing can ever be selected. + * + * SINGLE + * Allow only one selected item. + * + * SINGLE_INTERVAL + * Allow one contiguous interval of selected items. + * + * MULTIPLE_INTERVAL + * Allow any set of selected items, whether contiguous or not. + */ +qx.Class.SelectionMode = +{ + NONE : + qx.ui.table.SelectionModel.NO_SELECTION, + + SINGLE : + qx.ui.table.SelectionModel.SINGLE_SELECTION, + + SINGLE_INTERVAL : + qx.ui.table.SelectionModel.SINGLE_INTERVAL_SELECTION, + + MULTIPLE_INTERVAL : + qx.ui.table.SelectionModel.MULTIPLE_INTERVAL_SELECTION +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/window/Window.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/window/Window.js new file mode 100644 index 0000000000..fa79b5173a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/window/Window.js @@ -0,0 +1,1441 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_window) +#embed(qx.widgettheme/window/*) + +************************************************************************ */ + +qx.OO.defineClass("qx.ui.window.Window", qx.ui.popup.Popup, +function(vCaption, vIcon, vWindowManager) +{ + qx.ui.popup.Popup.call(this); + + // ************************************************************************ + // FUNCTIONAL STYLE + // ************************************************************************ + + this.setMinWidth("auto"); + this.setMinHeight("auto"); + this.setAutoHide(false); + + + + // ************************************************************************ + // MANAGER + // ************************************************************************ + + // Init Window Manager + this.setWindowManager(vWindowManager || qx.ui.window.Window.getDefaultWindowManager()); + + + + // ************************************************************************ + // RESIZE AND MOVE FRAME + // ************************************************************************ + + var f = this._frame = new qx.ui.basic.Terminator; + f.setAppearance("window-resize-frame"); + + + // ************************************************************************ + // LAYOUT + // ************************************************************************ + + var l = this._layout = new qx.ui.layout.VerticalBoxLayout; + l.setEdge(0); + this.add(l); + + + // ************************************************************************ + // CAPTIONBAR + // ************************************************************************ + + var cb = this._captionBar = new qx.ui.layout.HorizontalBoxLayout; + cb.setAppearance("window-captionbar"); + l.add(cb); + + + // ************************************************************************ + // CAPTIONICON + // ************************************************************************ + + if (vIcon != null) + { + var ci = this._captionIcon = new qx.ui.basic.Image(vIcon); + ci.setAppearance("window-captionbar-icon"); + cb.add(ci); + } + + + // ************************************************************************ + // CAPTIONTITLE + // ************************************************************************ + + var ct = this._captionTitle = new qx.ui.basic.Label(vCaption); + ct.setAppearance("window-captionbar-title"); + ct.setSelectable(false); + cb.add(ct); + + + // ************************************************************************ + // CAPTIONFLEX + // ************************************************************************ + + var cf = this._captionFlex = new qx.ui.basic.HorizontalSpacer; + cb.add(cf); + + + // ************************************************************************ + // CAPTIONBUTTONS: MINIMIZE + // ************************************************************************ + + var bm = this._minimizeButton = new qx.ui.form.Button(null, "widget/window/minimize.gif"); + + bm.setAppearance("window-captionbar-minimize-button"); + bm.setTabIndex(-1); + + bm.addEventListener("execute", this._onminimizebuttonclick, this); + bm.addEventListener("mousedown", this._onbuttonmousedown, this); + + cb.add(bm); + + + // ************************************************************************ + // CAPTIONBUTTONS: RESTORE + // ************************************************************************ + + var br = this._restoreButton = new qx.ui.form.Button(null, "widget/window/restore.gif"); + + br.setAppearance("window-captionbar-restore-button"); + br.setTabIndex(-1); + + br.addEventListener("execute", this._onrestorebuttonclick, this); + br.addEventListener("mousedown", this._onbuttonmousedown, this); + + // don't add initially + // cb.add(br); + + + // ************************************************************************ + // CAPTIONBUTTONS: MAXIMIZE + // ************************************************************************ + + var bx = this._maximizeButton = new qx.ui.form.Button(null, "widget/window/maximize.gif"); + + bx.setAppearance("window-captionbar-maximize-button"); + bx.setTabIndex(-1); + + bx.addEventListener("execute", this._onmaximizebuttonclick, this); + bx.addEventListener("mousedown", this._onbuttonmousedown, this); + + cb.add(bx); + + + // ************************************************************************ + // CAPTIONBUTTONS: CLOSE + // ************************************************************************ + + var bc = this._closeButton = new qx.ui.form.Button(null, "widget/window/close.gif"); + + bc.setAppearance("window-captionbar-close-button"); + bc.setTabIndex(-1); + + bc.addEventListener("execute", this._onclosebuttonclick, this); + bc.addEventListener("mousedown", this._onbuttonmousedown, this); + + cb.add(bc); + + + // ************************************************************************ + // PANE + // ************************************************************************ + + var p = this._pane = new qx.ui.layout.CanvasLayout; + p.setHeight("1*"); + p.setOverflow("hidden"); + l.add(p); + + + // ************************************************************************ + // STATUSBAR + // ************************************************************************ + + var sb = this._statusBar = new qx.ui.layout.HorizontalBoxLayout; + sb.setAppearance("window-statusbar"); + + + // ************************************************************************ + // STATUSTEXT + // ************************************************************************ + + var st = this._statusText = new qx.ui.basic.Label("Ready"); + st.setAppearance("window-statusbar-text"); + st.setSelectable(false); + sb.add(st); + + + // ************************************************************************ + // INIT + // ************************************************************************ + + this.setCaption(vCaption); + this.setIcon(vIcon); + + + // ************************************************************************ + // EVENTS: WINDOW + // ************************************************************************ + + this.addEventListener("mousedown", this._onwindowmousedown, this); + this.addEventListener("mouseup", this._onwindowmouseup, this); + this.addEventListener("mousemove", this._onwindowmousemove, this); + this.addEventListener("click", this._onwindowclick, this); + + + // ************************************************************************ + // EVENTS: CAPTIONBAR + // ************************************************************************ + + cb.addEventListener("mousedown", this._oncaptionmousedown, this); + cb.addEventListener("mouseup", this._oncaptionmouseup, this); + cb.addEventListener("mousemove", this._oncaptionmousemove, this); + cb.addEventListener("dblclick", this._oncaptiondblblick, this); + + + // ************************************************************************ + // REMAPPING + // ************************************************************************ + this.remapChildrenHandlingTo(this._pane); +}); + + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/*! + Appearance of the widget +*/ +qx.OO.changeProperty({ name : "appearance", type : "string", defaultValue : "window" }); + +/*! + The windowManager to use for. +*/ +qx.OO.addProperty({ name : "windowManager", type : "object" }); + +/*! + If the window is active, only one window in a single qx.manager.object.WindowManager could + have set this to true at the same time. +*/ +qx.OO.addProperty({ name : "active", type : "boolean", defaultValue : false }); + +/*! + Should be window be modal (this disable minimize and maximize buttons) +*/ +qx.OO.addProperty({ name : "modal", type : "boolean", defaultValue : false }); + +/*! + Should be window be modal (this disable minimize and maximize buttons) +*/ +qx.OO.addProperty({ name : "mode", type : "string", defaultValue : null, possibleValues : [ "minimized", "maximized" ], allowNull : true }); + +/*! + The opener (button) of the window +*/ +qx.OO.addProperty({ name : "opener", type : "object" }); + +/*! + The text of the caption +*/ +qx.OO.addProperty({ name : "caption" }); + +/*! + The icon of the caption +*/ +qx.OO.addProperty({ name : "icon", type : "string" }); + +/*! + The text of the statusbar +*/ +qx.OO.addProperty({ name : "status", type : "string", defaultValue : "Ready" }); + +/*! + Should the close button be shown +*/ +qx.OO.addProperty({ name : "showClose", type : "boolean", defaultValue : true }); + +/*! + Should the maximize button be shown +*/ +qx.OO.addProperty({ name : "showMaximize", type : "boolean", defaultValue : true }); + +/*! + Should the minimize button be shown +*/ +qx.OO.addProperty({ name : "showMinimize", type : "boolean", defaultValue : true }); + +/*! + Should the statusbar be shown +*/ +qx.OO.addProperty({ name : "showStatusbar", type : "boolean", defaultValue : false }); + +/*! + Should the user have the ability to close the window +*/ +qx.OO.addProperty({ name : "allowClose", type : "boolean", defaultValue : true }); + +/*! + Should the user have the ability to maximize the window +*/ +qx.OO.addProperty({ name : "allowMaximize", type : "boolean", defaultValue : true }); + +/*! + Should the user have the ability to minimize the window +*/ +qx.OO.addProperty({ name : "allowMinimize", type : "boolean", defaultValue : true }); + +/*! + If the text (in the captionbar) should be visible +*/ +qx.OO.addProperty({ name : "showCaption", type : "boolean", defaultValue : true }); + +/*! + If the icon (in the captionbar) should be visible +*/ +qx.OO.addProperty({ name : "showIcon", type : "boolean", defaultValue : true }); + +/*! + If the window is resizeable +*/ +qx.OO.addProperty({ name : "resizeable", type : "boolean", defaultValue : true }); + +/*! + If the window is moveable +*/ +qx.OO.addProperty({ name : "moveable", type : "boolean", defaultValue : true }); + +/*! + The resize method to use +*/ +qx.OO.addProperty({ name : "resizeMethod", type : "string", defaultValue : "frame", possibleValues : [ "opaque", "lazyopaque", "frame", "translucent" ] }); + +/*! + The move method to use +*/ +qx.OO.addProperty({ name : "moveMethod", type : "string", defaultValue : "opaque", possibleValues : [ "opaque", "frame", "translucent" ] }); + + + + +/* +--------------------------------------------------------------------------- + MANAGER HANDLING +--------------------------------------------------------------------------- +*/ + +qx.ui.window.Window.getDefaultWindowManager = function() +{ + if (!qx.ui.window.Window._defaultWindowManager) { + qx.ui.window.Window._defaultWindowManager = new qx.manager.object.WindowManager; + } + + return qx.ui.window.Window._defaultWindowManager; +} + + + + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +qx.Proto.getPane = function() { + return this._pane; +} + +qx.Proto.getCaptionBar = function() { + return this._captionBar; +} + +qx.Proto.getStatusBar = function() { + return this._statusBar; +} + +qx.Proto.close = function() { + this.hide(); +} + +qx.Proto.open = function(vOpener) +{ + if (vOpener != null) { + this.setOpener(vOpener); + } + + if (this.getCentered()) { + this.centerToBrowser(); + } + + this.show(); +} + +qx.Proto.focus = function() { + this.setActive(true); +} + +qx.Proto.blur = function() { + this.setActive(false); +} + +qx.Proto.maximize = function() { + this.setMode("maximized"); +} + +qx.Proto.minimize = function() { + this.setMode("minimized"); +} + +qx.Proto.restore = function() { + this.setMode(null); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + APPEAR/DISAPPEAR +--------------------------------------------------------------------------- +*/ + +qx.Proto._beforeAppear = function() +{ + // Intentionally bypass superclass and call super.super._beforeAppear + qx.ui.layout.CanvasLayout.prototype._beforeAppear.call(this); + + // Hide popups + qx.manager.object.PopupManager.getInstance().update(); + + // Configure the focus root to be the current opened window + qx.event.handler.EventHandler.getInstance().setFocusRoot(this); + + this.getWindowManager().add(this); + this._makeActive(); +} + +qx.Proto._beforeDisappear = function() +{ + // Intentionally bypass superclass and call super.super._beforeDisappear + qx.ui.layout.CanvasLayout.prototype._beforeDisappear.call(this); + + // Reset focus root + var vFocusRoot = qx.event.handler.EventHandler.getInstance().getFocusRoot(); + if (vFocusRoot == this || this.contains(vFocusRoot)) { + qx.event.handler.EventHandler.getInstance().setFocusRoot(null); + } + + // Be sure to disable any capturing inside invisible parts + // Is this to much overhead? + // Are there any other working solutions? + var vWidget = qx.event.handler.EventHandler.getInstance().getCaptureWidget(); + if (vWidget && this.contains(vWidget)) { + vWidget.setCapture(false); + } + + this.getWindowManager().remove(this); + this._makeInactive(); +} + + + + + +/* +--------------------------------------------------------------------------- + ZIndex Positioning +--------------------------------------------------------------------------- +*/ + +qx.Proto._minZIndex = 1e5; + +qx.Proto._sendTo = function() +{ + var vAll = qx.lang.Object.getValues(this.getWindowManager().getAll()).sort(qx.util.Compare.byZIndex); + var vLength = vAll.length; + var vIndex = this._minZIndex; + + for (var i=0; i<vLength; i++) { + vAll[i].setZIndex(vIndex++); + } +} + + + + + + +/* +--------------------------------------------------------------------------- + MODIFIERS +--------------------------------------------------------------------------- +*/ + +qx.Proto._modifyActive = function(propValue, propOldValue, propData) +{ + if (propOldValue) + { + if (this.getFocused()) { + this.setFocused(false); + } + + if (this.getWindowManager().getActiveWindow() == this) { + this.getWindowManager().setActiveWindow(null); + } + + this.removeState("active"); + this._captionBar.removeState("active"); + } + else + { + // Switch focus + // Also do this if gets inactive as this moved the focus outline + // away from any focused child. + if (!this.getFocusedChild()) { + this.setFocused(true); + } + + this.getWindowManager().setActiveWindow(this); + this.bringToFront(); + + this.addState("active"); + this._captionBar.addState("active"); + } + + return true; +} + +qx.Proto._modifyModal = function(propValue, propOldValue, propData) +{ + // Inform blocker + if (this._initialLayoutDone && this.getVisibility() && this.getDisplay()) + { + var vTop = this.getTopLevelWidget(); + propValue ? vTop.block(this) : vTop.release(this); + } + + return true; +} + +qx.Proto._modifyAllowClose = function(propValue, propOldValue, propData) { + return this._closeButtonManager(); +} + +qx.Proto._modifyAllowMaximize = function(propValue, propOldValue, propData) { + return this._maximizeButtonManager(); +} + +qx.Proto._modifyAllowMinimize = function(propValue, propOldValue, propData) { + return this._minimizeButtonManager(); +} + +qx.Proto._modifyMode = function(propValue, propOldValue, propData) +{ + switch(propValue) + { + case "minimized": + this._minimize(); + break; + + case "maximized": + this._maximize(); + break; + + default: + switch(propOldValue) + { + case "maximized": + this._restoreFromMaximized(); + break; + + case "minimized": + this._restoreFromMinimized(); + break; + } + } + + return true; +} + +qx.Proto._modifyShowCaption = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._captionBar.addAt(this._captionTitle, this.getShowIcon() ? 1 : 0); + } + else + { + this._captionBar.remove(this._captionTitle); + } + + return true; +} + +qx.Proto._modifyShowIcon = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._captionBar.addAtBegin(this._captionIcon); + } + else + { + this._captionBar.remove(this._captionIcon); + } + + return true; +} + +qx.Proto._modifyShowStatusbar = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._layout.addAtEnd(this._statusBar); + } + else + { + this._layout.remove(this._statusBar); + } + + return true; +} + +qx.Proto._modifyShowClose = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._captionBar.addAtEnd(this._closeButton); + } + else + { + this._captionBar.remove(this._closeButton); + } + + return true; +} + +qx.Proto._modifyShowMaximize = function(propValue, propOldValue, propData) +{ + if (propValue) + { + var t = this.getMode() == "maximized" ? this._restoreButton : this._maximizeButton; + + if (this.getShowMinimize()) + { + this._captionBar.addAfter(t, this._minimizeButton); + } + else + { + this._captionBar.addAfter(t, this._captionFlex); + } + } + else + { + this._captionBar.remove(this._maximizeButton); + this._captionBar.remove(this._restoreButton); + } + + return true; +} + +qx.Proto._modifyShowMinimize = function(propValue, propOldValue, propData) +{ + if (propValue) + { + this._captionBar.addAfter(this._minimizeButton, this._captionFlex); + } + else + { + this._captionBar.remove(this._minimizeButton); + } + + return true; +} + +qx.Proto._minimizeButtonManager = function() +{ + this._minimizeButton.setEnabled(this.getAllowMinimize()); + + return true; +} + +qx.Proto._closeButtonManager = function() +{ + this._closeButton.setEnabled(this.getAllowClose()); + + return true; +} + +qx.Proto._maximizeButtonManager = function() +{ + var b = this.getAllowMaximize() && this.getResizeable() && this._computedMaxWidthTypeNull && this._computedMaxHeightTypeNull; + + this._maximizeButton.setEnabled(b); + this._restoreButton.setEnabled(b); + + return true; +} + +qx.Proto._modifyStatus = function(propValue, propOldValue, propData) +{ + this._statusText.setHtml(propValue); + + return true; +} + +qx.Proto._modifyMaxWidth = function(propValue, propOldValue, propData) { + return this._maximizeButtonManager(); +} + +qx.Proto._modifyMaxHeight = function(propValue, propOldValue, propData) { + return this._maximizeButtonManager(); +} + +qx.Proto._modifyResizeable = function(propValue, propOldValue, propData) { + return this._maximizeButtonManager(); +} + +qx.Proto._modifyCaption = function(propValue, propOldValue, propData) +{ + this._captionTitle.setHtml(propValue); + return true; +} + + + + + +/* +--------------------------------------------------------------------------- + STATE LAYOUT IMPLEMENTATION +--------------------------------------------------------------------------- +*/ + +qx.Proto._minimize = function() +{ + this.blur(); + this.hide(); +} + +qx.Proto._restoreFromMaximized = function() +{ + // restore previous dimension and location + this.setLeft(this._previousLeft ? this._previousLeft : null); + this.setWidth(this._previousWidth ? this._previousWidth : null); + this.setRight(this._previousRight ? this._previousRight : null); + + this.setTop(this._previousTop ? this._previousTop : null); + this.setHeight(this._previousHeight ? this._previousHeight : null); + this.setBottom(this._previousBottom ? this._previousBottom : null); + + // update state + this.removeState("maximized"); + + // toggle button + if (this.getShowMaximize()) + { + var cb = this._captionBar; + var v = cb.indexOf(this._restoreButton); + + cb.remove(this._restoreButton); + cb.addAt(this._maximizeButton, v); + } + + // finally focus the window + this.focus(); +} + +qx.Proto._restoreFromMinimized = function() +{ + if (this.hasState("maximized")) + { + this.setMode("maximized"); + } + + this.show(); + this.focus(); +} + +qx.Proto._maximize = function() +{ + if (this.hasState("maximized")) + { + return; + } + + // store current dimension and location + this._previousLeft = this.getLeft(); + this._previousWidth = this.getWidth(); + this._previousRight = this.getRight(); + this._previousTop = this.getTop(); + this._previousHeight = this.getHeight(); + this._previousBottom = this.getBottom(); + + // setup new dimension and location + this.setWidth(null); + this.setLeft(0); + this.setRight(0); + this.setHeight(null); + this.setTop(0); + this.setBottom(0); + + // update state + this.addState("maximized"); + + // toggle button + if (this.getShowMaximize()) + { + var cb = this._captionBar; + var v = cb.indexOf(this._maximizeButton); + + cb.remove(this._maximizeButton); + cb.addAt(this._restoreButton, v); + } + + // finally focus the window + this.focus(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS: WINDOW +--------------------------------------------------------------------------- +*/ + +qx.Proto._onwindowmousedown = function(e) +{ + this.focus(); + + if (this._resizeNorth || this._resizeSouth || this._resizeWest || this._resizeEast) + { + // enable capturing + this.setCapture(true); + + // activate global cursor + this.getTopLevelWidget().setGlobalCursor(this.getCursor()); + + // caching element + var el = this.getElement(); + + // measuring and caching of values for resize session + var pa = this.getParent(); + var pl = pa.getElement(); + + var l = qx.html.Location.getPageAreaLeft(pl); + var t = qx.html.Location.getPageAreaTop(pl); + var r = qx.html.Location.getPageAreaRight(pl); + var b = qx.html.Location.getPageAreaBottom(pl); + + // handle frame and translucently + switch(this.getResizeMethod()) + { + case "translucent": + this.setOpacity(0.5); + break; + + case "frame": + var f = this._frame; + + if (f.getParent() != this.getParent()) + { + f.setParent(this.getParent()); + qx.ui.core.Widget.flushGlobalQueues(); + } + + f._applyRuntimeLeft(qx.html.Location.getPageBoxLeft(el) - l); + f._applyRuntimeTop(qx.html.Location.getPageBoxTop(el) - t); + + f._applyRuntimeWidth(qx.html.Dimension.getBoxWidth(el)); + f._applyRuntimeHeight(qx.html.Dimension.getBoxHeight(el)); + + f.setZIndex(this.getZIndex() + 1); + + break; + } + + // create resize session + var s = this._resizeSession = {}; + + if (this._resizeWest) + { + s.boxWidth = qx.html.Dimension.getBoxWidth(el); + s.boxRight = qx.html.Location.getPageBoxRight(el); + } + + if (this._resizeWest || this._resizeEast) + { + s.boxLeft = qx.html.Location.getPageBoxLeft(el); + + s.parentAreaOffsetLeft = l; + s.parentAreaOffsetRight = r; + + s.minWidth = this.getMinWidthValue(); + s.maxWidth = this.getMaxWidthValue(); + } + + if (this._resizeNorth) + { + s.boxHeight = qx.html.Dimension.getBoxHeight(el); + s.boxBottom = qx.html.Location.getPageBoxBottom(el); + } + + if (this._resizeNorth || this._resizeSouth) + { + s.boxTop = qx.html.Location.getPageBoxTop(el); + + s.parentAreaOffsetTop = t; + s.parentAreaOffsetBottom = b; + + s.minHeight = this.getMinHeightValue(); + s.maxHeight = this.getMaxHeightValue(); + } + } + else + { + // cleanup resize session + delete this._resizeSession; + } + + // stop event + e.stopPropagation(); +} + +qx.Proto._onwindowmouseup = function(e) +{ + var s = this._resizeSession; + + if (s) + { + // disable capturing + this.setCapture(false); + + // deactivate global cursor + this.getTopLevelWidget().setGlobalCursor(null); + + // sync sizes to frame + switch(this.getResizeMethod()) + { + case "frame": + var o = this._frame; + if (!(o && o.getParent())) { + break; + } + // no break here + + case "lazyopaque": + if (s.lastLeft != null) { + this.setLeft(s.lastLeft); + } + + if (s.lastTop != null) { + this.setTop(s.lastTop); + } + + if (s.lastWidth != null) { + this.setWidth(s.lastWidth); + } + + if (s.lastHeight != null) { + this.setHeight(s.lastHeight); + } + + if (this.getResizeMethod() == "frame") { + this._frame.setParent(null); + } + break; + + case "translucent": + this.setOpacity(null); + break; + } + + // cleanup session + delete this._resizeNorth; + delete this._resizeEast; + delete this._resizeSouth; + delete this._resizeWest; + + delete this._resizeSession; + } + + // stop event + e.stopPropagation(); +} + +qx.Proto._near = function(p, e) { + return e > (p - 5) && e < (p + 5); +} + +qx.Proto._onwindowmousemove = function(e) +{ + if (!this.getResizeable() || this.getMode() != null) { + return; + } + + var s = this._resizeSession; + + if (s) + { + if (this._resizeWest) + { + s.lastWidth = qx.lang.Number.limit(s.boxWidth + s.boxLeft - Math.max(e.getPageX(), s.parentAreaOffsetLeft), s.minWidth, s.maxWidth); + s.lastLeft = s.boxRight - s.lastWidth - s.parentAreaOffsetLeft; + } + else if (this._resizeEast) + { + s.lastWidth = qx.lang.Number.limit(Math.min(e.getPageX(), s.parentAreaOffsetRight) - s.boxLeft, s.minWidth, s.maxWidth); + } + + if (this._resizeNorth) + { + s.lastHeight = qx.lang.Number.limit(s.boxHeight + s.boxTop - Math.max(e.getPageY(), s.parentAreaOffsetTop), s.minHeight, s.maxHeight); + s.lastTop = s.boxBottom - s.lastHeight - s.parentAreaOffsetTop; + } + else if (this._resizeSouth) + { + s.lastHeight = qx.lang.Number.limit(Math.min(e.getPageY(), s.parentAreaOffsetBottom) - s.boxTop, s.minHeight, s.maxHeight); + } + + switch(this.getResizeMethod()) + { + case "opaque": + case "translucent": + if (this._resizeWest || this._resizeEast) + { + this.setWidth(s.lastWidth); + + if (this._resizeWest) { + this.setLeft(s.lastLeft); + } + } + + if (this._resizeNorth || this._resizeSouth) + { + this.setHeight(s.lastHeight); + + if (this._resizeNorth) { + this.setTop(s.lastTop); + } + } + + break; + + default: + var o = this.getResizeMethod() == "frame" ? this._frame : this; + + if (this._resizeWest || this._resizeEast) + { + o._applyRuntimeWidth(s.lastWidth); + + if (this._resizeWest) { + o._applyRuntimeLeft(s.lastLeft); + } + } + + if (this._resizeNorth || this._resizeSouth) + { + o._applyRuntimeHeight(s.lastHeight); + + if (this._resizeNorth) { + o._applyRuntimeTop(s.lastTop); + } + } + } + } + else + { + var resizeMode = ""; + var el = this.getElement(); + + this._resizeNorth = this._resizeSouth = this._resizeWest = this._resizeEast = false; + + if (this._near(qx.html.Location.getPageBoxTop(el), e.getPageY())) + { + resizeMode = "n"; + this._resizeNorth = true; + } + else if (this._near(qx.html.Location.getPageBoxBottom(el), e.getPageY())) + { + resizeMode = "s"; + this._resizeSouth = true; + } + + if (this._near(qx.html.Location.getPageBoxLeft(el), e.getPageX())) + { + resizeMode += "w"; + this._resizeWest = true; + } + else if (this._near(qx.html.Location.getPageBoxRight(el), e.getPageX())) + { + resizeMode += "e"; + this._resizeEast = true; + } + + if (this._resizeNorth || this._resizeSouth || this._resizeWest || this._resizeEast) + { + this.setCursor(resizeMode + "-resize"); + } + else + { + this.setCursor(null); + } + } + + // stop event + e.stopPropagation(); +} + +qx.Proto._onwindowclick = function(e) +{ + // stop event + e.stopPropagation(); +}; + + + + + +/* +--------------------------------------------------------------------------- + EVENTS: BUTTONS +--------------------------------------------------------------------------- +*/ + +qx.Proto._onbuttonmousedown = function(e) { + e.stopPropagation(); +} + +qx.Proto._onminimizebuttonclick = function(e) +{ + this.minimize(); + + // we need to be sure that the button gets the right states after clicking + // because the button will move and does not get the mouseup event anymore + this._minimizeButton.removeState("pressed"); + this._minimizeButton.removeState("abandoned"); + this._minimizeButton.removeState("over"); + + e.stopPropagation(); +} + +qx.Proto._onrestorebuttonclick = function(e) +{ + this.restore(); + + // we need to be sure that the button gets the right states after clicking + // because the button will move and does not get the mouseup event anymore + this._restoreButton.removeState("pressed"); + this._restoreButton.removeState("abandoned"); + this._restoreButton.removeState("over"); + + e.stopPropagation(); +} + +qx.Proto._onmaximizebuttonclick = function(e) +{ + this.maximize(); + + // we need to be sure that the button gets the right states after clicking + // because the button will move and does not get the mouseup event anymore + this._maximizeButton.removeState("pressed"); + this._maximizeButton.removeState("abandoned"); + this._maximizeButton.removeState("over"); + + e.stopPropagation(); +} + +qx.Proto._onclosebuttonclick = function(e) +{ + this.close(); + + // we need to be sure that the button gets the right states after clicking + // because the button will move and does not get the mouseup event anymore + this._closeButton.removeState("pressed"); + this._closeButton.removeState("abandoned"); + this._closeButton.removeState("over"); + + e.stopPropagation(); +} + + + + + + + +/* +--------------------------------------------------------------------------- + EVENTS: CAPTIONBAR +--------------------------------------------------------------------------- +*/ + +qx.Proto._oncaptionmousedown = function(e) +{ + if (!e.isLeftButtonPressed() || !this.getMoveable() || this.getMode() != null) { + return; + } + + // enable capturing + this._captionBar.setCapture(true); + + // element cache + var el = this.getElement(); + + // measuring and caching of values for drag session + var pa = this.getParent(); + var pl = pa.getElement(); + + var l = qx.html.Location.getPageAreaLeft(pl); + var t = qx.html.Location.getPageAreaTop(pl); + var r = qx.html.Location.getPageAreaRight(pl); + var b = qx.html.Location.getPageAreaBottom(pl); + + this._dragSession = + { + offsetX : e.getPageX() - qx.html.Location.getPageBoxLeft(el) + l, + offsetY : e.getPageY() - qx.html.Location.getPageBoxTop(el) + t, + + parentAvailableAreaLeft : l + 5, + parentAvailableAreaTop : t + 5, + parentAvailableAreaRight : r - 5, + parentAvailableAreaBottom : b - 5 + } + + // handle frame and translucently + switch(this.getMoveMethod()) + { + case "translucent": + this.setOpacity(0.5); + break; + + case "frame": + var f = this._frame; + + if (f.getParent() != this.getParent()) + { + f.setParent(this.getParent()); + qx.ui.core.Widget.flushGlobalQueues(); + } + + f._applyRuntimeLeft(qx.html.Location.getPageBoxLeft(el) - l); + f._applyRuntimeTop(qx.html.Location.getPageBoxTop(el) - t); + + f._applyRuntimeWidth(qx.html.Dimension.getBoxWidth(el)); + f._applyRuntimeHeight(qx.html.Dimension.getBoxHeight(el)); + + f.setZIndex(this.getZIndex() + 1); + + break; + } +} + +qx.Proto._oncaptionmouseup = function(e) +{ + var s = this._dragSession; + + if (!s) { + return; + } + + // disable capturing + this._captionBar.setCapture(false); + + // move window to last position + if (s.lastX != null) { + this.setLeft(s.lastX); + } + + if (s.lastY != null) { + this.setTop(s.lastY); + } + + // handle frame and translucently + switch(this.getMoveMethod()) + { + case "translucent": + this.setOpacity(null); + break; + + case "frame": + this._frame.setParent(null); + break; + } + + // cleanup session + delete this._dragSession; +} + +qx.Proto._oncaptionmousemove = function(e) +{ + var s = this._dragSession; + + // pre check for active session and capturing + if (!s || !this._captionBar.getCapture()) { + return; + } + + // pre check if we go out of the available area + if (!qx.lang.Number.isBetweenRange(e.getPageX(), s.parentAvailableAreaLeft, s.parentAvailableAreaRight) || !qx.lang.Number.isBetweenRange(e.getPageY(), s.parentAvailableAreaTop, s.parentAvailableAreaBottom)) { + return; + } + + // use the fast and direct dom methods + var o = this.getMoveMethod() == "frame" ? this._frame : this; + + o._applyRuntimeLeft(s.lastX = e.getPageX() - s.offsetX); + o._applyRuntimeTop(s.lastY = e.getPageY() - s.offsetY); +} + +qx.Proto._oncaptiondblblick = function() +{ + if (!this._maximizeButton.getEnabled()) { + return; + } + + return this.getMode() == "maximized" ? this.restore() : this.maximize(); +} + + + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + if (this._layout) + { + this._layout.dispose(); + this._layout = null; + } + + if (this._frame) + { + this._frame.dispose(); + this._frame = null; + } + + if (this._captionBar) + { + this._captionBar.dispose(); + this._captionBar = null; + } + + if (this._captionIcon) + { + this._captionIcon.dispose(); + this._captionIcon = null; + } + + if (this._captionTitle) + { + this._captionTitle.dispose(); + this._captionTitle = null; + } + + if (this._captionFlex) + { + this._captionFlex.dispose(); + this._captionFlex = null; + } + + if (this._closeButton) + { + this._closeButton.dispose(); + this._closeButton = null; + } + + if (this._minimizeButton) + { + this._minimizeButton.dispose(); + this._minimizeButton = null; + } + + if (this._maximizeButton) + { + this._maximizeButton.dispose(); + this._maximizeButton = null; + } + + if (this._restoreButton) + { + this._restoreButton.dispose(); + this._restoreButton = null; + } + + if (this._pane) + { + this._pane.dispose(); + this._pane = null; + } + + if (this._statusBar) + { + this._statusBar.dispose(); + this._statusBar = null; + } + + if (this._statusText) + { + this._statusText.dispose(); + this._statusText = null; + } + + return qx.ui.popup.Popup.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/ColorUtil.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/ColorUtil.js new file mode 100644 index 0000000000..f519fa4a41 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/ColorUtil.js @@ -0,0 +1,196 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Methods to convert colors between ddiffernt color spaces. + */ +qx.OO.defineClass("qx.util.ColorUtil"); + +/** + * Convert RGB colors to HSB + * + * @param vRed {Number} Red value. Range: 0..255 + * @param vGreen {Number} Green value. Range: 0..255 + * @param vBlue {Number} Blue value. Range: 0..255 + * + * @return {Map} Map with the keys following keys: + * <ul> + * <li>'hue': range 0..360</li> + * <li>'saturation': range 0..100</li> + * <li>'brightness': range 0..100</li> + * </ul> + */ +qx.Class.rgb2hsb = function(vRed, vGreen, vBlue) +{ + var vHue, vSaturation, vBrightness; + + vRed = parseFloat(vRed); + vGreen = parseFloat(vGreen); + vBlue = parseFloat(vBlue); + + var cmax = (vRed > vGreen) ? vRed : vGreen; + if (vBlue > cmax) { + cmax = vBlue; + } + + var cmin = (vRed < vGreen) ? vRed : vGreen; + if (vBlue < cmin) { + cmin = vBlue; + } + + vBrightness = cmax / 255.0; + + if (cmax != 0) + { + vSaturation = (cmax - cmin) / cmax; + } + else + { + vSaturation = 0; + } + + if (vSaturation == 0) + { + vHue = 0; + } + else + { + var redc = (cmax - vRed) / (cmax - cmin); + var greenc = (cmax - vGreen) / (cmax - cmin); + var bluec = (cmax - vBlue) / (cmax - cmin); + + if (vRed == cmax) + { + vHue = bluec - greenc; + } + else if (vGreen == cmax) + { + vHue = 2.0 + redc - bluec; + } + else + { + vHue = 4.0 + greenc - redc; + } + + vHue = vHue / 6.0; + if (vHue < 0) vHue = vHue + 1.0; + } + + return { + hue : Math.round(vHue * 360), + saturation : Math.round(vSaturation * 100), + brightness : Math.round(vBrightness * 100) + } +} + + +/** + * Convert HSB colors to RGB + * + * @param vHue {Number} Hue value. Range 0..360 + * @param vSaturation {Number} Saturation value. Range 0..100 + * @param vBrightness {Number} Brightness value. Range 0..100 + * + * @return {Map} Map the the following keys: + * <ul> + * <li>'red': range 0..255</li> + * <li>'green': range 0..255</li> + * <li>'blue': range 0..255</li> + * </ul> + */ +qx.Class.hsb2rgb = function(vHue, vSaturation, vBrightness) +{ + var i, f, p, q, t, vReturn; + + vHue = parseFloat(vHue/360); + vSaturation = parseFloat(vSaturation/100); + vBrightness = parseFloat(vBrightness/100); + + if(vHue >= 1.0) vHue %= 1.0; + if(vSaturation > 1.0) vSaturation = 1.0; + if(vBrightness > 1.0) vBrightness = 1.0; + + var tov = Math.floor(255 * vBrightness); + + var vReturn = {}; + + if(vSaturation == 0.0) + { + vReturn.red = vReturn.green = vReturn.blue = tov; + } + else + { + vHue *= 6.0; + + i = Math.floor(vHue); + + f = vHue - i; + + p = Math.floor(tov * (1.0 - vSaturation)); + q = Math.floor(tov * (1.0 - (vSaturation * f))); + t = Math.floor(tov * (1.0 - (vSaturation * (1.0 - f)))); + + switch(i) + { + case 0: + vReturn.red = tov; + vReturn.green = t; + vReturn.blue = p; + break; + + case 1: + vReturn.red = q; + vReturn.green = tov; + vReturn.blue = p; + break; + + case 2: + vReturn.red = p; + vReturn.green = tov; + vReturn.blue = t; + break; + + case 3: + vReturn.red = p; + vReturn.green = q; + vReturn.blue = tov; + break; + + case 4: + vReturn.red = t; + vReturn.green = p; + vReturn.blue = tov; + break; + + case 5: + vReturn.red = tov; + vReturn.green = p; + vReturn.blue = q; + break; + } + } + + return vReturn; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Compare.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Compare.js new file mode 100644 index 0000000000..00b8971411 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Compare.js @@ -0,0 +1,225 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Collection of methods to compare two values. + */ +qx.OO.defineClass("qx.util.Compare"); + + +/** + * Compare two Strings + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byString = function(a, b) { + return a==b ? 0 : a > b ? 1 : -1; +}; + + +/** + * Compare two Strings ignoring the letter case. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ + +qx.util.Compare.byStringCaseInsensitive = function(a, b) { + return qx.util.Compare.byString(a.toLowerCase(), b.toLowerCase()); +}; + + +/** + * Compare two Strings but first convert umlauts to an ascii character. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byStringUmlautsShort = function(a, b) { + return qx.util.Compare.byString(qx.util.Normalization.umlautsShort(a), qx.util.Normalization.umlautsShort(b)); +}; + + +/** + * Compare two Strings but first convert umlauts to an ascii character and ignore letter case. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byStringUmlautsShortCaseInsensitive = function(a, b) { + return qx.util.Compare.byString(qx.util.Normalization.umlautsShort(a).toLowerCase(), qx.util.Normalization.umlautsShort(b).toLowerCase()); +}; + + +/** + * Compare two Strings but first convert umlauts to ascii characters. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byStringUmlautsLong = function(a, b) { + return qx.util.Compare.byString(qx.util.Normalization.umlautsLong(a), qx.util.Normalization.umlautsLong(b)); +}; + + +/** + * Compare two Strings but first convert umlauts to ascii characters and ignore letter case. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byStringUmlautsLongCaseInsensitive = function(a, b) { + return qx.util.Compare.byString(qx.util.Normalization.umlautsLong(a).toLowerCase(), qx.util.Normalization.umlautsLong(b).toLowerCase()); +}; + + +/** + * Compare two Float numbers. + * + * @param a {Float} first value + * @param b {Float} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byFloat = function(a, b) { + return a - b; +}; + +qx.util.Compare.byInteger = qx.util.Compare.byNumber = qx.util.Compare.byFloat; + + +/** + * Compare two Strings representing integers. First convert the strings to an interger. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byIntegerString = function(a, b) { + return parseInt(a) - parseInt(b); +}; + + +/** + * Compare two Strings representing floats. First convert the strings to an float. + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byFloatString = function(a, b) { + return parseFloat(a) - parseFloat(b); +}; + +qx.util.Compare.byNumberString = qx.util.Compare.byFloatString; + + +/** + * Compare two Strings representing IPv4 adresses. + * Example: "192.168.1.2" + * + * @param a {String} first value + * @param b {String} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byIPv4 = function(a, b) +{ + var ipa = a.split(".", 4); + var ipb = b.split(".", 4); + + for (var i=0; i<3; i++) + { + a = parseInt(ipa[i]); + b = parseInt(ipb[i]); + + if (a != b) { + return a - b; + } + } + + return parseInt(ipa[3]) - parseInt(ipb[3]); +}; + + +/** + * Compare the zIndex property of two widgets. + * + * @param a {qx.ui.core.Widget} first value + * @param b {qx.ui.core.Widget} second value + * + * @return {Number} + * 0 if both values are equal + * a number > 0 if the first value if greater than the second one + * a value < 0 otherwise + */ +qx.util.Compare.byZIndex = function(a, b) { + return a.getZIndex() - b.getZIndex(); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/GuiBuilder.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/GuiBuilder.js new file mode 100644 index 0000000000..59225f981b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/GuiBuilder.js @@ -0,0 +1,492 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * A class to generate a widget hierarchy from XML. + * + * WARNING: This class may not be up-to-date or fully functional since it + * it is not actively maintained. However, there are other + * (server-side) solutions for handling XML GUI descriptions. + * Please see the qooxdoo homepage for related projects or ask on + * the mailing list. + * + * @param flags {Map} map of flags. "flags.strict" sets strict mode. + */ +qx.OO.defineClass("qx.util.GuiBuilder", qx.core.Target, +function(flags) +{ + qx.core.Target.call(this); + + // map<className, map<propertyName, function>> + this._propertyEditors = {}; + + this._registerDefaultPropertyEditors(); + + this._flags = flags || {}; + + // ensure the default flags are setup + if (this._flags.strict == null) { + // strick mode throws exceptions when + // * widget setters don't exist + this._flags.strict = true; + } + +}); + +/* +------------------------------------------------------------------------------------ + BUILD +------------------------------------------------------------------------------------ +*/ + +/** + * Asynchronous method - fetches XML data from the URL then delegates to build to process the xml + * Dispatches a qx.event.type.Event("done") after the hierarchy is built + * + * @param parent {qx.ui.core.Widget} can either be the application instance, or a widget to append the xml toplevel widgets to + * @param url {String} URL of the XML files + * + */ +qx.Proto.buildFromUrl = function(parent, url) { + var req = new qx.io.remote.Request(url, "GET", qx.util.Mime.XML); + var self = this; + req.addEventListener("completed", function(e) { + self.build(parent, e.getData().getContent()); + qx.ui.core.Widget.flushGlobalQueues(); + }); + req.send(); +} + +/** + * parse the children of the xml and appending all widgets to the parent widget + * + * @param parent {qx.ui.core.Widget} can either be the application instance, or a widget to append the xml toplevel widgets to + * @param node {String|Document|Element} can be either a xml string, or a xml dom document or fragment + */ +qx.Proto.build = function(parent, node) { + // support embedding of an XML string within a textarea + if (typeof node == "object" && node.nodeName == 'TEXTAREA') { + node = node.value; + } + + // parse strings in to XML DOM + if (typeof node == "string") { + node = qx.xml.Document.fromString(node); + // TODO handle parse errors + } + this._buildNodes(parent, node.childNodes); +} + +qx.Proto._buildNodes = function(parent, nodes) { + var x = 0; + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + // 1 = ELEMENT_NODE + if (n.nodeType == 1) { + this._buildWidgetFromNode(parent, n); + } + } +} + +qx.Proto._buildEventListener = function(widget, args, text) { + if (typeof args.type !== "string") { + throw this._newError('eventListener requires a string type attribute'); + } + + var self = this; + + // are we delegating ? + if (typeof args.delegate === "string") { + + if (args.delegate.indexOf('.') > -1) { + // delegation to a global method + var p = args.delegate.split('.'); + var o = p[0]; + var m = p[1]; + widget.addEventListener(args.type, function(e) { + + if (!window[o]) { + throw self._newError('delegate not found', {delegate:args.delegate}); + } + + if (!window[o][m]) { + throw self._newError('delegate not found', {delegate:args.delegate}); + } + + window[o][m].apply(window[o], [e]); + }); + } + else { + + // delegation to a global method + widget.addEventListener(args.type, function(e) { + + if (!window[args.delegate]) { + throw self._newError('delegate not found', {delegate:args.delegate}); + } + + window[args.delegate].apply(null, [e]); + }); + } + } + else { + + // build a function object using text as the function body + // + // the args attribute indicates the name of the event argument + // if not provided - use 'event' as the name + if (!args.args) { + args.args = "event"; + } + + var f = new Function(args.args, text); + widget.addEventListener(args.type, f); + } +} + + +/** + * A node builder that will be used if no node builder is declared for a nodeName + * + * @param parent {qx.ui.core.Widget} can either be the application instance, or a widget to append the xml toplevel widgets to + * @param node {String|Document|Element} can be either a xml string, or a xml dom document or fragment + */ + +qx.Proto._buildWidgetFromNode = function(parent, node) { + + var className = this._extractClassName(node); + + if (!className) { + throw this._newError("unrecognised node", {nodeName:node.nodeName}); + } + + if (className == "qx.client.builder.Container") { + // generic container node to allow xml to contain multiple toplevel nodes + this._buildNodes(parent, node.childNodes); + return; + } + + if (className == "qx.client.builder.Script") { + var e = document.createElement("script"); + var attribs = this._mapXmlAttribToObject(node); + if (attribs.type) { + e.type = attribs.type; + } + else { + e.type='text/javascript'; + } + + // e.innerHTML = node.firstChild.nodeValue; + + // fix for Internet Explorer by Cristian Bica + if (qx.core.Client.getInstance().isMshtml()) + { + e.innerHTML = eval(node.firstChild.nodeValue); + } + else + { + e.innerHTML = node.firstChild.nodeValue; + } + + document.body.appendChild(e); + return; + } + + if (className == "qx.client.builder.EventListener") { + var attribs = this._mapXmlAttribToObject(node); + var text; + if (node.firstChild) { + text = node.firstChild.nodeValue; + } + this._buildEventListener(parent, attribs, text); + return; + } + + + var classConstructor = qx.OO.classes[className]; + if (!classConstructor) { + throw this._newError("constructor not found", {className:className}); + } + + // construct the widget instance - using the default constructor + var widget = new classConstructor(); + var attribs = this._mapXmlAttribToObject(node, widget); + delete attribs['qxtype']; + + var dummyWidget = attribs.id && attribs.id.indexOf("_") == 0; + + if (attribs.id) { + // register a global refrence for this widget + window[attribs.id] = widget; + delete attribs.id; + } + + // convert any on?? attribs into event listeners + for (var a in attribs) { + + if (a.toLowerCase().indexOf('on') == 0 && a.length > 2) { + + // there may be issues here for XHTML based attributes - due to their case + var type = a.substring(2); + type = type.charAt(0) + type.substring(1); + + this._buildEventListener(widget, {type:type,args:'event'}, attribs[a]); + + delete attribs[a]; + } + } + + for (var n in attribs) { + this._setWidgetProperty(widget, n, attribs[n]); + } + + if(!dummyWidget) { + parent.add(widget); + } + + // recurse to all of the nodes children, using the newly created widget as the parent + this._buildNodes(widget, node.childNodes); +} + +/* +------------------------------------------------------------------------------------ + WIDGET PROPERTIES +------------------------------------------------------------------------------------ +*/ + + +/*! + Set a widget's property using a propertyEditor +*/ +qx.Proto._setWidgetProperty = function(widget, name, value) { + var editor = this._findPropertyEditor(widget.classname, name); + if (!editor) { + editor = this._coercePropertyEditor; + } + editor.set(widget, name, value); +} + +qx.Proto._findPropertyEditor = function(className, propertyName) { + // get all defined propertyEditors for this widget's prototype + var m = this._propertyEditors[className]; + // lookup the converter for this property name + if (m && m[propertyName]) { + return m[propertyName]; + } + + // try the widget's superclass + var w = qx.OO.classes[className]; + if (w && w.superclass && w.superclass.prototype.classname) { + return this._findPropertyEditor(w.superclass.prototype.classname, propertyName); + } + + return null; +} + +qx.Proto.registerPropertyEditor = function(className, propertyName, editor) { + if (!this._propertyEditors[className]) this._propertyEditors[className] = {}; + this._propertyEditors[className][propertyName] = editor; +} + +qx.Proto._registerDefaultPropertyEditors = function() { + var self = this; + + // a property editor that splits the values on a comma and coerces each one into a suitable type + var commaDelimitedPropertyEditor = {}; + commaDelimitedPropertyEditor.set = function(widget, name, value) { + if (value == null || value == "") { + self._setProperty(widget, name, null); + return; + } + + var s = value.split(","); + var v = []; + for (var i = 0; i < s.length; i++) { + v[i] = self._coerce(s[i]); + } + + self._setProperties(widget, name, v); + } + + var evalPropertyEditor = {}; + evalPropertyEditor.set = function(widget, name, value) { + if (value == null || value == "") { + self._setProperty(widget, name, null); + return; + } + + self._setProperty(widget, name, eval(value)); + } + + var referencePropertyEditor = {}; + referencePropertyEditor.set = function(widget, name, value) { + self._setProperty(widget, name, window[value]); + } + + this.registerPropertyEditor('qx.ui.core.Widget', 'location', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'dimension', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'space', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'edge', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'padding', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'margin', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'heights', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'widths', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'align', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'stretch', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'clipLocation', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'clipDimension', commaDelimitedPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'clip', commaDelimitedPropertyEditor); + + this.registerPropertyEditor('qx.ui.core.Widget', 'backgroundColor', evalPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'color', evalPropertyEditor); + this.registerPropertyEditor('qx.ui.core.Widget', 'border', evalPropertyEditor); + + + this.registerPropertyEditor('qx.ui.menu.Button', 'menu', referencePropertyEditor); + this.registerPropertyEditor('qx.ui.form.RadioButton', 'manager', referencePropertyEditor); + this.registerPropertyEditor('qx.ui.menu.RadioButton', 'group', referencePropertyEditor); + + + // a property editor that just tries to coerce the string value into a suitable type + this._coercePropertyEditor = {}; + this._coercePropertyEditor.set = function(widget, name, value) { + self._setProperty(widget, name, self._coerce(value)); + } + +} + + +qx.Proto._coerce = function(value) { + + // don't really care if its null + if (value == null) return value; + + // is it alreay a javascript type + if (typeof value == 'object') return value; + if (typeof value == 'function') return value; + if (typeof value == 'number') return value; + if (typeof value == 'boolean') return value; + if (typeof value == 'date') return value; + if (typeof value == 'array') return value; + + // is it a number ? + var n = new Number(value); + if (!isNaN(n)) return n.valueOf(); + + // is it a boolean ? + if (value == "true") return true; + if (value == "false") return false; + + // is it a date ? + var d = Date.parse(value); + if (d != null && !isNaN(d)) return d; + + // leave it as a string + if (typeof value == 'string') { + // convert empty string into null + if (value == "") return null; + } + + return value; +} + +qx.Proto._setProperty = function(widget, name, value) { + this._setProperties(widget, name, [value]); +} + +qx.Proto._setProperties = function(widget, name, value) { + + // TODO : find a cheaper way to find the setter + // NOTE : the name is LOWERCASE - hence we iterate all properties of the widget + // to try and find a matching one + var n = "set" + name; + for (var a in widget) { + if (n == a.toLowerCase()) { + var setter = widget[a]; + break; + } + } + if (!setter && this._flags.strict) throw this._newError('no setter defined on widget instance', {widget:widget, property:name}); + setter.apply(widget, value); +} + + +/* +------------------------------------------------------------------------------------ + UTILS +------------------------------------------------------------------------------------ +*/ + +/* +2 format +1. <qx.ui.basic.Atom/> +3. <div qxtype="qx.ui.basic.Atom"/> +*/ +qx.Proto._extractClassName = function(node) { + if (node.nodeName.toLowerCase() == "div") { + if (!node.attributes['qxtype']) + return null; + return node.attributes['qxtype'].value; + } else { + return node.nodeName; + } +} + +qx.Proto._mapXmlAttribToObject = function(node) { + var r = {}; + var c = node.attributes; + for (var i=0; i<c.length; i++) { + r[c[i].name.toLowerCase()] = c[i].value; + } + return r; +} + +/* +------------------------------------------------------------------------------------ + EXCEPTION HANDLING / DEBUGGING +------------------------------------------------------------------------------------ +*/ + +qx.Proto._newError = function(message, data, exception) { + var m = message; + var joiner = ""; + var d = ""; + if (data) { + for (var p in data) { + d += joiner + p + "=" + data[p] + ''; + joiner = " "; + } + m += " " + d + " "; + } + if (exception) { + m+= " error: " + exception + " "; + } + return new Error(m); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Mime.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Mime.js new file mode 100644 index 0000000000..abb6741d87 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Mime.js @@ -0,0 +1,40 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Mime type constants + */ +qx.OO.defineClass("qx.util.Mime", +{ + JAVASCRIPT: "text/javascript", + + /** this has been changed from text/json to application/json */ + JSON: "application/json", + + XML: "application/xml", + TEXT: "text/plain", + HTML: "text/html" +}); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Normalization.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Normalization.js new file mode 100644 index 0000000000..c246dfda65 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Normalization.js @@ -0,0 +1,89 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +qx.OO.defineClass("qx.util.Normalization"); + + + + + +/* +--------------------------------------------------------------------------- + HANDLING OF UMLAUTS +--------------------------------------------------------------------------- +*/ + +qx.util.Normalization._umlautsRegExp = /[\xE4\xF6\xFC\xDF\xC4\xD6\xDC]/g; + +qx.util.Normalization._umlautsShortData = { "\xC4": "A", "\xD6": "O", "\xDC": "U", "\xE4": "a", "\xF6": "o", "\xFC": "u", "\xDF": "s" }; + + +/** + * Private helper + * + * @param vChar {String} char to convert + * @return {String} + */ +qx.util.Normalization._umlautsShort = function(vChar) { + return qx.util.Normalization._umlautsShortData[vChar]; +}; + + +/** + * Converts (German) umlauts in the string to a one letter ASCI form. + * Example: Ä -> A, ü -> u, ß -> s, ... + * + * @param vString {String} string to normalize + * @return {String} normalized string + */ +qx.util.Normalization.umlautsShort = function(vString) { + return vString.replace(qx.util.Normalization._umlautsRegExp, qx.util.Normalization._umlautsShort); +}; + + +qx.util.Normalization._umlautsLongData = { "\xC4": "Ae", "\xD6": "Oe", "\xDC": "Ue", "\xE4": "ae", "\xF6": "oe", "\xFC": "ue", "\xDF": "ss" }; + + +/** + * Private helper + * + * @param vChar {String} char to convert + * @return {String} + */ +qx.util.Normalization._umlautsLong = function(vChar) { + return qx.util.Normalization._umlautsLongData[vChar]; +}; + + +/** + * Converts (German) umlauts in the string to a two letter ASCI form. + * Example: Ä -> Ae, ü -> ue, ß -> ss, ... + * + * @param vString {String} string to normalize + * @return {String} normalized string + */ +qx.util.Normalization.umlautsLong = function(vString) { + return vString.replace(qx.util.Normalization._umlautsRegExp, qx.util.Normalization._umlautsLong); +};
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/StringBuilder.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/StringBuilder.js new file mode 100644 index 0000000000..25e962a459 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/StringBuilder.js @@ -0,0 +1,148 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.core.Client) + +************************************************************************ */ + +/** + * A string builder class + * <p> + * += operator is faster in Firefox and Opera. + * Array push/join is faster in Internet Explorer + * </p><p> + * Even with this wrapper, which costs some time, this is + * faster in Firefox than the alternative Array concat in + * all browsers (which is in relation to IE's performance issues + * only marginal). The IE performance loss caused by this + * wrapper is not relevant. + * </p><p> + * So this class seems to be the best compromise to handle + * string concatenation.</p> + */ +qx.OO.defineClass("qx.util.StringBuilder", qx.core.Object, +function() +{ + qx.core.Object.call(this); + + this.init(); + this.add.apply(this, arguments); +}); + + +/** + * Resets the contents of the Stringbuilder + * equivalent to <pre>str = ""; </pre> + */ +qx.Proto.clear = function() {} + +/** + * Returns the contents of the concatenated string + * + * @return {String} string content + */ +qx.Proto.get = function() {} + +/** + * Append a variable number of string arguments + * + * @param varargs {String} variable number os strings to be added + */ +qx.Proto.add = function(varargs) {} + +/** + * Initializes the contents of the Stringbuilder + * equivalent to <pre>str = ""; </pre> + */ +qx.Proto.init = function() {} + +/** Destructor */ +qx.Proto.dispose = function() {} + +/** + * Returns the contents of the concatenated string + * + * @return {String} string content + */ +qx.Proto.toString = function() {} + + +if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Proto.clear = function() { + this._array = []; + } + + qx.Proto.get = function() { + return this._array.join(""); + } + + qx.Proto.add = function() { + this._array.push.apply(this._array, arguments); + } + + qx.Proto.init = function() { + this._array = []; + } + + qx.Proto.dispose = function() + { + if (this.getDisposed()) { + return; + } + + this._array = null; + + qx.core.Object.prototype.dispose.call(this); + } +} +else +{ + qx.Proto.clear = function() { + this._string = ""; + } + + qx.Proto.get = function() { + return this._string; + } + + qx.Proto.add = function() { + this._string += Array.prototype.join.call(arguments, ""); + } + + qx.Proto.init = function() { + this._string = ""; + } + + qx.Proto.dispose = function() + { + if (this.getDisposed()) { + return; + } + + this._string = null; + + qx.core.Object.prototype.dispose.call(this); + } +} + +qx.Proto.toString = qx.Proto.get; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Validation.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Validation.js new file mode 100644 index 0000000000..8dfb08ba33 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/Validation.js @@ -0,0 +1,363 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/** + * Collection of validation methods. + * + * All methods use the strict comparison operators as all modern + * browsers (needs support for JavaScript 1.3) support this. + * + * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Comparison_Operators + */ +qx.OO.defineClass("qx.util.Validation"); + +/** + * Whether a value is valid. Invalid values are: + * <ul> + * <li>undefined</li> + * <li>null</li> + * <li>"" (empty string)</li> + * <li>Nan (not a number)</li> + * <li>false</li> + * </ul> + * All other values are considered valid. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValid = function(v) +{ + switch(typeof v) + { + case "undefined": + return false; + + case "object": + return v !== null; + + case "string": + return v !== ""; + + case "number": + return !isNaN(v); + + case "function": + case "boolean": + return true; + } + + return false; +}; + + +/** + * Whether a value is invalid. Invalid values are: + * <ul> + * <li>undefined</li> + * <li>null</li> + * <li>"" (empty string)</li> + * <li>Nan (not a number)</li> + * <li>false</li> + * </ul> + * All other values are considered valid. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is invalid + */ +qx.util.Validation.isInvalid = function(v) +{ + switch(typeof v) + { + case "undefined": + return true; + + case "object": + return v === null; + + case "string": + return v === ""; + + case "number": + return isNaN(v); + + case "function": + case "boolean": + return false; + } + + return true; +}; + + +/** + * Whether a value is a valid number. Valid numbers are: + * <ul> + * <li>type is number</li> + * <li>not NaN</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidNumber = function(v) { + return typeof v === "number" && !isNaN(v); +}; + + +/** + * Whether a value is an invalid number. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidNumber = function(v) { + return typeof v !== "number" || isNaN(v); +}; + + +/** + * Whether a value is valid string. Valid strings are: + * <ul> + * <li>type is string</li> + * <li>not an empty string</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidString = function(v) { + return typeof v === "string" && v !== ""; +}; + + +/** + * Whether a value is an invalid string. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidString = function(v) { + return typeof v !== "string" || v === ""; +}; + + +/** + * Whether a value is a valid array. Valid arrays are: + * <ul> + * <li>type is object</li> + * <li>instance is Array</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidArray = function(v) { + return typeof v === "object" && v !== null && v instanceof Array; +}; + + +/** + * Whether a value is an invalid array. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidArray = function(v) { + return typeof v !== "object" || v === null || !(v instanceof Array); +}; + + +/** + * Whether a value is a valid object. Valid object are: + * <ul> + * <li>type is object</li> + * <li>instance != Array</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidObject = function(v) { + return typeof v === "object" && v !== null && !(v instanceof Array); +} + + +/** + * Whether a value is an invalid object. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidObject = function(v) { + return typeof v !== "object" || v === null || v instanceof Array; +}; + + +/** + * Whether a value is a valid DOM node. Valid nodes are: + * <ul> + * <li>type is object</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidNode = function(v) { + return typeof v === "object" && v !== null; +}; + + +/** + * Whether a value is an invalid node. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidNode = function(v) { + return typeof v !== "object" || v === null; +}; + + +/** + * Whether a value is valid DOM element number. Valid elements are: + * <ul> + * <li>type is object</li> + * <li>v.nodeType === 1</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidElement = function(v) { + return typeof v === "object" && v !== null || v.nodeType !== 1; +}; + + +/** + * Whether a value is not a DOM element. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidElement = function(v) { + return typeof v !== "object" || v === null || v.nodeType !== 1; +}; + + +/** + * Whether a value is a function. + * <ul> + * <li>type is function</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidFunction = function(v) { + return typeof v === "function"; +}; + + +/** + * Whether a value is not a function. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidFunction = function(v) { + return typeof v !== "function"; +}; + + +/** + * Whether a value is a boolean. Valid booleans are: + * <ul> + * <li>type is boolean</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidBoolean = function(v) { + return typeof v === "boolean"; +}; + + +/** + * Whether a value is not boolean. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidBoolean = function(v) { + return typeof v !== "boolean"; +}; + + +/** + * Whether a value is valid a non empty string or a valid number. Valid values are: + * <ul> + * <li>type is string or number</li> + * <li>values is not "" or NaN</li> + * </ul> + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isValidStringOrNumber = function(v) +{ + switch(typeof v) + { + case "string": + return v !== ""; + + case "number": + return !isNaN(v); + } + + return false; +}; + + +/** + * Whether a value not a valid string or number. + * + * @param v {var} the value to validate. + * @return {Boolean} whether the variable is valid + */ +qx.util.Validation.isInvalidStringOrNumber = function(v) +{ + switch(typeof v) + { + case "string": + return v === ""; + + case "number": + return isNaN(v); + } + + return false; +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/DateFormat.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/DateFormat.js new file mode 100644 index 0000000000..dd31073f7a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/DateFormat.js @@ -0,0 +1,604 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.locale.Date) + +************************************************************************ */ + +/** + * A formatter and parser for dates + * + * @param format {String} The format to use. If null, the + * {@link #DEFAULT_DATE_TIME_FORMAT} is used. + * @param locale {String} optional locale to be used + */ +qx.OO.defineClass("qx.util.format.DateFormat", qx.util.format.Format, +function(format, locale) { + qx.util.format.Format.call(this); + + if (format != null) { + this._format = format.toString() + } else { + this._format = qx.locale.Date.getDateFormat("long", locale) + " " + qx.locale.Date.getDateTimeFormat("HHmmss", "HH:mm:ss", locale); + } + this._locale = locale; +}); + + +/** + * Fills a number with leading zeros ("25" -> "0025"). + * + * @param number {Integer} the number to fill. + * @param minSize {Integer} the minimum size the returned string should have. + * @return {String} the filled number as string. + */ +qx.Proto._fillNumber = function(number, minSize) { + var str = "" + number; + while (str.length < minSize) { + str = "0" + str; + } + return str; +} + + +/** + * Returns the day in year of a date. + * + * @param date {Date} the date. + * @return {Integer} the day in year. + */ +qx.Proto._getDayInYear = function(date) { + var helpDate = new Date(date.getTime()); + var day = helpDate.getDate(); + while (helpDate.getMonth() != 0) { + // Set the date to the last day of the previous month + helpDate.setDate(-1); + day += helpDate.getDate() + 1; + } + return day; +} + + +/** + * Returns the thursday in the same week as the date. + * + * @param date {Date} the date to get the thursday of. + * @return {Date} the thursday in the same week as the date. + */ +qx.Proto._thursdayOfSameWeek = function(date) { + return new Date(date.getTime() + (3 - ((date.getDay() + 6) % 7)) * 86400000); +} + + +/** + * Returns the week in year of a date. + * + * @param date {Date} the date to get the week in year of. + * @return {Integer} the week in year. + */ +qx.Proto._getWeekInYear = function(date) { + // This algorithm gets the correct calendar week after ISO 8601. + // This standard is used in almost all european countries. + // TODO: In the US week in year is calculated different! + // See http://www.merlyn.demon.co.uk/weekinfo.htm + + // The following algorithm comes from http://www.salesianer.de/util/kalwoch.html + + // Get the thursday of the week the date belongs to + var thursdayDate = this._thursdayOfSameWeek(date); + // Get the year the thursday (and therefor the week) belongs to + var weekYear = thursdayDate.getFullYear(); + // Get the thursday of the week january 4th belongs to + // (which defines week 1 of a year) + var thursdayWeek1 = this._thursdayOfSameWeek(new Date(weekYear, 0, 4)); + // Calculate the calendar week + return Math.floor(1.5 + (thursdayDate.getTime() - thursdayWeek1.getTime()) / 86400000 / 7) +} + + +/** + * Formats a date. + * <p> + * Uses the same syntax as + * <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html" target="_blank"> + * the SimpleDateFormat class in Java</a>. + * + * @param date {Date} The date to format. + * @return {String} the formatted date. + */ +qx.Proto.format = function(date) { + var DateFormat = qx.util.format.DateFormat; + var locale = this._locale; + + var fullYear = date.getFullYear(); + var month = date.getMonth(); + var dayOfMonth = date.getDate(); + var dayOfWeek = date.getDay(); + var hours = date.getHours(); + var minutes = date.getMinutes(); + var seconds = date.getSeconds(); + var ms = date.getMilliseconds(); + var timezone = date.getTimezoneOffset() / 60; + + // Create the output + this._initFormatTree(); + var output = ""; + for (var i = 0; i < this._formatTree.length; i++) { + var currAtom = this._formatTree[i]; + + if (currAtom.type == "literal") { + output += currAtom.text; + } else { + // This is a wildcard + var wildcardChar = currAtom.character; + var wildcardSize = currAtom.size; + + // Get its replacement + var replacement = "?"; + switch (wildcardChar) { + // TODO: G - Era designator (e.g. AD). Problem: Not covered by JScript Date class + // TODO: W - Week in month (e.g. 2) + // TODO: F - Day of week in month (e.g. 2). Problem: What is this? + + case 'y': // Year + if (wildcardSize == 2) { + replacement = this._fillNumber(fullYear % 100, 2); + } else if (wildcardSize == 4) { + replacement = fullYear; + } + break; + case 'D': // Day in year (e.g. 189) + replacement = this._fillNumber(this._getDayInYear(date), wildcardSize); break; + case 'd': // Day in month + replacement = this._fillNumber(dayOfMonth, wildcardSize); break; + case 'w': // Week in year (e.g. 27) + replacement = this._fillNumber(this._getWeekInYear(date), wildcardSize); break; + case 'E': // Day in week + if (wildcardSize == 2) { + replacement = qx.locale.Date.getDayName("narrow", dayOfWeek, locale); + } else if (wildcardSize == 3) { + replacement = qx.locale.Date.getDayName("abbreviated", dayOfWeek, locale); + } else if (wildcardSize == 4) { + replacement = qx.locale.Date.getDayName("wide", dayOfWeek, locale); + } + break; + case 'M': // Month + if (wildcardSize == 1 || wildcardSize == 2) { + replacement = this._fillNumber(month + 1, wildcardSize); + } else if (wildcardSize == 3) { + replacement = qx.locale.Date.getMonthName("abbreviated",month, locale); + } else if (wildcardSize == 4) { + replacement = qx.locale.Date.getMonthName("wide", month, locale); + } + break; + case 'a': // am/pm marker + // NOTE: 0:00 is am, 12:00 is pm + replacement = (hours < 12) ? qx.locale.Date.getAmMarker(locale) : qx.locale.Date.getPmMarker(locale); break; + case 'H': // Hour in day (0-23) + replacement = this._fillNumber(hours, wildcardSize); break; + case 'k': // Hour in day (1-24) + replacement = this._fillNumber((hours == 0) ? 24 : hours, wildcardSize); break; + case 'K': // Hour in am/pm (0-11) + replacement = this._fillNumber(hours % 12, wildcardSize); break; + case 'h': // Hour in am/pm (1-12) + replacement = this._fillNumber(((hours % 12) == 0) ? 12 : (hours % 12), wildcardSize); break; + case 'm': // Minute in hour + replacement = this._fillNumber(minutes, wildcardSize); break; + case 's': // Second in minute + replacement = this._fillNumber(seconds, wildcardSize); break; + case 'S': // Millisecond + replacement = this._fillNumber(ms, wildcardSize); break; + case 'z': // Time zone + if (wildcardSize == 1) { + replacement = "GMT" + ((timezone < 0) ? "-" : "+") + this._fillNumber(timezone) + ":00"; + } else if (wildcardSize == 2) { + replacement = DateFormat.MEDIUM_TIMEZONE_NAMES[timezone]; + } else if (wildcardSize == 3) { + replacement = DateFormat.FULL_TIMEZONE_NAMES[timezone]; + } + break; + case 'Z': // RFC 822 time zone + replacement = ((timezone < 0) ? "-" : "+") + this._fillNumber(timezone, 2) + "00"; + } + output += replacement; + } + } + + return output; +} + + +/** + * Parses a date. + * <p> + * Uses the same syntax as + * <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html" target="_blank"> + * the SimpleDateFormat class in Java</a>. + * + * @param dateStr {String} the date to parse. + * @return {Date} the parsed date. + * @throws If the format is not well formed or if the date string does not + * match to the format. + */ +qx.Proto.parse = function(dateStr) { + this._initParseFeed(); + + // Apply the regex + var hit = this._parseFeed.regex.exec(dateStr); + if (hit == null) { + throw new Error("Date string '" + dateStr + "' does not match the date format: " + this._format); + } + + // Apply the rules + var dateValues = { year:1970, month:0, day:1, hour:0, ispm:false, min:0, sec:0, ms:0 } + var currGroup = 1; + for (var i = 0; i < this._parseFeed.usedRules.length; i++) { + var rule = this._parseFeed.usedRules[i]; + + var value = hit[currGroup]; + if (rule.field != null) { + dateValues[rule.field] = parseInt(value, 10); + } else { + rule.manipulator(dateValues, value); + } + + currGroup += (rule.groups == null) ? 1 : rule.groups; + } + + var date = new Date(dateValues.year, dateValues.month, dateValues.day, + (dateValues.ispm) ? (dateValues.hour + 12) : dateValues.hour, + dateValues.min, dateValues.sec, dateValues.ms); + if (dateValues.month != date.getMonth() || dateValues.year != date.getFullYear()) { + // TODO: check if this is also necessary for the time components + throw new Error("Error parsing date '" + dateStr + "': the value for day or month is too large"); + } + + return date; +} + + + +/** + * Helper method for {@link #format()} and {@link #parse()}. + * Parses the date format. + */ +qx.Proto._initFormatTree = function() { + if (this._formatTree != null) { + return; + } + + this._formatTree = []; + + var currWildcardChar; + var currWildcardSize = 0; + var currLiteral = ""; + var format = this._format; + + var state = "default" + + var i = 0; + while (i < format.length) { + var currChar = format.charAt(i); + + switch (state) { + case "quoted_literal": + // We are now inside a quoted literal + // Check whether the current character is an escaped "'" character + if (currChar == "'") { + if (i+1 >= format.length) { + // this is the last character + i++; + break; + } + var lookAhead = format.charAt(i+1); + if (lookAhead == "'") { + currLiteral += currChar; + i++; + } else { + // quoted literal ends + i++; + state = "unkown"; + } + } else { + currLiteral += currChar; + i++; + } + break; + case "wildcard": + // Check whether the currChar belongs to that wildcard + if (currChar == currWildcardChar) { + // It does -> Raise the size + currWildcardSize++; + i++; + } else { + // It does not -> The current wildcard is done + this._formatTree.push({ type:"wildcard", character:currWildcardChar, size:currWildcardSize }); + currWildcardChar = null; + currWildcardSize = 0; + state = "default"; + } + break; + default: + // We are not (any more) in a wildcard or quoted literal -> Check what's starting here + if ((currChar >= 'a' && currChar <= 'z') || (currChar >= 'A' && currChar <= 'Z')) { + // This is a letter -> All letters are wildcards + // Start a new wildcard + currWildcardChar = currChar; + state = "wildcard"; + } else if (currChar == "'") { + if (i+1 >= format.length) { + // this is the last character + currLiteral += currChar; + i++; + break; + } + var lookAhead = format.charAt(i+1); + if (lookAhead == "'") { + currLiteral += currChar; + i++; + } + i++; + state = "quoted_literal"; + } else { + state = "default" + } + if (state != "default") { + // Add the literal + if (currLiteral.length > 0) { + this._formatTree.push({ type:"literal", text:currLiteral }); + currLiteral = ""; + } + } else { + // This is an unquoted literal -> Add it to the current literal + currLiteral += currChar; + i++; + } + break; + } + } + + // Add the last wildcard or literal + if (currWildcardChar != null) { + this._formatTree.push({ type:"wildcard", character:currWildcardChar, size:currWildcardSize }); + } else if (currLiteral.length > 0) { + this._formatTree.push({ type:"literal", text:currLiteral }); + } +} + + +/** + * Initializes the parse feed. + * <p> + * The parse contains everything needed for parsing: The regular expression + * (in compiled and uncompiled form) and the used rules. + * + * @return {Map} the parse feed. + */ +qx.Proto._initParseFeed = function() { + if (this._parseFeed != null) { + // We already have the farse feed + return; + } + + var DateFormat = qx.util.format.DateFormat; + var format = this._format; + + // Initialize the rules + this._initParseRules(); + this._initFormatTree(); + + // Get the used rules and construct the regex pattern + var usedRules = []; + var pattern = "^"; + for (var atomIdx = 0; atomIdx < this._formatTree.length; atomIdx++) { + var currAtom = this._formatTree[atomIdx]; + + if (currAtom.type == "literal") { + pattern += qx.lang.String.escapeRegexpChars(currAtom.text); + } else { + // This is a wildcard + var wildcardChar = currAtom.character; + var wildcardSize = currAtom.size; + + // Get the rule for this wildcard + var wildcardRule; + for (var ruleIdx = 0; ruleIdx < DateFormat._parseRules.length; ruleIdx++) { + var rule = DateFormat._parseRules[ruleIdx]; + if (wildcardChar == rule.pattern.charAt(0) && wildcardSize == rule.pattern.length) { + // We found the right rule for the wildcard + wildcardRule = rule; + break; + } + } + + // Check the rule + if (wildcardRule == null) { + // We have no rule for that wildcard -> Malformed date format + var wildcardStr = ""; + for (var i = 0; i < wildcardSize; i++) { + wildcardStr += wildcardChar; + } + throw new Error("Malformed date format: " + format + ". Wildcard " + + wildcardStr + " is not supported"); + } else { + // Add the rule to the pattern + usedRules.push(wildcardRule); + pattern += wildcardRule.regex; + } + } + } + pattern += "$"; + + // Create the regex + var regex; + try { + regex = new RegExp(pattern); + } + catch (exc) { + throw new Error("Malformed date format: " + format); + } + + // Create the this._parseFeed + this._parseFeed = { regex:regex, "usedRules":usedRules, pattern:pattern } +} + + +/** + * Initializes the static parse rules. + */ +qx.Proto._initParseRules = function() { + var DateFormat = qx.util.format.DateFormat; + + if (DateFormat._parseRules != null) { + // The parse rules are already initialized + return; + } + + DateFormat._parseRules = []; + + var yearManipulator = function(dateValues, value) { + value = parseInt(value, 10); + if (value < DateFormat.ASSUME_YEAR_2000_THRESHOLD) { + value += 2000; + } else if (value < 100) { + value += 1900; + } + + dateValues.year = value; + } + + var monthManipulator = function(dateValues, value) { + dateValues.month = parseInt(value, 10) - 1; + } + + var ampmManipulator = function(dateValues, value) { + dateValues.ispm = (value == DateFormat.PM_MARKER); + } + + var noZeroHourManipulator = function(dateValues, value) { + dateValues.hour = parseInt(value, 10) % 24; + } + + var noZeroAmPmHourManipulator = function(dateValues, value) { + dateValues.hour = parseInt(value, 10) % 12; + } + + // Unsupported: w (Week in year), W (Week in month), D (Day in year), + // F (Day of week in month), z (time zone) reason: no setter in Date class, + // Z (RFC 822 time zone) reason: no setter in Date class + + DateFormat._parseRules.push({ pattern:"yyyy", regex:"(\\d\\d(\\d\\d)?)", + groups:2, manipulator:yearManipulator } ); + DateFormat._parseRules.push({ pattern:"yy", regex:"(\\d\\d)", manipulator:yearManipulator } ); + // TODO: "MMMM", "MMM" (Month names) + DateFormat._parseRules.push({ pattern:"M", regex:"(\\d\\d?)", manipulator:monthManipulator }); + DateFormat._parseRules.push({ pattern:"MM", regex:"(\\d\\d?)", manipulator:monthManipulator }); + DateFormat._parseRules.push({ pattern:"dd", regex:"(\\d\\d?)", field:"day" }); + DateFormat._parseRules.push({ pattern:"d", regex:"(\\d\\d?)", field:"day" }); + // TODO: "EEEE", "EEE", "EE" (Day in week names) + DateFormat._parseRules.push({ pattern:"a", + regex:"(" + DateFormat.AM_MARKER + "|" + DateFormat.PM_MARKER + ")", + manipulator:ampmManipulator }); + DateFormat._parseRules.push({ pattern:"HH", regex:"(\\d\\d?)", field:"hour" }); + DateFormat._parseRules.push({ pattern:"H", regex:"(\\d\\d?)", field:"hour" }); + DateFormat._parseRules.push({ pattern:"kk", regex:"(\\d\\d?)", manipulator:noZeroHourManipulator }); + DateFormat._parseRules.push({ pattern:"k", regex:"(\\d\\d?)", manipulator:noZeroHourManipulator }); + DateFormat._parseRules.push({ pattern:"KK", regex:"(\\d\\d?)", field:"hour" }); + DateFormat._parseRules.push({ pattern:"K", regex:"(\\d\\d?)", field:"hour" }); + DateFormat._parseRules.push({ pattern:"hh", regex:"(\\d\\d?)", manipulator:noZeroAmPmHourManipulator }); + DateFormat._parseRules.push({ pattern:"h", regex:"(\\d\\d?)", manipulator:noZeroAmPmHourManipulator }); + DateFormat._parseRules.push({ pattern:"mm", regex:"(\\d\\d?)", field:"min" }); + DateFormat._parseRules.push({ pattern:"m", regex:"(\\d\\d?)", field:"min" }); + DateFormat._parseRules.push({ pattern:"ss", regex:"(\\d\\d?)", field:"sec" }); + DateFormat._parseRules.push({ pattern:"s", regex:"(\\d\\d?)", field:"sec" }); + DateFormat._parseRules.push({ pattern:"SSS", regex:"(\\d\\d?\\d?)", field:"ms" }); + DateFormat._parseRules.push({ pattern:"SS", regex:"(\\d\\d?\\d?)", field:"ms" }); + DateFormat._parseRules.push({ pattern:"S", regex:"(\\d\\d?\\d?)", field:"ms" }); +} + + +/** + * Returns a <code>DateFomat</code> instance that uses the + * {@link #DEFAULT_DATE_TIME_FORMAT}. + * + * @return {String} the date/time instance. + */ +qx.Class.getDateTimeInstance = function() { + var DateFormat = qx.util.format.DateFormat; + + var format = qx.locale.Date.getDateFormat("long") + " " + qx.locale.Date.getDateTimeFormat("HHmmss", "HH:mm:ss"); + if ( + DateFormat._dateInstance == null || + DateFormat._format != format + ) { + DateFormat._dateTimeInstance = new DateFormat(); + } + return DateFormat._dateTimeInstance; +} + + +/** + * Returns a <code>DateFomat</code> instance that uses the + * {@link #DEFAULT_DATE_FORMAT}. + * + * @return {String} the date instance. + */ +qx.Class.getDateInstance = function() { + var DateFormat = qx.util.format.DateFormat; + + var format = qx.locale.Date.getDateFormat("short") + ""; + if ( + DateFormat._dateInstance == null || + DateFormat._format != format + ) { + DateFormat._dateInstance = new DateFormat(format); + } + return DateFormat._dateInstance; +} + + +/** + * (int) The threshold until when a year should be assumed to belong to the + * 21st century (e.g. 12 -> 2012). Years over this threshold but below 100 will be + * assumed to belong to the 20th century (e.g. 88 -> 1988). Years over 100 will be + * used unchanged (e.g. 1792 -> 1792). + */ +qx.Class.ASSUME_YEAR_2000_THRESHOLD = 30; + +/** {string} The date format used for logging. */ +qx.Class.LOGGING_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + +/** {string} The am marker. */ +qx.Class.AM_MARKER = "am" + +/** {string} The pm marker. */ +qx.Class.PM_MARKER = "pm"; + +/** {string[]} The medium (three letter) timezone names. */ +qx.Class.MEDIUM_TIMEZONE_NAMES = [ + "GMT" // TODO: fill up +]; + +/** {string[]} The full timezone names. */ +qx.Class.FULL_TIMEZONE_NAMES = [ + "Greenwich Mean Time" // TODO: fill up +];
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/Format.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/Format.js new file mode 100644 index 0000000000..5667491432 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/Format.js @@ -0,0 +1,53 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * Superclass for formatters and parsers. + */ +qx.OO.defineClass("qx.util.format.Format", qx.core.Object, +function() { + qx.core.Object.call(this); +}); + + +/** + * Formats an object. + * + * @param obj {var} The object to format. + * @return {String} the formatted object. + */ +qx.Proto.format = function(obj) { + throw new Error("format is abstract"); +} + + +/** + * Parses an object. + * + * @param str {String} the string to parse. + * @return {var} the parsed object. + */ +qx.Proto.parse = function(str) { + throw new Error("parse is abstract"); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/NumberFormat.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/NumberFormat.js new file mode 100644 index 0000000000..0417e8784f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/format/NumberFormat.js @@ -0,0 +1,215 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006 STZ-IDA, Germany, http://www.stz-ida.de + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Til Schneider (til132) + +************************************************************************ */ + +/* ************************************************************************ + +* #require(qx.locale.Number) + +************************************************************************ */ + +/** + * A formatter and parser for numbers. + * + * @param locale {String} optional locale to be used + */ +qx.OO.defineClass("qx.util.format.NumberFormat", qx.util.format.Format, +function(locale) { + qx.util.format.Format.call(this); + this._locale = locale; +}); + + +/** + * The minimum number of integer digits (digits before the decimal separator). + * Missing digits will be filled up with 0 ("19" -> "0019"). + */ +qx.OO.addProperty({ name:"minimumIntegerDigits", type:"number", defaultValue:0, allowNull:false }); + +/** + * The maximum number of integer digits (superfluos digits will be cut off + * ("1923" -> "23"). + */ +qx.OO.addProperty({ name:"maximumIntegerDigits", type:"number", defaultValue:null }); + +/** + * The minimum number of fraction digits (digits after the decimal separator). + * Missing digits will be filled up with 0 ("1.5" -> "1.500") + */ +qx.OO.addProperty({ name:"minimumFractionDigits", type:"number", defaultValue:0, allowNull:false }); + +/** + * The maximum number of fraction digits (digits after the decimal separator). + * Superflous digits will cause rounding ("1.8277" -> "1.83") + */ +qx.OO.addProperty({ name:"maximumFractionDigits", type:"number", defaultValue:null }); + +/** Whether thousand groupings should be used {e.g. "1,432,234.65"}. */ +qx.OO.addProperty({ name:"groupingUsed", type:"boolean", defaultValue:true, allowNull:false }); + +/** The prefix to put before the number {"EUR " -> "EUR 12.31"}. */ +qx.OO.addProperty({ name:"prefix", type:"string", defaultValue:"", allowNull:false }); + +/** Sets the postfix to put after the number {" %" -> "56.13 %"}. */ +qx.OO.addProperty({ name:"postfix", type:"string", defaultValue:"", allowNull:false }); + + +/** + * Formats a number. + * + * @param num {number} the number to format. + * @return {String} the formatted number as a string. + */ +qx.Proto.format = function(num) { + var NumberFormat = qx.util.format.NumberFormat; + + var negative = (num < 0); + if (negative) { + num = -num; + } + if (this.getMaximumFractionDigits() != null) { + // Do the rounding + var mover = Math.pow(10, this.getMaximumFractionDigits()); + num = Math.round(num * mover) / mover; + } + + if (num != 0) { // Math.log(0) = -Infinity + var integerDigits = Math.max(parseInt(Math.log(num) / Math.LN10) + 1, 1); + } else { + integerDigits = 1; + } + + var numStr = "" + num; + + // Prepare the integer part + var integerStr = numStr.substring(0, integerDigits); + while (integerStr.length < this.getMinimumIntegerDigits()) { + integerStr = "0" + integerStr; + } + if (this.getMaximumIntegerDigits() != null && integerStr.length > this.getMaximumIntegerDigits()) { + // NOTE: We cut off even though we did rounding before, because there + // may be rounding errors ("12.24000000000001" -> "12.24") + integerStr = integerStr.substring(integerStr.length - this.getMaximumIntegerDigits()); + } + + // Prepare the fraction part + var fractionStr = numStr.substring(integerDigits + 1); + while (fractionStr.length < this.getMinimumFractionDigits()) { + fractionStr += "0"; + } + if (this.getMaximumFractionDigits() != null && fractionStr.length > this.getMaximumFractionDigits()) { + // We have already rounded -> Just cut off the rest + fractionStr = fractionStr.substring(0, this.getMaximumFractionDigits()); + } + + // Add the thousand groupings + if (this.getGroupingUsed()) { + var origIntegerStr = integerStr; + integerStr = ""; + var groupPos; + for (groupPos = origIntegerStr.length; groupPos > 3; groupPos -= 3) { + integerStr = "" + qx.locale.Number.getGroupSeparator(this._locale) + + origIntegerStr.substring(groupPos - 3, groupPos) + integerStr; + } + integerStr = origIntegerStr.substring(0, groupPos) + integerStr; + } + + // Workaround: prefix and postfix are null even their defaultValue is "" and + // allowNull is set to false?!? + var prefix = this.getPrefix() ? this.getPrefix() : ""; + var postfix = this.getPostfix() ? this.getPostfix() : ""; + + // Assemble the number + var str = prefix + (negative ? "-" : "") + integerStr; + if (fractionStr.length > 0) { + str += "" + qx.locale.Number.getDecimalSeparator(this._locale) + fractionStr; + } + str += postfix; + + return str; +}; + + +/** + * Parses a number. + * + * @param str {String} the string to parse. + * + * @return {Double} the number. + */ +qx.Proto.parse = function(str) { + var NumberFormat = qx.util.format.NumberFormat; + + // use the escaped separators for regexp + var groupSepEsc = qx.lang.String.escapeRegexpChars(qx.locale.Number.getGroupSeparator(this._locale)+""); + var decimalSepEsc = qx.lang.String.escapeRegexpChars(qx.locale.Number.getDecimalSeparator(this._locale)+""); + + var regex = new RegExp(qx.lang.String.escapeRegexpChars(this.getPrefix()) + + '(-)?([0-9' + groupSepEsc + ']+)' + + '(' + decimalSepEsc + '\\d+)?' + + qx.lang.String.escapeRegexpChars(this.getPostfix())); + + var hit = regex.exec(str); + if (hit == null) { + throw new Error("Number string '" + str + "' does not match the number format"); + } + + var negative = (hit[1] == "-"); + var integerStr = hit[2]; + var fractionStr = hit[3]; + + // Remove the thousand groupings + integerStr = integerStr.replace(new RegExp(groupSepEsc), ""); + + var asStr = (negative ? "-" : "") + integerStr; + if (fractionStr != null && fractionStr.length != 0) { + // Remove the leading decimal separator from the fractions string + fractionStr = fractionStr.replace(new RegExp(decimalSepEsc),""); + asStr += "." + fractionStr; + } + return parseFloat(asStr); +}; + + +/** + * Returns the default number format. + * + * @return {NumberFormat} the default number format. + */ +qx.Class.getInstance = function() { + var NumberFormat = qx.util.format.NumberFormat; + if (NumberFormat._instance == null) { + NumberFormat._instance = new NumberFormat(); + } + return NumberFormat._instance; +}; + + +/** + * Returns an integer number format. + * + * @return {NumberFormat} an integer number format. + */ +qx.Class.getIntegerInstance = function() { + var NumberFormat = qx.util.format.NumberFormat; + if (NumberFormat._integerInstance == null) { + NumberFormat._integerInstance = new NumberFormat(); + NumberFormat._integerInstance.setMaximumFractionDigits(0); + } + return NumberFormat._integerInstance; +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/FiniteStateMachine.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/FiniteStateMachine.js new file mode 100644 index 0000000000..d91ab45858 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/FiniteStateMachine.js @@ -0,0 +1,1402 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006, 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(util_fsm) + +************************************************************************ */ + +/** + * A finite state machine. + * + * See {@link qx.util.finitestatemacine.State} for details on creating States, + * and {@link qx.util.finitestatemacine.Transitions} for details on creating + * transitions between states. + * + * @param machineName {String} The name of this finite state machine + * + */ +qx.OO.defineClass("qx.util.fsm.FiniteStateMachine", qx.core.Target, +function(machineName) +{ + // Call our superclass' constructor + qx.core.Target.call(this); + + // Save the machine name + this.setName(machineName); + + // Initialize the states object + this._states = { }; + + // Initialize the saved-states stack + this._savedStates = [ ]; + + // Initialize the pending event queue + this._eventQueue = [ ]; + + // Initialize the blocked events queue + this._blockedEvents = [ ]; + + // Create the friendlyToObject" object. Each object has as its property + // name, the friendly name of the object; and as its property value, the + // object itself. + this._friendlyToObject = { }; + + // Create the "friendlyToHash" object. Each object has as its property + // name, the friendly name of the object; and as its property value, the + // hash code of the object. + this._friendlyToHash = { }; + + // Create the "hashToFriendly" object. Each object has as its property + // name, the hash code of the object; and as its property value, the + // friendly name of the object. + this._hashToFriendly = { }; + + // Friendly names can be added to groups, for easy manipulation of enabling + // and disabling groups of widgets. Track which friendly names are in which + // group. + this._groupToFriendly = { }; + + // We also need to be able to map back from friendly name to the groups it + // is in. + this._friendlyToGroups = { }; +}); + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * The name of this finite state machine (for debug messages) + */ +qx.OO.addProperty( + { + name : "name", + type : "string" + }); + +/** + * The current state of the finite state machine. + */ +qx.OO.addProperty( + { + name : "state", + type : "string" + }); + +/** + * The previous state of the finite state machine, i.e. the state from which + * we most recently transitioned. Note that this could be the same as the + * current state if a successful transition brought us back to the same + * state. + */ +qx.OO.addProperty( + { + name : "previousState", + type : "string" + }); + +/** + * The state to which we will be transitioning. This property is valid only + * during a Transition's ontransition function and a State's onexit function. + * At all other times, it is null. + */ +qx.OO.addProperty( + { + name : "nextState", + type : "string" + }); + + +/** + * The maximum number of states which may pushed onto the state-stack. It is + * generally a poor idea to have very many states saved on a stack. Following + * program logic becomes very difficult, and the code can be highly + * unmaintainable. The default should be more than adequate. You've been + * warned. + */ +qx.OO.addProperty( + { + name : "maxSavedStates", + type : "number", + defaultValue : 2 + }); + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + + +/** + * Add a state to the finite state machine. + * + * @param state {qx.util.fsm.State} + * An object of class qx.util.fsm.State representing a state + * which is to be a part of this finite state machine. + */ +qx.Proto.addState = function(state) +{ + // Ensure that we got valid state info + if (! state instanceof qx.util.fsm.State) + { + throw new Error("Invalid state: not an instance of " + + "qx.util.fsm.State"); + } + + // Retrieve the name of this state + var stateName = state.getName(); + + // Ensure that the state name doesn't already exist + if (stateName in this._states) + { + throw new Error("State " + state + " already exists"); + } + + // Add the new state object to the finite state machine + this._states[stateName] = state; +}; + + +/** + * Replace a state in the finite state machine. This is useful if initially + * "dummy" states are created which load the real state table for a series of + * operations (and possibly also load the gui associated with the new states + * at the same time). Having portions of the finite state machine and their + * associated gui pages loaded at run time can help prevent long delays at + * application start-up time. + * + * @param state {qx.util.fsm.State} + * An object of class qx.util.fsm.State representing a state + * which is to be a part of this finite state machine. + * + * @param bDispose {Boolean} + * If <i>true</i>, then dispose the old state object. If <i>false</i>, the + * old state object is returned for disposing by the caller. + * + * @return {Object} + * The old state object if it was not disposed; otherwise null. + */ +qx.Proto.replaceState = function(state, bDispose) +{ + // Ensure that we got valid state info + if (! state instanceof qx.util.fsm.State) + { + throw new Error("Invalid state: not an instance of " + + "qx.util.fsm.State"); + } + + // Retrieve the name of this state + var stateName = state.getName(); + + // Save the old state object, so we can return it to be disposed + var oldState = this._states[stateName]; + + // Replace the old state with the new state object. + this._states[stateName] = state; + + // Did they request that the old state be disposed? + if (bDispose) + { + // Yup. Mark it to be disposed. + oldState._needDispose; + } + + return oldState; +}; + + + +/** + * Add an object (typically a widget) that is to be accessed during state + * transitions, to the finite state machine. + * + * @param friendlyName {String} + * The friendly name to used for access to the object being added. + * + * @param obj {Object} + * The object to associate with the specified friendly name + * + * @param groupNames {Array} + * An optional list of group names of which this object is a member. + */ +qx.Proto.addObject = function(friendlyName, obj, groupNames) +{ + var hash = obj.toHashCode(); + this._friendlyToHash[friendlyName] = hash; + this._hashToFriendly[hash] = friendlyName; + this._friendlyToObject[friendlyName] = obj; + + // If no groupNames are specified, we're done. + if (! groupNames) + { + return; + } + + // Allow either a single group name or an array of group names. If the + // former, we convert it to the latter to make the subsequent code simpler. + if (typeof(groupNames) == "string") + { + groupNames = [ groupNames ]; + } + + // For each group that this friendly name is to be a member of... + for (var i = 0; i < groupNames.length; i++) + { + var groupName = groupNames[i]; + + // If the group name doesn't yet exist... + if (! this._groupToFriendly[groupName]) + { + // ... then create it. + this._groupToFriendly[groupName] = { }; + } + + // Add the friendly name to the list of names in this group + this._groupToFriendly[groupName][friendlyName] = true; + + // If the friendly name group mapping doesn't yet exist... + if (! this._friendlyToGroups[friendlyName]) + { + // ... then create it. + this._friendlyToGroups[friendlyName] = [ ]; + } + + // Append this group name to the list of groups this friendly name is in + this._friendlyToGroups[friendlyName] = + this._friendlyToGroups[friendlyName].concat(groupNames); + } +}; + + +/** + * Remove an object which had previously been added by {@link #addObject}. + * + * @param friendlyName {String} + * The friendly name associated with an object, specifying which object is + * to be removed. + */ +qx.Proto.removeObject = function(friendlyName) +{ + var hash = this._friendlyToHash[friendlyName]; + + // Delete references to any groupos this friendly name was in + if (this._friendlyToGroups[friendlyName]) + { + for (groupName in this._friendlyToGroups[friendlyName]) + { + delete this._groupToFriendly[groupName]; + } + + delete this._friendlyToGroups[friendlyName]; + } + + // Delete the friendly name + delete this._hashToFriendly[hash]; + delete this._friendlyToHash[friendlyName]; + delete this._friendlyToObject[friendlyName]; +}; + + +/** + * Retrieve an object previously saved via {@link #addObject}, using its + * Friendly Name. + * + * @param friendlyName {String} + * The friendly name of the object to be retrieved. + * + * @return {Object} + * The object which has the specified friendly name, or undefined if no + * object has been associated with that name. + */ +qx.Proto.getObject = function(friendlyName) +{ + return this._friendlyToObject[friendlyName]; +}; + + +/** + * Get the friendly name of an object. + * + * @param obj {Object} The object for which the friendly name is desired + * + * @return {String} + * If the object has been previously registered via {@link #addObject}, then + * the friendly name of the object is returned; otherwise, null. + */ +qx.Proto.getFriendlyName = function(obj) +{ + var hash = obj.toHashCode(); + return hash ? this._hashToFriendly[hash] : null; +}; + + +/** + * Retrieve the list of objects which have registered, via {@link addObject} as + * being members of the specified group. + * + * @param groupName {String} + * The name of the group for which the member list is desired. + * + * @return {Array} + * An array containing the friendly names of any objects which are members + * of the specified group. The resultant array may be empty. + */ +qx.Proto.getGroupObjects = function(groupName) +{ + var a = [ ]; + + for (var name in this._groupToFriendly[groupName]) + { + a.push(name); + } + + return a; +}; + + +/** + * Display all of the saved objects and their reverse mappings. + */ +qx.Proto.displayAllObjects = function() +{ + for (var friendlyName in this._friendlyToHash) + { + var hash = this._friendlyToHash[friendlyName]; + var obj = this.getObject(friendlyName); + this.debug(friendlyName + + " => " + + hash); + this.debug(" " + hash + + " => " + + this._hashToFriendly[hash]); + this.debug(" " + friendlyName + + " => " + + this.getObject(friendlyName)); + this.debug(" " + this.getObject(friendlyName) + + " => " + + this.getFriendlyName(obj)); + } +}; + + +/** + * Recursively display an object (as debug messages) + * + * @param obj {Object} + * The object to be recursively displayed + * @param initialMessage {String} + * The initial message to be displayed. + */ +qx.Proto.debugObject = function(obj, initialMessage) +{ + thisClass = this; + + var displayObj = function(obj, level) + { + var indentStr = ""; + for (var i = 0; i < level; i++) + { + indentStr += " "; + } + + if (typeof(obj) != "object") + { + thisClass.debug(indentStr, obj); + return; + } + + for (var prop in obj) + { + if (typeof(obj[prop]) == "object") + { + if (obj[prop] instanceof Array) + { + thisClass.debug(indentStr + prop + ": " + "Array"); + } + else + { + thisClass.debug(indentStr + prop + ": " + "Object"); + } + + displayObj(obj[prop], level + 1); + } + else + { + thisClass.debug(indentStr + prop + ": " + obj[prop]); + } + } + } + + if (initialMessage) + { + this.debug(initialMessage); + } + + displayObj(obj, 0); +}; + + + +/** + * Start (or restart, after it has terminated) the finite state machine from + * the starting state. The starting state is defined as the first state added + * to the finite state machine. + */ +qx.Proto.start = function() +{ + var stateName; + + // Set the start state to be the first state which was added to the machine + for (stateName in this._states) + { + this.setState(stateName); + this.setPreviousState(null); + this.setNextState(null); + break; + } + + if (! stateName) + { + throw new Error("Machine started with no available states"); + } + + var debugFunctions = + (qx.Settings.getValueOfClass("qx.util.fsm.FiniteStateMachine", + "debugFlags") & + qx.util.fsm.FiniteStateMachine.DebugFlags.FUNCTION_DETAIL); + + // Run the actionsBeforeOnentry actions for the initial state + if (debugFunctions) + { + this.debug(this.getName() + "#" + stateName + "#actionsBeforeOnentry"); + } + this._states[stateName].getAutoActionsBeforeOnentry()(this); + + // Run the entry function for the new state, if one is specified + if (debugFunctions) + { + this.debug(this.getName() + "#" + stateName + "#entry"); + } + this._states[stateName].getOnentry()(this, null); + + // Run the actionsAfterOnentry actions for the initial state + if (debugFunctions) + { + this.debug(this.getName() + "#" + stateName + "#actionsAfterOnentry"); + } + this._states[stateName].getAutoActionsAfterOnentry()(this); + +}; + + +/** + * Save the current or previous state on the saved-state stack. A future + * transition can then provide, as its nextState value, the class constant: + * + * qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK + * + * which will cause the next state to be whatever is at the top of the + * saved-state stack, and remove that top element from the saved-state stack. + * + * @param bCurrent {Boolean} + * When <i>true</i>, then push the current state onto the stack. This might + * be used in a transition, before the state has changed. When + * <i>false</i>, then push the previous state onto the stack. This might be + * used in an on entry function to save the previous state to return to. + */ +qx.Proto.pushState = function(bCurrent) +{ + // See if there's room on the state stack for a new state + if (this._savedStates.length >= this.getMaxSavedStates()) + { + // Nope. Programmer error. + throw new Error("Saved-state stack is full"); + } + + if (bCurrent) + { + // Push the current state onto the saved-state stack + this._savedStates.push(this.getState()); + } + else + { + // Push the previous state onto the saved-state stack + this._savedStates.push(this.getPreviousState()); + } +}; + + +/** + * Add the specified event to a list of events to be passed to the next state + * following state transition. + * + * @param event {qx.event.type.Event} + * The event to add to the event queue for processing after state change. + */ +qx.Proto.postponeEvent = function(event) +{ + // Add this event to the blocked event queue, so it will be passed to the + // next state upon transition. + this._blockedEvents.unshift(event); +}; + + +/** + * Copy an event + * + * @param event {qx.event.type.Event} + * The event to be copied + * + * @return {qx.event.type.Event} + * The new copy of the provided event + */ +qx.Proto.copyEvent = function(event) +{ + var e = { }; + for (var prop in event) + { + e[prop] = event[prop]; + } + + return e; +}; + + +/** + * Enqueue an event for processing + * + * @param event {qx.event.type.Event} + * The event to be enqueued + * + * @param bAddAtHead {Boolean} + * If <i>true</i>, put the event at the head of the queue for immediate + * processing. If <i>false</i>, place the event at the tail of the queue so + * that it receives in-order processing. + */ +qx.Proto.enqueueEvent = function(event, bAddAtHead) +{ + // Add the event to the event queue + if (bAddAtHead) + { + // Put event at the head of the queue + this._eventQueue.push(event); + } + else + { + // Put event at the tail of the queue + this._eventQueue.unshift(event); + } + + if (qx.Settings.getValueOfClass("qx.util.fsm.FiniteStateMachine", + "debugFlags") & + qx.util.fsm.FiniteStateMachine.DebugFlags.EVENTS) + { + if (bAddAtHead) + { + this.debug(this.getName() + ": Pushed event: " + event.getType()); + } + else + { + this.debug(this.getName() + ": Queued event: " + event.getType()); + } + } +}; + + +/** + * Event listener for all event types in the finite state machine + * + * @param event {qx.event.type.Event} + * The event that was dispatched. + */ +qx.Proto.eventListener = function(event) +{ + // Events are enqueued upon receipt. Some events are then processed + // immediately; other events get processed later. We need to allow the + // event dispatcher to free the source event upon our return, so we'll clone + // it and enqueue our clone. The source event can then be disposed upon our + // return. + var e = this.copyEvent(event); + + // Enqueue the new event on the tail of the queue + this.enqueueEvent(e, false); + + // Process events + this._processEvents(); +}; + + +/** + * Process all of the events on the event queue. + */ +qx.Proto._processEvents = function() +{ + // eventListener() can potentially be called while we're processing events + if (this._eventProcessingInProgress) + { + // We were processing already, so don't process concurrently. + return; + } + + // Track that we're processing events + this._eventProcessingInProgress = true; + + // Process each of the events on the event queue + while (this._eventQueue.length > 0) + { + // Pull the next event from the pending event queue + var event = this._eventQueue.pop(); + + // Run the finite state machine with this event + var bDispose = this._run(event); + + // If we didn't block (and re-queue) the event, dispose it. + if (bDispose) + { + event.dispose(); + } + } + + // We're no longer processing events + this._eventProcessingInProgress = false; +}; + +/** + * Run the finite state machine to process a single event. + * + * @param event {qx.event.type.Event} + * An event that has been dispatched. The event may be handled (if the + * current state handles this event type), queued (if the current state + * blocks this event type), or discarded (if the current state neither + * handles nor blocks this event type). + * + * @return {Boolean} + * Whether the event should be disposed. If it was blocked, we've pushed it + * back onto the event queue, and it should not be disposed. + */ +qx.Proto._run = function(event) +{ + // For use in generated functions... + var fsm = this; + + // State name variables + var thisState; + var nextState; + var prevState; + + // The current State object + var currentState; + + // The transitions available in the current State + var transitions; + + // Events handled by the current State + var e; + + // The action to take place upon receipt of a particular event + var action; + + // Get the debug flags + var debugFlags = + (qx.Settings.getValueOfClass("qx.util.fsm.FiniteStateMachine", + "debugFlags")); + + // Allow slightly faster access to determine if debug is enableda + var debugEvents = + debugFlags & qx.util.fsm.FiniteStateMachine.DebugFlags.EVENTS; + var debugTransitions = + debugFlags & qx.util.fsm.FiniteStateMachine.DebugFlags.TRANSITIONS; + var debugFunctions = + debugFlags & qx.util.fsm.FiniteStateMachine.DebugFlags.FUNCTION_DETAIL; + var debugObjectNotFound = + debugFlags & qx.util.fsm.FiniteStateMachine.DebugFlags.OBJECT_NOT_FOUND; + + if (debugEvents) + { + this.debug(this.getName() + ": Process event: " + event.getType()); + } + + // Get the current state name + thisState = this.getState(); + + // Get the current State object + currentState = this._states[thisState]; + + // Get a list of the transitions available from this state + transitions = currentState.transitions; + + // Determine how to handle this event + e = currentState.getEvents()[event.getType()]; + + // See if we actually found this event type + if (! e) + { + if (debugEvents) + { + this.debug(this.getName() + ": Event '" + event.getType() + "'" + + " not handled. Ignoring."); + } + return true; + } + + // We might have found a constant (PREDICATE or BLOCKED) or an object with + // each property name being the friendly name of a saved object, and the + // property value being one of the constants (PREDICATE or BLOCKED). + if (typeof(e) == "object") + { + // Individual objects are listed. Ensure target is a saved object + var friendly = this.getFriendlyName(event.getTarget()); + if (! friendly) + { + // Nope, it doesn't seem so. Just discard it. + if (debugObjectNotFound) + { + this.debug(this.getName() + ": Could not find friendly name for '" + + event.getType() + "' on '" + event.getTarget() + "'"); + } + return true; + } + + action = e[friendly]; + } + else + { + action = e; + } + + switch(action) + { + case qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE: + // Process this event. One of the transitions should handle it. + break; + + case qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED: + // This event is blocked. Enqueue it for later, and get outta here. + if (debugEvents) + { + this.debug(this.getName() + ": Event '" + event.getType() + "'" + + " blocked. Re-queuing."); + } + this._blockedEvents.unshift(event); + return false; + + default: + // See if we've been given an explicit transition name + if (typeof(action) == "string") + { + // Yup! Ensure that it exists + if (transitions[action]) + { + // Yup. Create a transitions object containing only this transition. + var trans = transitions[action]; + transitions = { }; + transitions[action] = trans; + } + else + { + throw new Error("Explicit transition " + action + " does not exist"); + } + + break; + } + } + + // We handle the event. Try each transition in turn until we find one that + // is acceptable. + for (var t in transitions) + { + var trans = transitions[t]; + + // Does the predicate allow use of this transition? + switch(trans.getPredicate()(this, event)) + { + case true: + // Transition is allowed. Proceed. + break; + + case false: + // Transition is not allowed. Try next transition. + continue; + + case null: + // Transition indicates not to try further transitions + return true; + + default: + throw new Error("Transition " + thisState + ":" + t + + " returned a value other than true, false, or null."); + } + + // We think we can transition to the next state. Set next state. + nextState = trans.getNextState(); + if (typeof(nextState) == "string") + { + // We found a literal state name. Ensure it exists. + if (! nextState in this._states) + { + throw new Error("Attempt to transition to nonexistent state " + + nextState); + } + + // It exists. Track it being the next state. + this.setNextState(nextState); + } + else + { + // If it's not a string, nextState must be a StateChange constant + switch(nextState) + { + case qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE: + // They want to remain in the same state. + nextState = thisState; + this.setNextState(nextState) + break; + + case qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK: + // Switch to the state at the top of the state stack. + if (this._savedStates.length == 0) + { + throw new Error("Attempt to transition to POP_STATE_STACK " + + "while state stack is empty."); + } + + // Pop the state stack to retrieve the state to transition to + nextState = this._savedStates.pop(); + this.setNextState(nextState); + break; + + default: + throw new Error("Internal error: invalid nextState"); + break; + } + } + + // Run the actionsBeforeOntransition actions for this transition + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + "#" + t + + "#autoActionsBeforeOntransition"); + } + trans.getAutoActionsBeforeOntransition()(this); + + // Run the 'ontransition' function + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + "#" + t + "#ontransition"); + } + trans.getOntransition()(this, event); + + // Run the autoActionsAfterOntransition actions for this transition + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + "#" + t + + "#autoActionsAfterOntransition"); + } + trans.getAutoActionsAfterOntransition()(this); + + // Run the autoActionsBeforeOnexit actions for the old state + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + + "#autoActionsBeforeOnexit"); + } + currentState.getAutoActionsBeforeOnexit()(this); + + // Run the exit function for the old state + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + "#exit"); + } + currentState.getOnexit()(this, event); + + // Run the autoActionsAfterOnexit actions for the old state + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + "#autoActionsAfterOnexit"); + } + currentState.getAutoActionsAfterOnexit()(this); + + // If this state has been replaced and we're supposed to dispose it... + if (currentState._needDispose) + { + // ... then dispose it now that it's no longer in use + currentState.dispose(); + } + + // Reset currentState to the new state object + currentState = this._states[this.getNextState()]; + + // set previousState and state, and clear nextState, for transition + this.setPreviousState(thisState); + this.setState(this.getNextState()); + this.setNextState(null); + prevState = thisState; + thisState = nextState; + nextState = undefined; + + // Run the autoActionsBeforeOnentry actions for the new state + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + + "#autoActionsBeforeOnentry"); + } + currentState.getAutoActionsBeforeOnentry()(this); + + // Run the entry function for the new state, if one is specified + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + "#entry"); + } + currentState.getOnentry()(this, event); + + // Run the autoActionsAfterOnentry actions for the new state + if (debugFunctions) + { + this.debug(this.getName() + "#" + thisState + + "#autoActionsAfterOnentry"); + } + currentState.getAutoActionsAfterOnentry()(this); + + // Add any blocked events back onto the pending event queue + var e; + for (var i = 0; i < this._blockedEvents.length; i++) + { + e = this._blockedEvents.pop(); + this._eventQueue.unshift(e); + } + + // Ensure that all actions have been flushed + qx.ui.core.Widget.flushGlobalQueues(); + + if (debugTransitions) + { + this.debug(this.getName() + "#" + prevState + " => " + + this.getName() + "#" + thisState); + } + + // See ya! + return true; + } + + if (debugTransitions) + { + this.debug(this.getName() + "#" + thisState + + ": event '" + event.getType() + "'" + + ": no transition found. No state change."); + } + + return true; +}; + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + + + +/* +--------------------------------------------------------------------------- + CLASS CONSTANTS +--------------------------------------------------------------------------- +*/ + +/** + * Constants which may be values of the nextState member in the transitionInfo + * parameter of the Transition constructor. + */ +qx.Class.StateChange = +{ + /** When used as a nextState value, means remain in current state */ + CURRENT_STATE : 1, + + /** When used as a nextState value, means go to most-recently pushed state */ + POP_STATE_STACK : 2, + + /** When used as a nextState value, means terminate this state machine */ + TERMINATE : 3 +}; + + +/** + * Constants for use in the events member of the transitionInfo parameter of + * the Transition constructor. + */ +qx.Class.EventHandling = +{ + /** + * This event is handled by this state, but the predicate of a transition + * will determine whether to use that transition. + */ + PREDICATE : 1, + + /** Enqueue this event for possible use by the next state */ + BLOCKED : 2 +}; + +/** + * Debug bitmask values. Set the debug flags from the application by or-ing + * together bits, akin to this: + * + * qx.Settings.setCustomOfClass( + * "qx.util.fsm.FiniteStateMachine", + * "debugFlags", + * (qx.util.fsm.FiniteStateMachine.DebugFlags.EVENTS | + * qx.util.fsm.FiniteStateMachine.DebugFlags.TRANSITIONS | + * qx.util.fsm.FiniteStateMachine.DebugFlags.FUNCTION_DETAIL | + * qx.util.fsm.FiniteStateMachine.DebugFlags.OBJECT_NOT_FOUND)); + */ +qx.Class.DebugFlags = +{ + /** Show events */ + EVENTS : 1, + + /** Show transitions */ + TRANSITIONS : 2, + + /** Show individual function invocations during transitions */ + FUNCTION_DETAIL : 4, + + /** When object friendly names are referenced but not found, show message */ + OBJECT_NOT_FOUND : 8 +}; + + +/* +--------------------------------------------------------------------------- + CLASS DEFAULT SETTINGS +--------------------------------------------------------------------------- +*/ + +/** + * Debug flags: bitmap of DebugFlags (see Class Constants). + */ +qx.Settings.setDefault( + "debugFlags", + (qx.util.fsm.FiniteStateMachine.DebugFlags.EVENTS | + qx.util.fsm.FiniteStateMachine.DebugFlags.TRANSITIONS | + qx.util.fsm.FiniteStateMachine.DebugFlags.OBJECT_NOT_FOUND)); + + +/* +--------------------------------------------------------------------------- + CLASS FUNCTIONS +--------------------------------------------------------------------------- +*/ + +/** + * Common function used by {qx.util.fsm.State} and + * {qx.util.fsm.Transition} for checking the value provided for + * auto actions. + * + * Auto-action property values passed to us look akin to: + * + * <pre> + * { + * // The name of a function. + * "setEnabled" : + * [ + * { + * // The parameter value(s), thus "setEnabled(true);" + * "parameters" : [ true ], + * + * // The function would be called on each object: + * // this.getObject("obj1").setEnabled(true); + * // this.getObject("obj2").setEnabled(true); + * "objects" : [ "obj1", "obj2" ] + * + * // And similarly for each object in each specified group. + * "groups" : [ "group1", "group2" ], + * } + * ]; + * + * "setColor" : + * [ + * { + * "parameters" : [ "blue" ] + * "groups" : [ "group3", "group4" ], + * "objects" : [ "obj3", "obj4" ] + * } + * ]; + * }; + * </pre> + * + * @param actionType {String} + * The name of the action being validated (for debug messages) + * + * @param propValue {Object} + * The property value which is being validated + * + * @param propData + * Not used + */ +qx.Class._commonCheckAutoActions = function(actionType, propValue, propData) +{ + // Validate that we received an object property value + if (typeof(propValue) != "object") + { + throw new Error("Invalid " + actionType + " value: " + typeof(propValue)); + } + + // We'll create a function to do the requested actions. Initialize the + // string into which we'll generate the common fragment added to the + // function for each object. + var funcFragment; + + // Here, we'll keep the function body. Initialize a try block. + var func = + "try" + + "{"; + + var param; + var objectAndGroupList; + + // Retrieve the function request, e.g. + // "enabled" : + for (var f in propValue) + { + // Get the function request value object, e.g. + // "setEnabled" : + // [ + // { + // "parameters" : [ true ], + // "objects" : [ "obj1", "obj2" ] + // "groups" : [ "group1", "group2" ], + // } + // ]; + var functionRequest = propValue[f]; + + // The function request value should be an object + if (! functionRequest instanceof Array) + { + throw new Error("Invalid function request type: " + + "expected array, found " + typeof(functionRequest)); + } + + // For each function request... + for (var i = 0; i < functionRequest.length; i++) + { + // Retreive the object and group list object + objectAndGroupList = functionRequest[i]; + + // The object and group list should be an object, e.g. + // { + // "parameters" : [ true ], + // "objects" : [ "obj1", "obj2" ] + // "groups" : [ "group1", "group2" ], + // } + if (typeof(objectAndGroupList) != "object") + { + throw new Error("Invalid function request parameter type: " + + "expected object, found " + + typeof(functionRequest[param])); + } + + // Retrieve the parameter list + params = objectAndGroupList["parameters"]; + + // If it didn't exist, ... + if (! params) + { + // ... use an empty array. + params = [ ]; + } + else + { + // otherwise, ensure we got an array + if (! params instanceof Array) + { + throw new Error("Invalid function parameters: " + + "expected array, found " + typeof(params)); + } + } + + // Create the function to call on each object. The object on which the + // function is called will be prepended later. + funcFragment = f + "("; + + // For each parameter... + for (var j = 0; j < params.length; j++) + { + // If this isn't the first parameter, add a separator + if (j != 0) + { + funcFragment += ","; + } + + if (typeof(params[j]) == "function") + { + // If the parameter is a function, arrange for it to be called + // at run time. + funcFragment += "(" + params[j] + ")(fsm)"; + } + else if (typeof(params[j]) == "string") + { + // If the parameter is a string, quote it. + funcFragment += '"' + params[j] + '"'; + } + else + { + // Otherwise, just add the parameter's literal value + funcFragment += params[j]; + } + } + + // Complete the function call + funcFragment += ")"; + + // Get the "objects" list, e.g. + // "objects" : [ "obj1", "obj2" ] + var a = objectAndGroupList["objects"]; + + // Was there an "objects" list? + if (! a) + { + // Nope. Simplify code by creating an empty array. + a = [ ]; + } + else if (! a instanceof Array) + { + throw new Error("Invalid 'objects' list: expected array, got " + + typeof(a)); + } + + for (var j = 0; j < a.length; j++) + { + // Ensure we got a string + if (typeof(a[j]) != "string") + { + throw new Error("Invalid friendly name in 'objects' list: " + a[j]); + } + + func += " fsm.getObject('" + a[j] + "')." + funcFragment + ";"; + } + + // Get the "groups" list, e.g. + // "groups" : [ "group1, "group2" ] + var g = objectAndGroupList["groups"]; + + // Was a "groups" list found? + if (g) + { + // Yup. Ensure it's an array. + if (! g instanceof Array) + { + throw new Error("Invalid 'groups' list: expected array, got " + + typeof(g)); + } + + for (var groupName in g) + { + // Arrange to call the function on each object in each group + func += + " var groupObjects = " + + " fsm.getGroupObjects('" + g[groupName] + "');" + + " for (var i = 0; i < groupObjects.length; i++)" + + " {" + + " var objName = groupObjects[i];" + + " fsm.getObject(objName)." + funcFragment + ";" + + " }"; + } + } + } + } + + // Terminate the try block for function invocations + func += + "}" + + "catch(e)" + + "{" + + " fsm.debug(e);" + + "}"; + +// o = new qx.core.Object(); +// o.debug("Dynamically created " + actionType + "(fsm) { " + func + " }"); + + // We've now built the entire body of a function that implements calls to + // each of the requested automatic actions. Create and return the function, + // which will become the property value. + return new Function("fsm", func); +}; + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + var e; + var s; + + if (this.getDisposed()) { + return true; + } + + while (this._savedStates.length > 0) + { + s = this._savedStates.pop(); + s = null; + } + this._savedStates = null; + + while (this._eventQueue.length > 0) + { + e = this._eventQueue.pop(); + e.dispose(); + e = null; + } + this._eventQueue = null; + + while (this._blockedEvents.length > 0) + { + e = this._blockedEvents.pop(); + e.dispose(); + e = null; + } + + for (var s in this._states) + { + this._states[s].dispose(); + this._states[s] = null; + delete this._states[s]; + } + this._states = null; + + return qx.core.Target.prototype.dispose.call(this); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/State.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/State.js new file mode 100644 index 0000000000..6a3743a2b3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/State.js @@ -0,0 +1,613 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006, 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(util_fsm) +#require(qx.util.fsm.FiniteStateMachine) + +************************************************************************ */ + +/** + * Create a new state which may be added to a finite state machine. + * + * @param + * stateName - + * The name of this state. This is the name which may be referenced in + * objects of class qx.util.fsm.Transition, when passing of + * the the transition's predicate means transition to this state. + * + * @param + * stateInfo - + * An object containing any of the following properties: + * + * onentry - + * A function which is called upon entry to the state. Its signature is + * function(fsm, event) and it is saved in the onentry property of the + * state object. (This function is called after the Transition's action + * function and after the previous state's onexit function.) + * + * In the onentry function: + * + * fsm - + * The finite state machine object to which this state is attached. + * + * event - + * The event that caused the finite state machine to run + * + * onexit - + * A function which is called upon exit from the state. Its signature + * is function(fsm, event) and it is saved in the onexit property of the + * state object. (This function is called after the Transition's action + * function and before the next state's onentry function.) + * + * In the onexit function: + * + * fsm - + * The finite state machine object to which this state is attached. + * + * event - + * The event that caused the finite state machine to run + * + * autoActionsBeforeOnentry - + * autoActionsAfterOnentry - + * autoActionsBeforeOnexit - + * autoActionsAfterOnexit - + * Automatic actions which take place at the time specified by the + * property name. In all cases, the action takes place immediately + * before or after the specified function. + * + * The property value for each of these properties is an object which + * describes some number of functions to invoke on a set of specified + * objects (typically widgets). + * + * An example, using autoActionsBeforeOnentry, might look like this: + * + * "autoActionsBeforeOnentry" : + * { + * // The name of a function. + * "enabled" : + * [ + * { + * // The parameter value, thus "setEnabled(true);" + * "parameters" : [ true ], + * + * // The function would be called on each object: + * // this.getObject("obj1").setEnabled(true); + * // this.getObject("obj2").setEnabled(true); + * "objects" : [ "obj1", "obj2" ], + * + * // And similarly for each object in each specified group. + * "groups" : [ "group1", "group2" ] + * } + * ], + * + * // The name of another function. + * "visible" : + * [ + * { + * // The parameter value, thus "setEnabled(true);" + * "parameters" : [ false ], + * + * // The function would be called on each object and group, as + * // described above. + * "objects" : [ "obj3", "obj4" ], + * "groups" : [ "group3", "group4" ] + * } + * ] + * }; + * + * + * events (required) - + * A description to the finite state machine of how to handle a + * particular event, optionally associated with a specific target object + * on which the event was dispatched. This should be an object + * containing one property for each event which is either handled or + * blocked. The property name should be the event name. The property + * value should be one of: + * + * (a) qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE + * + * (b) qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED + * + * (c) a string containing the name of an explicit Transition to use + * + * (d) an object where each property name is the Friendly Name of an + * object (meaning that this rule applies if both the event and + * the event's target object's Friendly Name match), and its + * property value is one of (a), (b) or (c), above. + * + * This object is saved in the events property of the state object. + * + * Additional properties may be provided in stateInfo. They will not be + * used by the finite state machine, but will be available via + * this.getUserData("<propertyName>") during the state's onentry and + * onexit functions. + */ +qx.OO.defineClass("qx.util.fsm.State", qx.core.Object, +function(stateName, stateInfo) +{ + // Call our superclass' constructor + qx.core.Object.call(this, true); + + // Save the state name + this.setName(stateName); + + // Ensure they passed in an object + if (typeof(stateInfo) != "object") + { + throw new Error("State info must be an object"); + } + + // Save data from the stateInfo object + for (var field in stateInfo) + { + // If we find one of our properties, call its setter. + switch(field) + { + case "onentry": + this.setOnentry(stateInfo[field]); + break; + + case "onexit": + this.setOnexit(stateInfo[field]); + break; + + case "autoActionsBeforeOnentry": + this.setAutoActionsBeforeOnentry(stateInfo[field]); + break; + + case "autoActionsAfterOnentry": + this.setAutoActionsAfterOnentry(stateInfo[field]); + break; + + case "autoActionsBeforeOnexit": + this.setAutoActionsBeforeOnexit(stateInfo[field]); + break; + + case "autoActionsAfterOnexit": + this.setAutoActionsAfterOnexit(stateInfo[field]); + break; + + case "events": + this.setEvents(stateInfo[field]); + break; + + default: + // Anything else is user-provided data for their own use. Save it. + this.setUserData(field, stateInfo[field]); + + // Log it in case it was a typo and they intended a built-in field + this.debug("State " + stateName + ": " + + "Adding user-provided field to state: " + field); + + break; + } + } + + + // Check for required but missing properties + if (! this.getEvents()) + { + throw new Error("The events object must be provided in new state info"); + } + + + // Initialize the transition list + this.transitions = { }; +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * The name of this state. This name may be used as a Transition's nextState + * value, or an explicit next state in the 'events' handling list in a State. + */ +qx.OO.addProperty( + { + name : "name", + type : "string" + }); + +/** + * The onentry function for this state. This is documented in the + * constructor, and is typically provided through the constructor's stateInfo + * object, but it is also possible (but highly NOT recommended) to change this + * dynamically. + */ +qx.OO.addProperty( + { + name : "onentry", + defaultValue : function(fsm, event) { } + }); + +/** + * The onexit function for this state. This is documented in the constructor, + * and is typically provided through the constructor's stateInfo object, but + * it is also possible (but highly NOT recommended) to change this + * dynamically. + */ +qx.OO.addProperty( + { + name : "onexit", + defaultValue : function(fsm, event) { } + }); + +/** + * Automatic actions to take prior to calling the state's onentry function. + * + * The value passed to setAutoActionsBeforeOnentry() should like something + * akin to: + * + * "autoActionsBeforeOnentry" : + * { + * // The name of a function. This would become "setEnabled(" + * "enabled" : + * [ + * { + * // The parameter value, thus "setEnabled(true);" + * "parameters" : [ true ], + * + * // The function would be called on each object: + * // this.getObject("obj1").setEnabled(true); + * // this.getObject("obj2").setEnabled(true); + * "objects" : [ "obj1", "obj2" ] + * + * // And similarly for each object in each specified group. + * "groups" : [ "group1", "group2" ], + * } + * ]; + * }; + */ +qx.OO.addProperty( + { + name : "autoActionsBeforeOnentry", + defaultValue : function(fsm, event) { } + }); + +/** + * Automatic actions to take after return from the state's onentry function. + * + * The value passed to setAutoActionsAfterOnentry() should like something akin + * to: + * + * "autoActionsAfterOnentry" : + * { + * // The name of a function. This would become "setEnabled(" + * "enabled" : + * [ + * { + * // The parameter value, thus "setEnabled(true);" + * "parameters" : [ true ], + * + * // The function would be called on each object: + * // this.getObject("obj1").setEnabled(true); + * // this.getObject("obj2").setEnabled(true); + * "objects" : [ "obj1", "obj2" ] + * + * // And similarly for each object in each specified group. + * "groups" : [ "group1", "group2" ], + * } + * ]; + * }; + */ +qx.OO.addProperty( + { + name : "autoActionsAfterOnentry", + defaultValue : function(fsm, event) { } + }); + +/** + * Automatic actions to take prior to calling the state's onexit function. + * + * The value passed to setAutoActionsBeforeOnexit() should like something akin + * to: + * + * "autoActionsBeforeOnexit" : + * { + * // The name of a function. This would become "setEnabled(" + * "enabled" : + * [ + * { + * // The parameter value, thus "setEnabled(true);" + * "parameters" : [ true ], + * + * // The function would be called on each object: + * // this.getObject("obj1").setEnabled(true); + * // this.getObject("obj2").setEnabled(true); + * "objects" : [ "obj1", "obj2" ] + * + * // And similarly for each object in each specified group. + * "groups" : [ "group1", "group2" ], + * } + * ]; + * }; + */ +qx.OO.addProperty( + { + name : "autoActionsBeforeOnexit", + defaultValue : function(fsm, event) { } + }); + + +/** + * Automatic actions to take after returning from the state's onexit function. + * + * The value passed to setAutoActionsAfterOnexit() should like something akin + * to: + * + * "autoActionsBeforeOnexit" : + * { + * // The name of a function. This would become "setEnabled(" + * "enabled" : + * [ + * { + * // The parameter value, thus "setEnabled(true);" + * "parameters" : [ true ], + * + * // The function would be called on each object: + * // this.getObject("obj1").setEnabled(true); + * // this.getObject("obj2").setEnabled(true); + * "objects" : [ "obj1", "obj2" ] + * + * // And similarly for each object in each specified group. + * "groups" : [ "group1", "group2" ], + * } + * ]; + * }; + */ +qx.OO.addProperty( + { + name : "autoActionsAfterOnexit", + defaultValue : function(fsm, event) { } + }); + + +/** + * The object representing handled and blocked events for this state. This is + * documented in the constructor, and is typically provided through the + * constructor's stateInfo object, but it is also possible (but highly NOT + * recommended) to change this dynamically. + */ +qx.OO.addProperty( + { + name : "events" + }); + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._checkName = function(propValue, propData) +{ + // Ensure that we got a valid state name + if (typeof(propValue) != "string" || propValue.length < 1) + { + throw new Error("Invalid state name"); + } + + return propValue; +}; + +qx.Proto._checkOnentry = function(propValue, propData) +{ + // Validate the onentry function + switch(typeof(propValue)) + { + case "undefined": + // None provided. Convert it to a null function + return function(fsm, event) {}; + + case "function": + // We're cool. No changes required + return propValue; + + default: + throw new Error("Invalid onentry type: " + typeof(propValue)); + return null; + } +}; + +qx.Proto._checkOnexit = function(propValue, propData) +{ + // Validate the onexit function + switch(typeof(propValue)) + { + case "undefined": + // None provided. Convert it to a null function + return function(fsm, event) {}; + + case "function": + // We're cool. No changes required + return propValue; + + default: + throw new Error("Invalid onexit type: " + typeof(propValue)); + return null; + } +}; + +qx.Proto._checkEvents = function(propValue, propData) +{ + // Validate that events is an object + if (typeof(propValue) != "object") + { + throw new Error("events must be an object"); + } + + // Confirm that each property is a valid value + // The property value should be one of: + // + // (a) qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE + // + // (b) qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED + // + // (c) a string containing the name of an explicit Transition to use + // + // (d) an object where each property name is the Friendly Name of an + // object (meaning that this rule applies if both the event and + // the event's target object's Friendly Name match), and its + // property value is one of (a), (b) or (c), above. + for (var e in propValue) + { + var action = propValue[e]; + if (typeof(action) == "number" && + action != qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE && + action != qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED) + { + throw new Error("Invalid numeric value in events object: " + + e + ": " + action); + } + else if (typeof(action) == "object") + { + for (action_e in action) + { + if (typeof(action[action_e]) == "number" && + action[action_e] != + qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE && + action[action_e] != + qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED) + { + throw new Error("Invalid numeric value in events object " + + "(" + e + "): " + + action_e + ": " + action[action_e]); + } + else if (typeof(action[action_e]) != "string" && + typeof(action[action_e]) != "number") + { + throw new Error("Invalid value in events object " + + "(" + e + "): " + + action_e + ": " + action[action_e]); + } + } + } + else if (typeof(action) != "string" && typeof(action) != "number") + { + throw new Error("Invalid value in events object: " + + e + ": " + propValue[e]); + } + } + + // We're cool. No changes required. + return propValue; +}; + +qx.Proto._checkAutoActionsBeforeOnentry = function(propValue, propData) +{ + return qx.util.fsm.FiniteStateMachine._commonCheckAutoActions( + "autoActionsBeforeOnentry", + propValue, + propData); +}; + +qx.Proto._checkAutoActionsAfterOnentry = function(propValue, propData) +{ + return qx.util.fsm.FiniteStateMachine._commonCheckAutoActions( + "autoActionsAfterOnentry", + propValue, + propData); +}; + +qx.Proto._checkAutoActionsBeforeOnexit = function(propValue, propData) +{ + return qx.util.fsm.FiniteStateMachine._commonCheckAutoActions( + "autoActionsBeforeOnexit", + propValue, + propData); +}; + +qx.Proto._checkAutoActionsAfterOnexit = function(propValue, propData) +{ + return qx.util.fsm.FiniteStateMachine._commonCheckAutoActions( + "autoActionsAfterOnexit", + propValue, + propData); +}; + + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + +/** + * Add a transition to a state + * + * @param trans {qx.util.fsm.Transition} + * An object of class qx.util.fsm.Transition representing a + * transition which is to be a part of this state. + */ +qx.Proto.addTransition = function(trans) +{ + // Ensure that we got valid transition info + if (! trans instanceof qx.util.fsm.Transition) + { + throw new Error("Invalid transition: not an instance of " + + "qx.util.fsm.Transition"); + } + + // Add the new transition object to the state + this.transitions[trans.getName()] = trans; +}; + + + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + + + +/* +--------------------------------------------------------------------------- + CLASS CONSTANTS +--------------------------------------------------------------------------- +*/ + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js new file mode 100644 index 0000000000..6854a9c4e3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/Transition.js @@ -0,0 +1,381 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2006, 2007 Derrell Lipman + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Derrell Lipman (derrell) + +************************************************************************ */ + +/* ************************************************************************ + +#module(util_fsm) +#require(qx.util.fsm.FiniteStateMachine) + +************************************************************************ */ + +/** + * Create a new possible transition from one state to another. + * + * @param transitionName {String} + * The name of this transition, used in debug messages. + * + * @param transitionInfo {Object} + * An object optionally containing any of the following properties: + * + * predicate - + * A function which is called to determine whether this transition is + * acceptable. An acceptable transition will cause the transition's + * "ontransition" function to be run, the current state's "onexit" + * function to be run, and the new state's "onentry" function to be run. + * + * The predicate function's signature is function(fsm, event) and it is + * saved in the predicate property of the transition object. In the + * predicate function: + * + * fsm - + * The finite state machine object to which this state is attached. + * + * event - + * The event that caused a run of the finite state machine + * + * The predicate function should return one of the following three + * values: + * + * - true means the transition is acceptable + * + * - false means the transition is not acceptable, and the next + * transition (if one exists) should be tried to determine if it is + * acceptable + * + * - null means that the transition determined that no further + * transitions should be tried. This might be used when the + * transition ascertained that the event is for a target that is not + * available in the current state, and the event has called + * fsm.queueEvent() to have the event delivered upon state + * transition. + * + * It is possible to create a default predicate -- one that will cause a + * transition to be acceptable always -- by either not providing a + * predicate property, or by explicitely either setting the predicate + * property to 'true' or setting it to a function that unconditionally + * returns 'true'. This default transition should, of course, always be + * the last transition added to a state, since no transition added after + * it will ever be tried. + * + * nextState - + * The state to which we transition, if the predicate returns true + * (meaning the transition is acceptable). The value of nextState may + * be: + * + * - a string, the state name of the state to transition to + * + * - One of the constants: + * - qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE: + * Remain in whatever is the current state + * - qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK: + * Transition to the state at the top of the saved-state stack, + * and remove the top element from the saved-state stack. + * Elements are added to the saved-state stack using + * fsm.pushState(). It is an error if no state exists on the + * saved-state stack. + * - qx.util.fsm.FiniteStateMachine.StateChange.TERMINATE: + * TBD + * + * autoActionsBeforeOntransition - + * autoActionsAfterOntransition - + * Automatic actions which take place at the time specified by the + * property name. In all cases, the action takes place immediately + * before or after the specified function. + * + * The property value for each of these properties is an object which + * describes some number of functions to invoke on a set of specified + * objects (typically widgets). + * + * See {@link qx.util.fsm.State} for an example of autoActions. + * + * ontransition - + * A function which is called if the predicate function for this + * transition returns true. Its signature is function(fsm, event) and + * it is saved in the ontransition property of the transition object. + * In the ontransition function: + * + * fsm - + * The finite state machine object to which this state is attached. + * + * event - + * The event that caused a run of the finite state machine + * + * Additional properties may be provided in transInfo. They will not be + * used by the finite state machine, but will be available via + * this.getUserData("<propertyName>") during the transition's predicate + * and ontransition functions. + */ +qx.OO.defineClass("qx.util.fsm.Transition", qx.core.Object, +function(transitionName, transitionInfo) +{ + // Call our superclass' constructor + qx.core.Object.call(this, true); + + // Save the state name + this.setName(transitionName); + + // Save data from the transitionInfo object + for (var field in transitionInfo) + { + // If we find one of our properties, call its setter. + switch(field) + { + case "predicate": + this.setPredicate(transitionInfo[field]); + break; + + case "nextState": + this.setNextState(transitionInfo[field]); + break; + + case "autoActionsBeforeOntransition": + this.setAutoActionsBeforeOntransition(transitionInfo[field]); + break; + + case "autoActionsAfterOntransition": + this.setAutoActionsAfterOntransition(transitionInfo[field]); + break; + + case "ontransition": + this.setOntransition(transitionInfo[field]); + break; + + default: + // Anything else is user-provided data for their own use. Save it. + this.setUserData(field, transitionInfo[field]); + + // Log it in case it was a typo and they intended a built-in field + this.debug("Transition " + transitionName + ": " + + "Adding user-provided field to transition: " + field); + + break; + } + } +}); + + + + +/* +--------------------------------------------------------------------------- + PROPERTIES +--------------------------------------------------------------------------- +*/ + +/** + * The name of this transition + */ +qx.OO.addProperty( + { + name : "name", + type : "string" + }); + +/** + * The predicate function for this transition. This is documented in the + * constructor, and is typically provided through the constructor's + * transitionInfo object, but it is also possible (but highly NOT recommended) + * to change this dynamically. + */ +qx.OO.addProperty( + { + name : "predicate", + defaultValue : function(fsm, event) { return true; } + }); + +/** + * The state to transition to, if the predicate determines that this + * transition is acceptable. This is documented in the constructor, and is + * typically provided through the constructor's transitionInfo object, but it + * is also possible (but highly NOT recommended) to change this dynamically. + */ +qx.OO.addProperty( + { + name : "nextState", + defaultValue : qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE + }); + +/** + * Automatic actions to take prior to calling the transition's ontransition + * function. This is documented in the constructor, and is typically provided + * through the constructor's transitionInfo object, but it is also possible + * (but highly NOT recommended) to change this dynamically. + */ +qx.OO.addProperty( + { + name : "autoActionsBeforeOntransition", + defaultValue : function(fsm, event) { } + }); + +/** + * Automatic actions to take immediately after calling the transition's + * ontransition function. This is documented in the constructor, and is + * typically provided through the constructor's transitionInfo object, but it + * is also possible (but highly NOT recommended) to change this dynamically. + */ +qx.OO.addProperty( + { + name : "autoActionsAfterOntransition", + defaultValue : function(fsm, event) { } + }); + + +/** + * The function run when the transition is accepted. This is documented in + * the constructor, and is typically provided through the constructor's + * transitionInfo object, but it is also possible (but highly NOT recommended) + * to change this dynamically. + */ +qx.OO.addProperty( + { + name : "ontransition", + defaultValue : function(fsm, event) { } + }); + + + + +/* +--------------------------------------------------------------------------- + MODIFIER +--------------------------------------------------------------------------- +*/ + +qx.Proto._checkName = function(propValue, propData) +{ + // Ensure that we got a valid state name + if (typeof(propValue) != "string" || propValue.length < 1) + { + throw new Error("Invalid transition name"); + } + + return propValue; +}; + +qx.Proto._checkPredicate = function(propValue, propData) +{ + // Validate the predicate. Convert all valid types to function. + switch(typeof(propValue)) + { + case "undefined": + // No predicate means predicate passes + return function(fsm, event) { return true; }; + + case "boolean": + // Convert boolean predicate to a function which returns that value + return function(fsm, event) { return propValue; }; + + case "function": + // Use user-provided function. + return propValue; + + default: + throw new Error("Invalid transition predicate type: " + + typeof(propValue)); + break; + } +}; + +qx.Proto._checkNextState = function(propValue, propData) +{ + // Validate nextState. It must be a string or a number. + switch(typeof(propValue)) + { + case "string": + return propValue; + + case "number": + // Ensure that it's one of the possible state-change constants + switch(propValue) + { + case qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE: + case qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK: + case qx.util.fsm.FiniteStateMachine.StateChange.TERMINATE: + return propValue; + + default: + throw new Error("Invalid transition nextState value: " + + propValue + + ": nextState must be an explicit state name, " + + "or one of the Fsm.StateChange constants"); + } + break; + + default: + throw new Error("Invalid transition nextState type: " + typeof(propValue)); + break; + } +}; + +qx.Proto._checkOntransition = function(propValue, propData) +{ + // Validate the ontransition function. Convert undefined to function. + switch(typeof(propValue) ) + { + case "undefined": + // No provided function just means do nothing. Use a null function. + return function(fsm, event) { }; + + case "function": + // Use user-provided function. + return propValue; + + default: + throw new Error("Invalid ontransition type: " + typeof(propValue)); + break; + } +}; + +/* +--------------------------------------------------------------------------- + UTILITIES +--------------------------------------------------------------------------- +*/ + + +/* +--------------------------------------------------------------------------- + EVENT LISTENERS +--------------------------------------------------------------------------- +*/ + + + +/* +--------------------------------------------------------------------------- + CLASS CONSTANTS +--------------------------------------------------------------------------- +*/ + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + return qx.core.Object.prototype.dispose.call(this); +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/example.txt b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/example.txt new file mode 100644 index 0000000000..35e8282afe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/util/fsm/example.txt @@ -0,0 +1,210 @@ +var fsm; +var state; +var trans; + +// Create a new finite state machine called "Test Machine" +fsm = new qx.util.fsm.FiniteStateMachine("Test machine"); + +// State S1 +state = new qx.util.fsm.State( + // State name + "S1", + + // Object with state information + { + // Function called on entry to this state + "onentry" : + function(fsm, event) + { + alert("Previous state: " + fsm.getPreviousState()); + }; + + // Function called on exit from this state + "onexit" : + function(fsm, event) + { + alert("Next state: " + fsm.getNextState()); + }; + + // Automatic actions to take place before a (possibly) new state's onentry + // function is called. + "autoActionsBeforeOnentry" : + { + // The name of a function. + "setEnabled" : + [ + { + // The parameter value(s), thus "setEnabled(true);" + "parameters" : [ true ], + + // The function would be called on each object: + // this.getObject("obj1").setEnabled(true); + // this.getObject("obj2").setEnabled(true); + "objects" : [ "obj1", "obj2" ] + + // And similarly for each object in each specified group. + "groups" : [ "group1", "group2" ], + } + ]; + + "setColor" : + [ + { + "parameters" : [ "blue" ] + "groups" : [ "group3", "group4" ], + "objects" : [ "obj3", "obj4" ] + } + ]; + }; + + // also available, in same format as actionsBeforeOnentry: + // "autoActionsAfterOnentry", + // "autoActionsBeforeOnexit" + // "autoActionsAfterOnexit" + + // Events handled by this state, or queued for processing by a future state + "events" : + { + // The event type "compete" is handled by one of the transitions in this + // state. The transitions will be searched in order of their addition + // to the state, until the predicate for a transition returns true (or + // no predicate is specified for the transition, which is an implicit + // "true") That transition will be used. + "complete" : qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE, + + // The event type "interval" has two objects specified by their + // "friendly name". The action when an event of type "interval" occurs + // depends on which object was the target of the event. + "interval" : + { + // If the target of the event was the object to which we have given + // the friendly name "flash" then use a transition specified by name + "flash" : "S1_S3_interval_flash", + + // If the target of the event was the object to which we have given + // the friendly name "timeout", then enqueue this event for possible + // processing by a future state. + "timeout" : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED + }, + + // The event type "execute", too, has two objects specified by their + // "friendly name". + "execute" : + { + // If the target of the event was the object to which we have given + // the friend name "ok", search the transitions in order looking for + // one where the predicate is true + "ok" : qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE + + // If the target of the event was the object to which we have given + // the friendly name "restart", then enqueue this event for possible + // processing by a future state. + "restart" : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED + } + + // all events other than those which are handled or blocked are ignored. + }; + }); + +// Add State S1 to the finite state machine. +fsm.addState(state); + +// Transition from S1 to S2 due to event 1 +trans = new qx.util.fsm.Transition( + // Transition name + "S1_S2_ev1", + + // Object with transition information + { + // return TRUE to pass + "predicate" : + function(fsm, event) + { + var type = event.getType(); + if (type == "somethingWeCareAbout") + { + return true; + } + else if (type == "somethingToHandleInAnotherState") + { + // reattempt event delivery following state transition + fsm.postponeEvent(event); + + // do no further transition attempts for this event for now + return null; + } + else + { + return false; + } + }, + + // if event matches and predicate passes, pop the state stack and go to + // the state which was found at the top of the stack. States are added to + // the state stack by calling fsm.pushState() during a state's onexit + // function or by a transition's action function. + "nextState" : qx.util.fsm.FiniteStateMachine.StateChange..POP_STATE_STACK, + + // action taken during transisition + "action" : + function(fsm, event) + { + // save current state so a future transition can get back to + // this saved state + fsm.pushState(); + } + }); +state.addTransition(trans); + +// Default transition (any event): remain in current state +trans = new qx.util.fsm.Transition( + "S1_S1_default", + { + // true or undefined : always pass + "predicate" : + function(fsm, event) + { + // This predicate does not pass, and we return null to tell the finite + // state machine that no additional transitions in the transition list + // should be tested. (Note that the next transition is the one + // explicitly called for by the "interval" event on the object with + // friendly name "flash". We do not want a predicate search to find + // it. + return null; + }, + + // return to current state + "nextState" : qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE, + }); +state.addTransition(trans); + +// Transition from S1 to S2 due to event 2. Since the previous transition +// returned null in its predicate function, the only way to get to this +// transition is when it is called out explicitly in the state's event list. +// This one was specified for the "interval" event on the object with friendly +// name "flash". +trans = new qx.util.finitestatememachine.Transition( + "S1_S3_interval_flash", + { + // No predicate or a value of 'true' means that the predicate passes as if + // a predicate function returned true. + "predicate" : true, + + // if event matches, go to this state + "nextState" : "S2", + + // action taken during transisition + "action" : + function(fsm, event) + { + alert(this.getName() + "action function"); + } + }); +state.addTransition(trans); + +// We would, of course, need to add state S2 since it is specified in a +// nextState property. That is left as an exercise for the reader. + + +// Initialize and start the machine running +fsm.start(); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Document.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Document.js new file mode 100644 index 0000000000..2585b6920b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Document.js @@ -0,0 +1,154 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * XML Document + * + * Tested with IE6, Firefox 2.0, WebKit/Safari 3.0 and Opera 9 + * + * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/81f3de54-3b79-46dc-8e01-73ca2d94cdb5.asp + * http://developer.mozilla.org/en/docs/Parsing_and_serializing_XML + */ +qx.OO.defineClass("qx.xml.Document"); + +/** + * Create an XML document. + * http://www.w3.org/TR/DOM-Level-2-Core/core.html#i-Document + * + * @param namespaceUri {String|null?null} The namespace URI of the document element to create or null. + * @param qualifiedName {String|null?null} The qualified name of the document element to be created or null. + * + * @return {Document} empty XML document + */ +qx.Class.create = function(namespaceUri, qualifiedName) {}; + +if (document.implementation && document.implementation.createDocument) // The Mozilla style +{ + qx.Class.create = function(namespaceUri, qualifiedName) + { + return document.implementation.createDocument(namespaceUri || "", qualifiedName || "", null); + } +} +else if (qx.core.Client.getInstance().isMshtml()) // The Microsoft style +{ + qx.Class.create = function(namespaceUri, qualifiedName) + { + /* + According to information on the Microsoft XML Team's WebLog + it is recommended to check for availability of MSXML versions 6.0 and 3.0. + Other versions are included for completeness, 5.0 is excluded as it is + "off-by-default" in IE7 (which could trigger a goldbar). + + http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/aabe29a2-bad2-4cea-8387-314174252a74.asp + + */ + var vServers = + [ + "MSXML2.DOMDocument.3.0", + "MSXML2.DOMDocument.6.0", + "MSXML2.DOMDocument.4.0", + "MSXML2.DOMDocument", // v3.0 + "MSXML.DOMDocument", // v2.x + "Microsoft.XMLDOM" // v2.x + ]; + + var vObject; + + for (var i=0, l=vServers.length; i<l; i++) + { + + try + { + vObject = new ActiveXObject(vServers[i]); + break; + } + catch(ex) + { + vObject = null; + } + } + if (qualifiedName && vObject) { + xmlStr = new qx.util.StringBuilder(); + xmlStr.add("<?xml version='1.0' encoding='UTF-8'?>\n<"); + xmlStr.add(qualifiedName); + if (namespaceUri) { + xmlStr.add(" xmlns='"); + xmlStr.add(namespaceUri); + xmlStr.add("'"); + } + xmlStr.add(" />"); + vObject.loadXML(xmlStr.toString()); + } + return vObject; + }; +} +else +{ + throw new Error("This browser does not support xml dom creation."); +} + + +/** + * The string passed in is parsed into a DOM document. + * + * @param str {String} the string to be parsed + * @return {Document} + * + * TODO: move to create() + */ +qx.Class.fromString = function(str) {}; + +if (window.DOMParser) +{ + qx.Class.fromString = function(str) { + var dom = (new DOMParser()).parseFromString(str, "text/xml"); + return dom; + }; +} +else if (qx.core.Client.getInstance().isMshtml()) // The Microsoft style +{ + qx.Class.fromString = function(str) { + var dom = qx.xml.Document.create(); + dom.loadXML(str); + return dom; + }; +} +else +{ + throw new Error("This browser does not support xml dom creation from string."); +} + + +/** + * Check whether an object is a Document instance + * + * @param obj {Object} object to check + * @return {Boolean} whether the object is a Document instance + */ +qx.Class.isDocument = function(obj) { + return (obj.nodeType == qx.dom.Node.DOCUMENT); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Element.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Element.js new file mode 100644 index 0000000000..c71c57be5c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Element.js @@ -0,0 +1,142 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + + +************************************************************************ */ + +/** + * XML Element + * + * Tested with IE6, Firefox 2.0, WebKit/Safari 3.0 and Opera 9 + * + * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/81f3de54-3b79-46dc-8e01-73ca2d94cdb5.asp + * http://developer.mozilla.org/en/docs/Parsing_and_serializing_XML + */ +qx.OO.defineClass("qx.xml.Element"); + + +/** + * The subtree rooted by the specified element or document is serialized to a string. + * + * @param element {Element|Document} The root of the subtree to be serialized. This could be any node, including a Document. + * @return {String} + */ +qx.Class.serialize = function(element) {} + +if (window.XMLSerializer) { + qx.Class.serialize = function(element) { + var element = qx.xml.Document.isDocument(element) ? element.documentElement : element; + return (new XMLSerializer()).serializeToString(element); + }; +} +else +{ + qx.Class.serialize = function(element) { + var element = qx.xml.Document.isDocument(element) ? element.documentElement : element; + return element.xml || element.outerHTML; + }; +} + + +/** + * Selects the first XmlNode that matches the XPath expression. + * + * @param element {Element|Document} root element for the search + * @param query {String} XPath query + * @return {Element} first matching element + */ + qx.Class.selectSingleNode = function(element, query) {}; + +if (window.XPathEvaluator) +{ + qx.Class.selectSingleNode = function(element, query) { + var xpe = new XPathEvaluator(); + return xpe.evaluate(query, element, xpe.createNSResolver(element), XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + }; +} +else if(qx.core.Client.getInstance().isMshtml() || document.selectSingleNode) // IE and Opera +{ + qx.Class.selectSingleNode = function(element, query) { + return element.selectSingleNode(query); + }; +} + + +/** + * Selects a list of nodes matching the XPath expression. + * + * @param element {Element|Document} root element for the search + * @param query {String} XPath query + * @return {Element[]} List of matching elements + */ + qx.Class.selectNodes = function(element, query) {}; + +if (window.XPathEvaluator) +{ + qx.Class.selectNodes = function(element, query) { + var xpe = new XPathEvaluator(); + var result = xpe.evaluate(query, element, xpe.createNSResolver(element), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + var nodes = []; + + for (var i=0; i<result.snapshotLength; i++) { + nodes[i] = result.snapshotItem(i); + } + + return nodes; + }; +} +else if(qx.core.Client.getInstance().isMshtml() || document.selectNodes) // IE and Opera +{ + qx.Class.selectNodes = function(element, query) { + return element.selectNodes(query); + }; +} + + +/** + * Returns a list of elements with the given tag name belonging to the given namespace (http://developer.mozilla.org/en/docs/DOM:element.getElementsByTagNameNS). + * + * @param element {Element|Document} the element from where the search should start. + * Note that only the descendants of this element are included in the search, not the node itself. + * @param namespaceURI is the namespace URI of elements to look for . For example, if you need to look + * for XHTML elements, use the XHTML namespace URI, <tt>http://www.w3.org/1999/xhtml</tt>. + * @param tagname {String} the tagname to look for + * @return {Element[]} a list of found elements in the order they appear in the tree. + */ +qx.Class.getElementsByTagNameNS = function(element, namespaceURI, tagname) {}; + +if (document.getElementsByTagNameNS) +{ + qx.Class.getElementsByTagNameNS = function(element, namespaceURI, tagname) { + return element.getElementsByTagNameNS(namespaceURI, tagname); + }; +} +else if (qx.core.Client.getInstance().isMshtml()) +{ + qx.Class.getElementsByTagNameNS = function(element, namespaceURI, tagname) { + var doc = element.ownerDocument || element; + doc.setProperty("SelectionLanguage", "XPath"); + doc.setProperty("SelectionNamespaces", "xmlns:ns='" + namespaceURI + "'"); + return qx.xml.Element.selectNodes(element, '//ns:' + tagname); + }; +} diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Entity.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Entity.js new file mode 100644 index 0000000000..d4ab84d69f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Entity.js @@ -0,0 +1,43 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.lang.Object) + +************************************************************************ */ + +/** + * XML Entities + */ +qx.OO.defineClass("qx.xml.Entity"); + + +/** Mapping of XML entity names to the corresponding char code */ +qx.Class.TO_CHARCODE = { + "quot": 34, // " - double-quote + "amp": 38, // & + "lt": 60, // < + "gt": 62, // > + "apos": 39 // XML apostrophe +}; + + +/** Mapping of char codes to XML entity names */ +qx.Class.FROM_CHARCODE = qx.lang.Object.invert(qx.Class.TO_CHARCODE); diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Namespace.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Namespace.js new file mode 100644 index 0000000000..0a054c0a88 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/Namespace.js @@ -0,0 +1,54 @@ +/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL: http://www.eclipse.org/org/documents/epl-v10.php
+ See the LICENSE file in the project's top-level directory for details.
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.xml.Namespace",
+{
+ SVG : "http://www.w3.org/2000/svg",
+ SMIL : "http://www.w3.org/2001/SMIL20/",
+ MML : "http://www.w3.org/1998/Math/MathML",
+ CML : "http://www.xml-cml.org",
+ XLINK : "http://www.w3.org/1999/xlink",
+ XHTML : "http://www.w3.org/1999/xhtml",
+ XUL : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
+ XBL : "http://www.mozilla.org/xbl",
+ FO : "http://www.w3.org/1999/XSL/Format",
+ XSL : "http://www.w3.org/1999/XSL/Transform",
+ XSLT : "http://www.w3.org/1999/XSL/Transform",
+ XI : "http://www.w3.org/2001/XInclude",
+ XFORMS : "http://www.w3.org/2002/01/xforms",
+ SAXON : "http://icl.com/saxon",
+ XALAN : "http://xml.apache.org/xslt",
+ XSD : "http://www.w3.org/2001/XMLSchema",
+ DT: "http://www.w3.org/2001/XMLSchema-datatypes",
+ XSI : "http://www.w3.org/2001/XMLSchema-instance",
+ RDF : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
+ RDFS : "http://www.w3.org/2000/01/rdf-schema#",
+ RSS1 : "http://purl.org/rss/1.0/modules/content/",
+ DC : "http://purl.org/dc/elements/1.1/",
+ DCQ: "http://purl.org/dc/qualifiers/1.0",
+ SOAPENV : "http://schemas.xmlsoap.org/soap/envelope/",
+ WSDL : "http://schemas.xmlsoap.org/wsdl/",
+ ADOBESVGEXTENSIONS : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+});
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/String.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/String.js new file mode 100644 index 0000000000..5af99b8a54 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/xml/String.js @@ -0,0 +1,73 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.lang.Object) + +************************************************************************ */ + +/** + * Escaping and unescaping of XML strings. + */ +qx.OO.defineClass("qx.xml.String"); + + +/** + * Escapes the characters in a <code>String</code> using XML entities. + * + * For example: <tt>"bread" & "butter"</tt> => + * <tt>&quot;bread&quot; &amp; &quot;butter&quot;</tt>. + * + * Supports only the four basic XML entities (gt, lt, quot, amp). + * Does not support DTDs or external entities. + * Note that unicode characters greater than 0x7f are currently escaped to their numerical \\u equivalent. + * + * @see #unescape + * + * @param str {String} the string to be escaped + * @return {String} the escaped string + */ +qx.Class.escape = function(str) { + return qx.dom.String.escapeEntities( + str, + qx.xml.Entity.FROM_CHARCODE + ); +}; + + +/** + * Unescapes a string containing XML entity escapes to a string + * containing the actual Unicode characters corresponding to the + * escapes. + * + * Supports only the four basic XML entities (gt, lt, quot, amp). + * Does not support DTDs or external entities. + * + * @see #escape + * + * @param str {String} the string to be unescaped + * @return {String} the unescaped string + */ +qx.Class.unescape = function(str) { + return qx.dom.String.unescapeEntities( + str, + qx.xml.Entity.TO_CHARCODE + ); +}; diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/C.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/C.xml new file mode 100644 index 0000000000..4106a04662 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/C.xml @@ -0,0 +1,2317 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <!-- + This is the default localization. I a key cannot be found in the desired locale the + information from this file is taken. It is basically a slightly modified "en.xml". + --> + <identity> + <version number="$Revision: 1.117 $"/> + <generation date="$Date: 2006/12/08 16:29:36 $"/> + <language type="C"/> + </identity> + <localeDisplayNames> + <languages> + <language type="aa">Afar</language> + <language type="ab">Abkhazian</language> + <language type="ace">Achinese</language> + <language type="ach">Acoli</language> + <language type="ada">Adangme</language> + <language type="ady">Adyghe</language> + <language type="ae">Avestan</language> + <language type="af">Afrikaans</language> + <language type="afa">Afro-Asiatic (Other)</language> + <language type="afh">Afrihili</language> + <language type="ain">Ainu</language> + <language type="ak">Akan</language> + <language type="akk">Akkadian</language> + <language type="ale">Aleut</language> + <language type="alg">Algonquian Languages</language> + <language type="alt">Southern Altai</language> + <language type="am">Amharic</language> + <language type="an">Aragonese</language> + <language type="ang">Old English (ca.450-1100)</language> + <language type="anp">Angika</language> + <language type="apa">Apache Languages</language> + <language type="ar">Arabic</language> + <language type="arc">Aramaic</language> + <language type="arn">Araucanian</language> + <language type="arp">Arapaho</language> + <language type="art">Artificial (Other)</language> + <language type="arw">Arawak</language> + <language type="as">Assamese</language> + <language type="ast">Asturian</language> + <language type="ath">Athapascan Languages</language> + <language type="aus">Australian Languages</language> + <language type="av">Avaric</language> + <language type="awa">Awadhi</language> + <language type="ay">Aymara</language> + <language type="az">Azerbaijani</language> + <language type="ba">Bashkir</language> + <language type="bad">Banda</language> + <language type="bai">Bamileke Languages</language> + <language type="bal">Baluchi</language> + <language type="ban">Balinese</language> + <language type="bas">Basa</language> + <language type="bat">Baltic (Other)</language> + <language type="be">Belarusian</language> + <language type="bej">Beja</language> + <language type="bem">Bemba</language> + <language type="ber">Berber</language> + <language type="bg">Bulgarian</language> + <language type="bh">Bihari</language> + <language type="bho">Bhojpuri</language> + <language type="bi">Bislama</language> + <language type="bik">Bikol</language> + <language type="bin">Bini</language> + <language type="bla">Siksika</language> + <language type="bm">Bambara</language> + <language type="bn">Bengali</language> + <language type="bnt">Bantu</language> + <language type="bo">Tibetan</language> + <language type="br">Breton</language> + <language type="bra">Braj</language> + <language type="bs">Bosnian</language> + <language type="btk">Batak</language> + <language type="bua">Buriat</language> + <language type="bug">Buginese</language> + <language type="byn">Blin</language> + <language type="ca">Catalan</language> + <language type="cad">Caddo</language> + <language type="cai">Central American Indian (Other)</language> + <language type="car">Carib</language> + <language type="cau">Caucasian (Other)</language> + <language type="cch">Atsam</language> + <language type="ce">Chechen</language> + <language type="ceb">Cebuano</language> + <language type="cel">Celtic (Other)</language> + <language type="ch">Chamorro</language> + <language type="chb">Chibcha</language> + <language type="chg">Chagatai</language> + <language type="chk">Chuukese</language> + <language type="chm">Mari</language> + <language type="chn">Chinook Jargon</language> + <language type="cho">Choctaw</language> + <language type="chp">Chipewyan</language> + <language type="chr">Cherokee</language> + <language type="chy">Cheyenne</language> + <language type="cmc">Chamic Languages</language> + <language type="co">Corsican</language> + <language type="cop">Coptic</language> + <language type="cpe">Other English-based Creoles and Pidgins</language> + <language type="cpf">Other French-based Creoles and Pidgins</language> + <language type="cpp">Other Portuguese-based Creoles and Pidgins</language> + <language type="cr">Cree</language> + <language type="crh">Crimean Turkish; Crimean Tatar</language> + <language type="crp">Creoles and Pidgins (Other)</language> + <language type="cs">Czech</language> + <language type="csb">Kashubian</language> + <language type="cu">Church Slavic</language> + <language type="cus">Cushitic (Other)</language> + <language type="cv">Chuvash</language> + <language type="cy">Welsh</language> + <language type="da">Danish</language> + <language type="dak">Dakota</language> + <language type="dar">Dargwa</language> + <language type="day">Dayak</language> + <language type="de">German</language> + <language type="de_AT">Austrian German</language> + <language type="del">Delaware</language> + <language type="den">Slave</language> + <language type="dgr">Dogrib</language> + <language type="din">Dinka</language> + <language type="doi">Dogri</language> + <language type="dra">Dravidian (Other)</language> + <language type="dsb">Lower Sorbian</language> + <language type="dua">Duala</language> + <language type="dum">Middle Dutch</language> + <language type="dv">Divehi</language> + <language type="dyu">Dyula</language> + <language type="dz">Dzongkha</language> + <language type="ee">Ewe</language> + <language type="efi">Efik</language> + <language type="egy">Egyptian (Ancient)</language> + <language type="eka">Ekajuk</language> + <language type="el">Greek</language> + <language type="elx">Elamite</language> + <language type="en">English</language> + <language type="en_AU">Australian English</language> + <language type="en_CA">Canadian English</language> + <language type="en_GB">British English</language> + <language type="en_US">U.S. English</language> + <language type="enm">Middle English</language> + <language type="eo">Esperanto</language> + <language type="es">Spanish</language> + <language type="es_419">Latin American Spanish</language> + <language type="et">Estonian</language> + <language type="eu">Basque</language> + <language type="ewo">Ewondo</language> + <language type="fa">Persian</language> + <language type="fan">Fang</language> + <language type="fat">Fanti</language> + <language type="ff">Fulah</language> + <language type="fi">Finnish</language> + <language type="fil">Filipino</language> + <language type="fiu">Finno - Ugrian (Other)</language> + <language type="fj">Fijian</language> + <language type="fo">Faroese</language> + <language type="fon">Fon</language> + <language type="fr">French</language> + <language type="fr_CA">Canadian French</language> + <language type="fr_CH">Swiss French</language> + <language type="frm">Middle French</language> + <language type="fro">Old French</language> + <language type="frr">Northern Frisian</language> + <language type="frs">Eastern Frisian</language> + <language type="fur">Friulian</language> + <language type="fy">Western Frisian</language> + <language type="ga">Irish</language> + <language type="gaa">Ga</language> + <language type="gay">Gayo</language> + <language type="gba">Gbaya</language> + <language type="gd">Scottish Gaelic</language> + <language type="gem">Germanic (Other)</language> + <language type="gez">Geez</language> + <language type="gil">Gilbertese</language> + <language type="gl">Galician</language> + <language type="gmh">Middle High German</language> + <language type="gn">Guarani</language> + <language type="goh">Old High German</language> + <language type="gon">Gondi</language> + <language type="gor">Gorontalo</language> + <language type="got">Gothic</language> + <language type="grb">Grebo</language> + <language type="grc">Ancient Greek</language> + <language type="gsw">Swiss German</language> + <language type="gu">Gujarati</language> + <language type="gv">Manx</language> + <language type="gwi">Gwichʼin</language> + <language type="ha">Hausa</language> + <language type="hai">Haida</language> + <language type="haw">Hawaiian</language> + <language type="he">Hebrew</language> + <language type="hi">Hindi</language> + <language type="hil">Hiligaynon</language> + <language type="him">Himachali</language> + <language type="hit">Hittite</language> + <language type="hmn">Hmong</language> + <language type="ho">Hiri Motu</language> + <language type="hr">Croatian</language> + <language type="hsb">Upper Sorbian</language> + <language type="ht">Haitian</language> + <language type="hu">Hungarian</language> + <language type="hup">Hupa</language> + <language type="hy">Armenian</language> + <language type="hz">Herero</language> + <language type="ia">Interlingua</language> + <language type="iba">Iban</language> + <language type="id">Indonesian</language> + <language type="ie">Interlingue</language> + <language type="ig">Igbo</language> + <language type="ii">Sichuan Yi</language> + <language type="ijo">Ijo</language> + <language type="ik">Inupiaq</language> + <language type="ilo">Iloko</language> + <language type="inc">Indic (Other)</language> + <language type="ine">Indo-European (Other)</language> + <language type="inh">Ingush</language> + <language type="io">Ido</language> + <language type="ira">Iranian (Other)</language> + <language type="iro">Iroquoian languages</language> + <language type="is">Icelandic</language> + <language type="it">Italian</language> + <language type="iu">Inuktitut</language> + <language type="ja">Japanese</language> + <language type="jbo">Lojban</language> + <language type="jpr">Judeo-Persian</language> + <language type="jrb">Judeo-Arabic</language> + <language type="jv">Javanese</language> + <language type="ka">Georgian</language> + <language type="kaa">Kara-Kalpak</language> + <language type="kab">Kabyle</language> + <language type="kac">Kachin</language> + <language type="kaj">Jju</language> + <language type="kam">Kamba</language> + <language type="kar">Karen</language> + <language type="kaw">Kawi</language> + <language type="kbd">Kabardian</language> + <language type="kcg">Tyap</language> + <language type="kfo">Koro</language> + <language type="kg">Kongo</language> + <language type="kha">Khasi</language> + <language type="khi">Khoisan (Other)</language> + <language type="kho">Khotanese</language> + <language type="ki">Kikuyu</language> + <language type="kj">Kuanyama</language> + <language type="kk">Kazakh</language> + <language type="kl">Kalaallisut</language> + <language type="km">Khmer</language> + <language type="kmb">Kimbundu</language> + <language type="kn">Kannada</language> + <language type="ko">Korean</language> + <language type="kok">Konkani</language> + <language type="kos">Kosraean</language> + <language type="kpe">Kpelle</language> + <language type="kr">Kanuri</language> + <language type="krc">Karachay-Balkar</language> + <language type="krl">Karelian</language> + <language type="kro">Kru</language> + <language type="kru">Kurukh</language> + <language type="ks">Kashmiri</language> + <language type="ku">Kurdish</language> + <language type="kum">Kumyk</language> + <language type="kut">Kutenai</language> + <language type="kv">Komi</language> + <language type="kw">Cornish</language> + <language type="ky">Kirghiz</language> + <language type="la">Latin</language> + <language type="lad">Ladino</language> + <language type="lah">Lahnda</language> + <language type="lam">Lamba</language> + <language type="lb">Luxembourgish</language> + <language type="lez">Lezghian</language> + <language type="lg">Ganda</language> + <language type="li">Limburgish</language> + <language type="ln">Lingala</language> + <language type="lo">Lao</language> + <language type="lol">Mongo</language> + <language type="loz">Lozi</language> + <language type="lt">Lithuanian</language> + <language type="lu">Luba-Katanga</language> + <language type="lua">Luba-Lulua</language> + <language type="lui">Luiseno</language> + <language type="lun">Lunda</language> + <language type="luo">Luo</language> + <language type="lus">Lushai</language> + <language type="lv">Latvian</language> + <language type="mad">Madurese</language> + <language type="mag">Magahi</language> + <language type="mai">Maithili</language> + <language type="mak">Makasar</language> + <language type="man">Mandingo</language> + <language type="map">Austronesian</language> + <language type="mas">Masai</language> + <language type="mdf">Moksha</language> + <language type="mdr">Mandar</language> + <language type="men">Mende</language> + <language type="mg">Malagasy</language> + <language type="mga">Middle Irish</language> + <language type="mh">Marshallese</language> + <language type="mi">Maori</language> + <language type="mic">Micmac</language> + <language type="min">Minangkabau</language> + <language type="mis">Miscellaneous Languages</language> + <language type="mk">Macedonian</language> + <language type="mkh">Mon-Khmer (Other)</language> + <language type="ml">Malayalam</language> + <language type="mn">Mongolian</language> + <language type="mnc">Manchu</language> + <language type="mni">Manipuri</language> + <language type="mno">Manobo Languages</language> + <language type="mo">Moldavian</language> + <language type="moh">Mohawk</language> + <language type="mos">Mossi</language> + <language type="mr">Marathi</language> + <language type="ms">Malay</language> + <language type="mt">Maltese</language> + <language type="mul">Multiple Languages</language> + <language type="mun">Munda Languages</language> + <language type="mus">Creek</language> + <language type="mwl">Mirandese</language> + <language type="mwr">Marwari</language> + <language type="my">Burmese</language> + <language type="myn">Mayan languages</language> + <language type="myv">Erzya</language> + <language type="na">Nauru</language> + <language type="nah">Nahuatl</language> + <language type="nai">North American Indian (Other)</language> + <language type="nap">Neapolitan</language> + <language type="nb">Norwegian Bokmål</language> + <language type="nd">North Ndebele</language> + <language type="nds">Low German; Low Saxon</language> + <language type="ne">Nepali</language> + <language type="new">Newari</language> + <language type="ng">Ndonga</language> + <language type="nia">Nias</language> + <language type="nic">Niger - Kordofanian (Other)</language> + <language type="niu">Niuean</language> + <language type="nl">Dutch</language> + <language type="nl_BE">Flemish</language> + <language type="nn">Norwegian Nynorsk</language> + <language type="no">Norwegian</language> + <language type="nog">Nogai</language> + <language type="non">Norse, Old</language> + <language type="nqo">N’Ko</language> + <language type="nr">South Ndebele</language> + <language type="nso">Northern Sotho</language> + <language type="nub">Nubian Languages</language> + <language type="nv">Navajo</language> + <language type="nwc">Classical Newari</language> + <language type="ny">Nyanja; Chichewa; Chewa</language> + <language type="nym">Nyamwezi</language> + <language type="nyn">Nyankole</language> + <language type="nyo">Nyoro</language> + <language type="nzi">Nzima</language> + <language type="oc">Occitan (post 1500); Provençal</language> + <language type="oj">Ojibwa</language> + <language type="om">Oromo</language> + <language type="or">Oriya</language> + <language type="os">Ossetic</language> + <language type="osa">Osage</language> + <language type="ota">Ottoman Turkish</language> + <language type="oto">Otomian Languages</language> + <language type="pa">Punjabi</language> + <language type="paa">Papuan (Other)</language> + <language type="pag">Pangasinan</language> + <language type="pal">Pahlavi</language> + <language type="pam">Pampanga</language> + <language type="pap">Papiamento</language> + <language type="pau">Palauan</language> + <language type="peo">Old Persian</language> + <language type="phi">Philippine (Other)</language> + <language type="phn">Phoenician</language> + <language type="pi">Pali</language> + <language type="pl">Polish</language> + <language type="pon">Pohnpeian</language> + <language type="pra">Prakrit Languages</language> + <language type="pro">Old Provençal</language> + <language type="ps" references="RP1">Pashto</language> + <language type="ps" alt="variant">Pushto</language> + <language type="pt">Portuguese</language> + <language type="pt_BR">Brazilian Portuguese</language> + <language type="qu">Quechua</language> + <language type="raj">Rajasthani</language> + <language type="rap">Rapanui</language> + <language type="rar">Rarotongan</language> + <language type="rm">Rhaeto-Romance</language> + <language type="rn">Rundi</language> + <language type="ro">Romanian</language> + <language type="roa">Romance (Other)</language> + <language type="rom">Romany</language> + <language type="root">Root</language> + <language type="ru">Russian</language> + <language type="rup">Aromanian</language> + <language type="rw">Kinyarwanda</language> + <language type="sa">Sanskrit</language> + <language type="sad">Sandawe</language> + <language type="sah">Yakut</language> + <language type="sai">South American Indian (Other)</language> + <language type="sal">Salishan languages</language> + <language type="sam">Samaritan Aramaic</language> + <language type="sas">Sasak</language> + <language type="sat">Santali</language> + <language type="sc">Sardinian</language> + <language type="scn">Sicilian</language> + <language type="sco">Scots</language> + <language type="sd">Sindhi</language> + <language type="se">Northern Sami</language> + <language type="sel">Selkup</language> + <language type="sem">Semitic (Other)</language> + <language type="sg">Sango</language> + <language type="sga">Old Irish</language> + <language type="sgn">Sign Languages</language> + <language type="sh">Serbo-Croatian</language> + <language type="shn">Shan</language> + <language type="si">Sinhalese</language> + <language type="sid">Sidamo</language> + <language type="sio">Siouan Languages</language> + <language type="sit">Sino-Tibetan (Other)</language> + <language type="sk">Slovak</language> + <language type="sl">Slovenian</language> + <language type="sla">Slavic (Other)</language> + <language type="sm">Samoan</language> + <language type="sma">Southern Sami</language> + <language type="smi">Sami languages (Other)</language> + <language type="smj">Lule Sami</language> + <language type="smn">Inari Sami</language> + <language type="sms">Skolt Sami</language> + <language type="sn">Shona</language> + <language type="snk">Soninke</language> + <language type="so">Somali</language> + <language type="sog">Sogdien</language> + <language type="son">Songhai</language> + <language type="sq">Albanian</language> + <language type="sr">Serbian</language> + <language type="srn">Sranan Tongo</language> + <language type="srr">Serer</language> + <language type="ss">Swati</language> + <language type="ssa">Nilo-Saharan (Other)</language> + <language type="st">Southern Sotho</language> + <language type="su">Sundanese</language> + <language type="suk">Sukuma</language> + <language type="sus">Susu</language> + <language type="sux">Sumerian</language> + <language type="sv">Swedish</language> + <language type="sw">Swahili</language> + <language type="syr">Syriac</language> + <language type="ta">Tamil</language> + <language type="tai">Tai (Other)</language> + <language type="te">Telugu</language> + <language type="tem">Timne</language> + <language type="ter">Tereno</language> + <language type="tet">Tetum</language> + <language type="tg">Tajik</language> + <language type="th">Thai</language> + <language type="ti">Tigrinya</language> + <language type="tig">Tigre</language> + <language type="tiv">Tiv</language> + <language type="tk">Turkmen</language> + <language type="tkl">Tokelau</language> + <language type="tl">Tagalog</language> + <language type="tlh">Klingon</language> + <language type="tli">Tlingit</language> + <language type="tmh">Tamashek</language> + <language type="tn">Tswana</language> + <language type="to">Tonga (Tonga Islands)</language> + <language type="tog">Tonga (Nyasa)</language> + <language type="tpi">Tok Pisin</language> + <language type="tr">Turkish</language> + <language type="ts">Tsonga</language> + <language type="tsi">Tsimshian</language> + <language type="tt">Tatar</language> + <language type="tum">Tumbuka</language> + <language type="tup">Tupi languages</language> + <language type="tut">Altaic (Other)</language> + <language type="tvl">Tuvalu</language> + <language type="tw">Twi</language> + <language type="ty">Tahitian</language> + <language type="tyv">Tuvinian</language> + <language type="udm">Udmurt</language> + <language type="ug">Uighur</language> + <language type="uga">Ugaritic</language> + <language type="uk">Ukrainian</language> + <language type="umb">Umbundu</language> + <language type="und">Unknown or Invalid Language</language> + <language type="ur">Urdu</language> + <language type="uz">Uzbek</language> + <language type="vai">Vai</language> + <language type="ve">Venda</language> + <language type="vi">Vietnamese</language> + <language type="vo">Volapük</language> + <language type="vot">Votic</language> + <language type="wa">Walloon</language> + <language type="wak">Wakashan Languages</language> + <language type="wal">Walamo</language> + <language type="war">Waray</language> + <language type="was">Washo</language> + <language type="wen">Sorbian Languages</language> + <language type="wo">Wolof</language> + <language type="xal">Kalmyk</language> + <language type="xh">Xhosa</language> + <language type="yao">Yao</language> + <language type="yap">Yapese</language> + <language type="yi">Yiddish</language> + <language type="yo">Yoruba</language> + <language type="ypk">Yupik Languages</language> + <language type="za">Zhuang</language> + <language type="zap">Zapotec</language> + <language type="zen">Zenaga</language> + <language type="zh">Chinese</language> + <language type="zh_Hans">Simplified Chinese</language> + <language type="zh_Hant">Traditional Chinese</language> + <language type="znd">Zande</language> + <language type="zu">Zulu</language> + <language type="zun">Zuni</language> + <language type="zza">Zaza</language> + <language type="zxx">No linguistic content</language> + </languages> + <scripts> + <script type="Arab">Arabic</script> + <script type="Armn">Armenian</script> + <script type="Bali">Balinese</script> + <script type="Batk">Batak</script> + <script type="Beng">Bengali</script> + <script type="Blis">Blissymbols</script> + <script type="Bopo">Bopomofo</script> + <script type="Brah">Brahmi</script> + <script type="Brai">Braille</script> + <script type="Bugi">Buginese</script> + <script type="Buhd">Buhid</script> + <script type="Cans">Unified Canadian Aboriginal Symbols</script> + <script type="Cari">Carian</script> + <script type="Cham" references="R1">Cham</script> + <script type="Cher">Cherokee</script> + <script type="Cirt">Cirth</script> + <script type="Copt">Coptic</script> + <script type="Cprt">Cypriot</script> + <script type="Cyrl">Cyrillic</script> + <script type="Cyrs">Cyrillic (Old Church Slavonic variant)</script> + <script type="Deva">Devanagari</script> + <script type="Dsrt">Deseret</script> + <script type="Egyd">Egyptian demotic</script> + <script type="Egyh">Egyptian hieratic</script> + <script type="Egyp">Egyptian hieroglyphs</script> + <script type="Ethi">Ethiopic</script> + <script type="Geok">Khutsuri (Asomtavruli and Nuskhuri)</script> + <script type="Geor">Georgian</script> + <script type="Glag">Glagolitic</script> + <script type="Goth">Gothic</script> + <script type="Grek">Greek</script> + <script type="Gujr">Gujarati</script> + <script type="Guru">Gurmukhi</script> + <script type="Hang">Hangul</script> + <script type="Hani">Han</script> + <script type="Hano">Hanunoo</script> + <script type="Hans">Simplified Han</script> + <script type="Hant">Traditional Han</script> + <script type="Hebr">Hebrew</script> + <script type="Hira">Hiragana</script> + <script type="Hmng">Pahawh Hmong</script> + <script type="Hrkt">Katakana or Hiragana</script> + <script type="Hung">Old Hungarian</script> + <script type="Inds">Indus (Harappan)</script> + <script type="Ital">Old Italic</script> + <script type="Jpan">Japanese</script> + <script type="Java">Javanese</script> + <script type="Kali">Kayah Li</script> + <script type="Kana">Katakana</script> + <script type="Khar">Kharoshthi</script> + <script type="Khmr">Khmer</script> + <script type="Knda">Kannada</script> + <script type="Lana">Lanna</script> + <script type="Laoo">Lao</script> + <script type="Latf">Latin (Fraktur variant)</script> + <script type="Latg">Latin (Gaelic variant)</script> + <script type="Latn">Latin</script> + <script type="Lepc">Lepcha (Róng)</script> + <script type="Limb">Limbu</script> + <script type="Lina">Linear A</script> + <script type="Linb">Linear B</script> + <script type="Lyci">Lycian</script> + <script type="Lydi">Lydian</script> + <script type="Mand">Mandaean</script> + <script type="Maya">Mayan hieroglyphs</script> + <script type="Mero">Meroitic</script> + <script type="Mlym">Malayalam</script> + <script type="Mong">Mongolian</script> + <script type="Mymr">Myanmar</script> + <script type="Nkoo">N’Ko</script> + <script type="Ogam">Ogham</script> + <script type="Olck">Ol Chiki</script> + <script type="Orkh">Orkhon</script> + <script type="Orya">Oriya</script> + <script type="Osma">Osmanya</script> + <script type="Perm">Old Permic</script> + <script type="Phag">Phags-pa</script> + <script type="Phnx">Phoenician</script> + <script type="Plrd">Pollard Phonetic</script> + <script type="Qaai">Inherited</script> + <script type="Rjng">Rejang</script> + <script type="Roro">Rongorongo</script> + <script type="Runr">Runic</script> + <script type="Sara">Sarati</script> + <script type="Saur">Saurashtra</script> + <script type="Sgnw">SignWriting</script> + <script type="Shaw">Shavian</script> + <script type="Sinh">Sinhala</script> + <script type="Sund">Sundanese</script> + <script type="Sylo">Syloti Nagri</script> + <script type="Syrc">Syriac</script> + <script type="Syre">Syriac (Estrangelo variant)</script> + <script type="Syrj">Syriac (Western variant)</script> + <script type="Syrn">Syriac (Eastern variant)</script> + <script type="Tagb">Tagbanwa</script> + <script type="Tale">Tai Le</script> + <script type="Talu">New Tai Lue</script> + <script type="Taml">Tamil</script> + <script type="Telu">Telugu</script> + <script type="Teng">Tengwar</script> + <script type="Tfng">Tifinagh (Berber)</script> + <script type="Tglg">Tagalog</script> + <script type="Thaa">Thaana</script> + <script type="Thai" references="R1">Thai</script> + <script type="Tibt">Tibetan</script> + <script type="Ugar">Ugaritic</script> + <script type="Vaii">Vai</script> + <script type="Visp">Visible Speech</script> + <script type="Xpeo">Old Persian</script> + <script type="Xsux">Sumero-Akkadian Cuneiform</script> + <script type="Yiii">Yi</script> + <script type="Zxxx">Unwritten</script> + <script type="Zyyy">Common</script> + <script type="Zzzz">Unknown or Invalid Script</script> + </scripts> + <territories> + <territory type="001">World</territory> + <!-- UN codes --> + <territory type="002">Africa</territory> + <territory type="003">North America</territory> + <territory type="005">South America</territory> + <territory type="009">Oceania</territory> + <territory type="011">Western Africa</territory> + <territory type="013">Central America</territory> + <territory type="014">Eastern Africa</territory> + <territory type="015">Northern Africa</territory> + <territory type="017">Middle Africa</territory> + <territory type="018">Southern Africa</territory> + <territory type="019">Americas</territory> + <territory type="021">Northern America</territory> + <territory type="029">Caribbean</territory> + <territory type="030">Eastern Asia</territory> + <territory type="034">Southern Asia</territory> + <territory type="035">South-Eastern Asia</territory> + <territory type="039">Southern Europe</territory> + <territory type="053">Australia and New Zealand</territory> + <territory type="054">Melanesia</territory> + <territory type="057">Micronesian Region</territory> + <territory type="061">Polynesia</territory> + <territory type="062">South-Central Asia</territory> + <territory type="142">Asia</territory> + <territory type="143">Central Asia</territory> + <territory type="145">Western Asia</territory> + <territory type="150">Europe</territory> + <territory type="151">Eastern Europe</territory> + <territory type="154">Northern Europe</territory> + <territory type="155">Western Europe</territory> + <territory type="172">Commonwealth of Independent States</territory> + <territory type="200">Czechoslovakia</territory> + <territory type="419">Latin America and the Caribbean</territory> + <territory type="830">Channel Islands</territory> + <territory type="AD">Andorra</territory> + <territory type="AE">United Arab Emirates</territory> + <territory type="AF">Afghanistan</territory> + <territory type="AG">Antigua and Barbuda</territory> + <territory type="AI">Anguilla</territory> + <territory type="AL">Albania</territory> + <territory type="AM">Armenia</territory> + <territory type="AN">Netherlands Antilles</territory> + <territory type="AO">Angola</territory> + <territory type="AQ">Antarctica</territory> + <territory type="AR">Argentina</territory> + <territory type="AS">American Samoa</territory> + <territory type="AT">Austria</territory> + <territory type="AU">Australia</territory> + <territory type="AW">Aruba</territory> + <territory type="AX">Aland Islands</territory> + <territory type="AZ">Azerbaijan</territory> + <territory type="BA">Bosnia and Herzegovina</territory> + <territory type="BB">Barbados</territory> + <territory type="BD">Bangladesh</territory> + <territory type="BE">Belgium</territory> + <territory type="BF">Burkina Faso</territory> + <territory type="BG">Bulgaria</territory> + <territory type="BH">Bahrain</territory> + <territory type="BI">Burundi</territory> + <territory type="BJ">Benin</territory> + <territory type="BM">Bermuda</territory> + <territory type="BN">Brunei</territory> + <territory type="BO">Bolivia</territory> + <territory type="BQ">British Antarctic Territory</territory> + <territory type="BR">Brazil</territory> + <territory type="BS">Bahamas</territory> + <territory type="BT">Bhutan</territory> + <territory type="BV">Bouvet Island</territory> + <territory type="BW">Botswana</territory> + <territory type="BY">Belarus</territory> + <territory type="BZ">Belize</territory> + <territory type="CA">Canada</territory> + <territory type="CC">Cocos (Keeling) Islands</territory> + <territory type="CD">Congo (Kinshasa)</territory> + <territory type="CF">Central African Republic</territory> + <territory type="CG">Congo (Brazzaville)</territory> + <territory type="CH">Switzerland</territory> + <territory type="CI">Ivory Coast</territory> + <territory type="CK">Cook Islands</territory> + <territory type="CL">Chile</territory> + <territory type="CM">Cameroon</territory> + <territory type="CN">China</territory> + <territory type="CO">Colombia</territory> + <territory type="CR">Costa Rica</territory> + <territory type="CS">Serbia And Montenegro</territory> + <territory type="CT">Canton and Enderbury Islands</territory> + <territory type="CU">Cuba</territory> + <territory type="CV">Cape Verde</territory> + <territory type="CX">Christmas Island</territory> + <territory type="CY">Cyprus</territory> + <territory type="CZ">Czech Republic</territory> + <territory type="DD">East Germany</territory> + <territory type="DE">Germany</territory> + <territory type="DJ">Djibouti</territory> + <territory type="DK">Denmark</territory> + <territory type="DM">Dominica</territory> + <territory type="DO">Dominican Republic</territory> + <territory type="DZ">Algeria</territory> + <territory type="EC">Ecuador</territory> + <territory type="EE">Estonia</territory> + <territory type="EG">Egypt</territory> + <territory type="EH">Western Sahara</territory> + <territory type="ER">Eritrea</territory> + <territory type="ES">Spain</territory> + <territory type="ET">Ethiopia</territory> + <territory type="FI">Finland</territory> + <territory type="FJ">Fiji</territory> + <territory type="FK">Falkland Islands</territory> + <territory type="FM">Micronesia</territory> + <territory type="FO">Faroe Islands</territory> + <territory type="FQ">French Southern and Antarctic Territories</territory> + <territory type="FR">France</territory> + <territory type="FX">Metropolitan France</territory> + <territory type="GA">Gabon</territory> + <territory type="GB">United Kingdom</territory> + <territory type="GD">Grenada</territory> + <territory type="GE">Georgia</territory> + <territory type="GF">French Guiana</territory> + <territory type="GG">Guernsey</territory> + <territory type="GH">Ghana</territory> + <territory type="GI">Gibraltar</territory> + <territory type="GL">Greenland</territory> + <territory type="GM">Gambia</territory> + <territory type="GN">Guinea</territory> + <territory type="GP">Guadeloupe</territory> + <territory type="GQ">Equatorial Guinea</territory> + <territory type="GR">Greece</territory> + <territory type="GS">South Georgia and the South Sandwich Islands</territory> + <territory type="GT">Guatemala</territory> + <territory type="GU">Guam</territory> + <territory type="GW">Guinea-Bissau</territory> + <territory type="GY">Guyana</territory> + <territory type="HK">Hong Kong SAR China</territory> + <territory type="HM">Heard Island and McDonald Islands</territory> + <territory type="HN">Honduras</territory> + <territory type="HR">Croatia</territory> + <territory type="HT">Haiti</territory> + <territory type="HU">Hungary</territory> + <territory type="ID">Indonesia</territory> + <territory type="IE">Ireland</territory> + <territory type="IL">Israel</territory> + <territory type="IM">Isle of Man</territory> + <territory type="IN">India</territory> + <territory type="IO">British Indian Ocean Territory</territory> + <territory type="IQ">Iraq</territory> + <territory type="IR">Iran</territory> + <territory type="IS">Iceland</territory> + <territory type="IT">Italy</territory> + <territory type="JE">Jersey</territory> + <territory type="JM">Jamaica</territory> + <territory type="JO">Jordan</territory> + <territory type="JP">Japan</territory> + <territory type="JT">Johnston Island</territory> + <territory type="KE">Kenya</territory> + <territory type="KG">Kyrgyzstan</territory> + <territory type="KH">Cambodia</territory> + <territory type="KI">Kiribati</territory> + <territory type="KM">Comoros</territory> + <territory type="KN">Saint Kitts and Nevis</territory> + <territory type="KP">North Korea</territory> + <territory type="KR">South Korea</territory> + <territory type="KW">Kuwait</territory> + <territory type="KY">Cayman Islands</territory> + <territory type="KZ">Kazakhstan</territory> + <territory type="LA">Laos</territory> + <territory type="LB">Lebanon</territory> + <territory type="LC">Saint Lucia</territory> + <territory type="LI">Liechtenstein</territory> + <territory type="LK">Sri Lanka</territory> + <territory type="LR">Liberia</territory> + <territory type="LS">Lesotho</territory> + <territory type="LT">Lithuania</territory> + <territory type="LU">Luxembourg</territory> + <territory type="LV">Latvia</territory> + <territory type="LY">Libya</territory> + <territory type="MA">Morocco</territory> + <territory type="MC">Monaco</territory> + <territory type="MD">Moldova</territory> + <territory type="ME">Montenegro</territory> + <territory type="MG">Madagascar</territory> + <territory type="MH">Marshall Islands</territory> + <territory type="MI">Midway Islands</territory> + <territory type="MK">Macedonia</territory> + <territory type="ML">Mali</territory> + <territory type="MM">Myanmar</territory> + <territory type="MN">Mongolia</territory> + <territory type="MO">Macao SAR China</territory> + <territory type="MP">Northern Mariana Islands</territory> + <territory type="MQ">Martinique</territory> + <territory type="MR">Mauritania</territory> + <territory type="MS">Montserrat</territory> + <territory type="MT">Malta</territory> + <territory type="MU">Mauritius</territory> + <territory type="MV">Maldives</territory> + <territory type="MW">Malawi</territory> + <territory type="MX">Mexico</territory> + <territory type="MY">Malaysia</territory> + <territory type="MZ">Mozambique</territory> + <territory type="NA">Namibia</territory> + <territory type="NC">New Caledonia</territory> + <territory type="NE">Niger</territory> + <territory type="NF">Norfolk Island</territory> + <territory type="NG">Nigeria</territory> + <territory type="NI">Nicaragua</territory> + <territory type="NL">Netherlands</territory> + <territory type="NO">Norway</territory> + <territory type="NP">Nepal</territory> + <territory type="NQ">Dronning Maud Land</territory> + <territory type="NR">Nauru</territory> + <territory type="NT">Neutral Zone</territory> + <territory type="NU">Niue</territory> + <territory type="NZ">New Zealand</territory> + <territory type="OM">Oman</territory> + <territory type="PA">Panama</territory> + <territory type="PC">Pacific Islands Trust Territory</territory> + <territory type="PE">Peru</territory> + <territory type="PF">French Polynesia</territory> + <territory type="PG">Papua New Guinea</territory> + <territory type="PH">Philippines</territory> + <territory type="PK">Pakistan</territory> + <territory type="PL">Poland</territory> + <territory type="PM">Saint Pierre and Miquelon</territory> + <territory type="PN">Pitcairn</territory> + <territory type="PR">Puerto Rico</territory> + <territory type="PS">Palestinian Territory</territory> + <territory type="PT">Portugal</territory> + <territory type="PU">U.S. Miscellaneous Pacific Islands</territory> + <territory type="PW">Palau</territory> + <territory type="PY">Paraguay</territory> + <territory type="PZ">Panama Canal Zone</territory> + <territory type="QA">Qatar</territory> + <territory type="QO">Outlying Oceania</territory> + <territory type="QU">European Union</territory> + <territory type="RE">Reunion</territory> + <territory type="RO">Romania</territory> + <territory type="RS">Serbia</territory> + <territory type="RU">Russia</territory> + <territory type="RW">Rwanda</territory> + <territory type="SA">Saudi Arabia</territory> + <territory type="SB">Solomon Islands</territory> + <territory type="SC">Seychelles</territory> + <territory type="SD">Sudan</territory> + <territory type="SE">Sweden</territory> + <territory type="SG">Singapore</territory> + <territory type="SH">Saint Helena</territory> + <territory type="SI">Slovenia</territory> + <territory type="SJ">Svalbard and Jan Mayen</territory> + <territory type="SK">Slovakia</territory> + <territory type="SL">Sierra Leone</territory> + <territory type="SM">San Marino</territory> + <territory type="SN">Senegal</territory> + <territory type="SO">Somalia</territory> + <territory type="SR">Suriname</territory> + <territory type="ST">Sao Tome and Principe</territory> + <territory type="SU">Union of Soviet Socialist Republics</territory> + <territory type="SV">El Salvador</territory> + <territory type="SY">Syria</territory> + <territory type="SZ">Swaziland</territory> + <territory type="TC">Turks and Caicos Islands</territory> + <territory type="TD">Chad</territory> + <territory type="TF">French Southern Territories</territory> + <territory type="TG">Togo</territory> + <territory type="TH">Thailand</territory> + <territory type="TJ">Tajikistan</territory> + <territory type="TK">Tokelau</territory> + <territory type="TL">East Timor</territory> + <territory type="TM">Turkmenistan</territory> + <territory type="TN">Tunisia</territory> + <territory type="TO">Tonga</territory> + <territory type="TR">Turkey</territory> + <territory type="TT">Trinidad and Tobago</territory> + <territory type="TV">Tuvalu</territory> + <territory type="TW">Taiwan</territory> + <territory type="TZ">Tanzania</territory> + <territory type="UA">Ukraine</territory> + <territory type="UG">Uganda</territory> + <territory type="UM">United States Minor Outlying Islands</territory> + <territory type="US">United States</territory> + <territory type="UY">Uruguay</territory> + <territory type="UZ">Uzbekistan</territory> + <territory type="VA">Vatican</territory> + <territory type="VC">Saint Vincent and the Grenadines</territory> + <territory type="VD">North Vietnam</territory> + <territory type="VE">Venezuela</territory> + <territory type="VG">British Virgin Islands</territory> + <territory type="VI">U.S. Virgin Islands</territory> + <territory type="VN">Vietnam</territory> + <territory type="VU">Vanuatu</territory> + <territory type="WF">Wallis and Futuna</territory> + <territory type="WK">Wake Island</territory> + <territory type="WS">Samoa</territory> + <territory type="YD">People's Democratic Republic of Yemen</territory> + <territory type="YE">Yemen</territory> + <territory type="YT">Mayotte</territory> + <territory type="ZA">South Africa</territory> + <territory type="ZM">Zambia</territory> + <territory type="ZW">Zimbabwe</territory> + <territory type="ZZ">Unknown or Invalid Region</territory> + </territories> + <variants> + <variant type="1901">Traditional German orthography</variant> + <variant type="1996">German orthography of 1996</variant> + <variant type="BOONT">Boontling</variant> + <variant type="AREVELA">Eastern Armenian</variant> + <variant type="AREVMDA">Western Armenian</variant> + <variant type="GAULISH">Gaulish</variant> + <variant type="GUOYU">Mandarin or Standard Chinese</variant> + <variant type="HAKKA">Hakka</variant> + <variant type="LOJBAN">Lojban</variant> + <variant type="NEDIS">Natisone dialect</variant> + <variant type="POLYTONI">Polytonic</variant> + <variant type="POSIX">Computer</variant> + <variant type="REVISED">Revised Orthography</variant> + <variant type="ROZAJ">Resian</variant> + <variant type="SAAHO">Saho</variant> + <variant type="SCOUSE">Scouse</variant> + <variant type="XIANG">Xiang or Hunanese</variant> + </variants> + <keys> + <key type="calendar">Calendar</key> + <key type="collation">Collation</key> + <key type="currency">Currency</key> + </keys> + <types> + <type type="big5han" key="collation">Traditional Chinese (Big5)</type> + <type type="buddhist" key="calendar">Buddhist Calendar</type> + <type type="chinese" key="calendar">Chinese Calendar</type> + <type type="direct" key="collation">Direct Order</type> + <type type="gb2312han" key="collation">Simplified Chinese (GB2312)</type> + <type type="gregorian" key="calendar">Gregorian Calendar</type> + <type type="hebrew" key="calendar">Hebrew Calendar</type> + <type type="islamic" key="calendar">Islamic Calendar</type> + <type type="islamic-civil" key="calendar">Islamic-Civil Calendar</type> + <type type="japanese" key="calendar">Japanese Calendar</type> + <type type="phonebook" key="collation">Phonebook Order</type> + <type type="pinyin" key="collation">Pinyin Order</type> + <type type="stroke" key="collation">Stroke Order</type> + <type type="traditional" key="collation">Traditional</type> + </types> + </localeDisplayNames> + <characters> + <exemplarCharacters>[a-z]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[á à ă â å ä ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ß ú ù ŭ û ü ū ÿ]</exemplarCharacters> + </characters> + <delimiters> + <quotationStart>‘</quotationStart> + <quotationEnd>’</quotationEnd> + <alternateQuotationStart>“</alternateQuotationStart> + <alternateQuotationEnd>”</alternateQuotationEnd> + </delimiters> + <dates> + <calendars> + <calendar type="gregorian"> + <months> + <monthContext type="format"> + <monthWidth type="abbreviated"> + <month type="1">Jan</month> + <month type="2">Feb</month> + <month type="3">Mar</month> + <month type="4">Apr</month> + <month type="5">May</month> + <month type="6">Jun</month> + <month type="7">Jul</month> + <month type="8">Aug</month> + <month type="9">Sep</month> + <month type="10">Oct</month> + <month type="11">Nov</month> + <month type="12">Dec</month> + </monthWidth> + <monthWidth type="wide"> + <month type="1">January</month> + <month type="2">February</month> + <month type="3">March</month> + <month type="4">April</month> + <month type="5">May</month> + <month type="6">June</month> + <month type="7">July</month> + <month type="8">August</month> + <month type="9">September</month> + <month type="10">October</month> + <month type="11">November</month> + <month type="12">December</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="1">J</month> + <month type="2">F</month> + <month type="3">M</month> + <month type="4">A</month> + <month type="5">M</month> + <month type="6">J</month> + <month type="7">J</month> + <month type="8">A</month> + <month type="9">S</month> + <month type="10">O</month> + <month type="11">N</month> + <month type="12">D</month> + </monthWidth> + </monthContext> + </months> + <days> + <dayContext type="format"> + <dayWidth type="abbreviated"> + <day type="sun">Sun</day> + <day type="mon">Mon</day> + <day type="tue">Tue</day> + <day type="wed">Wed</day> + <day type="thu">Thu</day> + <day type="fri">Fri</day> + <day type="sat">Sat</day> + </dayWidth> + <dayWidth type="wide"> + <day type="sun">Sunday</day> + <day type="mon">Monday</day> + <day type="tue">Tuesday</day> + <day type="wed">Wednesday</day> + <day type="thu">Thursday</day> + <day type="fri">Friday</day> + <day type="sat">Saturday</day> + </dayWidth> + </dayContext> + <dayContext type="stand-alone"> + <dayWidth type="narrow"> + <day type="sun">S</day> + <day type="mon">M</day> + <day type="tue">T</day> + <day type="wed">W</day> + <day type="thu">T</day> + <day type="fri">F</day> + <day type="sat">S</day> + </dayWidth> + </dayContext> + </days> + <quarters> + <quarterContext type="format"> + <quarterWidth type="wide"> + <quarter type="1">1st quarter</quarter> + <quarter type="2">2nd quarter</quarter> + <quarter type="3">3rd quarter</quarter> + <quarter type="4">4th quarter</quarter> + </quarterWidth> + </quarterContext> + </quarters> + <eras> + <eraNames> + <era type="0">Before Christ</era> + <era type="1">Anno Domini</era> + </eraNames> + <eraAbbr> + <era type="0">BC</era> + <era type="1">AD</era> + </eraAbbr> + </eras> + <dateFormats> + <dateFormatLength type="full"> + <dateFormat> + <pattern>EEEE, MMMM d, yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="long"> + <dateFormat> + <pattern>MMMM d, yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="medium"> + <dateFormat> + <pattern>MMM d, yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="short"> + <dateFormat> + <pattern>M/d/yy</pattern> + </dateFormat> + </dateFormatLength> + </dateFormats> + <timeFormats> + <timeFormatLength type="full"> + <timeFormat> + <pattern>h:mm:ss a v</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="long"> + <timeFormat> + <pattern>h:mm:ss a z</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="medium"> + <timeFormat> + <pattern>h:mm:ss a</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="short"> + <timeFormat> + <pattern>h:mm a</pattern> + </timeFormat> + </timeFormatLength> + </timeFormats> + <dateTimeFormats> + <availableFormats> + <dateFormatItem id="HHmm" draft="provisional">HH:mm</dateFormatItem> + <dateFormatItem id="HHmmss" draft="provisional">HH:mm:ss</dateFormatItem> + <dateFormatItem id="MMMMd" draft="provisional">MMMM d</dateFormatItem> + <dateFormatItem id="Md" draft="provisional">M/d</dateFormatItem> + <dateFormatItem id="mmss" draft="provisional">mm:ss</dateFormatItem> + <dateFormatItem id="yyMM" draft="provisional">MM/yy</dateFormatItem> + <dateFormatItem id="yyQQQQ" draft="provisional">QQQQ yy</dateFormatItem> + <dateFormatItem id="yyyyMMM" draft="provisional">MMM yyyy</dateFormatItem> + </availableFormats> + </dateTimeFormats> + <fields> + <field type="day"> + <relative type="0">Today</relative> + <relative type="1">Tomorrow</relative> + <relative type="-1">Yesterday</relative> + </field> + <field type="dayperiod"> + <displayName>AM/PM</displayName> + </field> + </fields> + </calendar> + </calendars> + <timeZoneNames> + <zone type="America/Vancouver"> + <long> + <generic>Pacific Time (CA)</generic> + <standard>Pacific Standard Time (CA)</standard> + <daylight>Pacific Daylight Time (CA)</daylight> + </long> + <short> + <generic>PT (CA)</generic> + <standard>PST (CA)</standard> + <daylight>PDT (CA)</daylight> + </short> + </zone> + <zone type="America/Edmonton"> + <long> + <generic>Mountain Time (CA)</generic> + <standard>Mountain Standard Time (CA)</standard> + <daylight>Mountain Daylight Time (CA)</daylight> + </long> + <short> + <generic>MT (CA)</generic> + <standard>MST (CA)</standard> + <daylight>MDT (CA)</daylight> + </short> + </zone> + <zone type="America/Winnipeg"> + <long> + <generic>Central Time (CA)</generic> + <standard>Central Standard Time (CA)</standard> + <daylight>Central Daylight Time (CA)</daylight> + </long> + <short> + <generic>CT (CA)</generic> + <standard>CST (CA)</standard> + <daylight>CDT (CA)</daylight> + </short> + </zone> + <zone type="America/Montreal"> + <long> + <generic>Eastern Time (CA)</generic> + <standard>Eastern Standard Time (CA)</standard> + <daylight>Eastern Daylight Time (CA)</daylight> + </long> + <short> + <generic>ET (CA)</generic> + <standard>EST (CA)</standard> + <daylight>EDT (CA)</daylight> + </short> + </zone> + <zone type="America/Halifax"> + <long> + <generic>Atlantic Time</generic> + <standard>Atlantic Standard Time</standard> + <daylight>Atlantic Daylight Time</daylight> + </long> + <short> + <generic>AT</generic> + <standard>AST</standard> + <daylight>ADT</daylight> + </short> + </zone> + <zone type="America/St_Johns"> + <long> + <generic>Newfoundland Time</generic> + <standard>Newfoundland Standard Time</standard> + <daylight>Newfoundland Daylight Time</daylight> + </long> + <short> + <generic>NT</generic> + <standard>NST</standard> + <daylight>NDT</daylight> + </short> + <exemplarCity>St. John’s</exemplarCity> + </zone> + <zone type="Asia/Shanghai"> + <long> + <standard>China Standard Time</standard> + <daylight>China Daylight Time</daylight> + </long> + </zone> + <zone type="Europe/Paris"> + <long> + <generic>Central European Time</generic> + <standard>Central European Standard Time</standard> + <daylight>Central European Daylight Time</daylight> + </long> + <short> + <generic>CET</generic> + <standard>CEST</standard> + <daylight>CEDT</daylight> + </short> + <exemplarCity>Paris</exemplarCity> + </zone> + <zone type="Europe/London"> + <long> + <standard>Greenwich Mean Time</standard> + <daylight>British Summer Time</daylight> + </long> + <short> + <standard>GMT</standard> + <daylight>BST</daylight> + </short> + </zone> + <zone type="Europe/Dublin"> + <long> + <standard>Greenwich Mean Time</standard> + <daylight>Irish Summer Time</daylight> + </long> + <short> + <standard>GMT</standard> + <daylight>IST</daylight> + </short> + <exemplarCity>Dublin</exemplarCity> + </zone> + <!-- Note: the following is known to be sparse, and needs to be improved in the future --> + <zone type="Asia/Jerusalem"> + <long> + <standard>Israel Standard Time</standard> + <daylight>Israel Daylight Time</daylight> + </long> + <exemplarCity>Jerusalem</exemplarCity> + </zone> + <zone type="Asia/Tokyo"> + <long> + <standard>Japan Standard Time</standard> + <daylight>Japan Daylight Time</daylight> + </long> + <short> + <standard>JST</standard> + <daylight>JDT</daylight> + </short> + <exemplarCity>Tokyo</exemplarCity> + </zone> + <zone type="Europe/Bucharest"> + <long> + <standard>Eastern European Standard Time</standard> + <daylight>Eastern European Daylight Time</daylight> + </long> + <short> + <standard>EET</standard> + <daylight>EEST</daylight> + </short> + <exemplarCity>Bucharest</exemplarCity> + </zone> + <zone type="Asia/Singapore"> + <long> + <standard>Singapore Standard Time</standard> + <daylight>Singapore Standard Time</daylight> + </long> + <short> + <standard>SST</standard> + <daylight>SST</daylight> + </short> + <exemplarCity>Singapore</exemplarCity> + </zone> + <zone type="Pacific/Honolulu"> + <long> + <generic>Hawaii Time</generic> + <standard>Hawaii Standard Time</standard> + <daylight>Hawaii Daylight Time</daylight> + </long> + <short> + <generic>HT</generic> + <standard>HST</standard> + <daylight>HDT</daylight> + </short> + </zone> + <zone type="America/Anchorage"> + <long> + <generic>Alaska Time</generic> + <standard>Alaska Standard Time</standard> + <daylight>Alaska Daylight Time</daylight> + </long> + <short> + <generic>AKT</generic> + <standard>AKST</standard> + </short> + </zone> + <!-- Note: zones that don't use daylight time need further work --> + <zone type="America/Los_Angeles"> + <long> + <generic>Pacific Time</generic> + <standard>Pacific Standard Time</standard> + <daylight>Pacific Daylight Time</daylight> + </long> + <short> + <generic>PT</generic> + <standard>PST</standard> + <daylight>PDT</daylight> + </short> + </zone> + <zone type="America/Denver"> + <long> + <generic>Mountain Time</generic> + <standard>Mountain Standard Time</standard> + <daylight>Mountain Daylight Time</daylight> + </long> + <short> + <generic>MT</generic> + <standard>MST</standard> + <daylight>MDT</daylight> + </short> + </zone> + <zone type="America/Chicago"> + <long> + <generic>Central Time</generic> + <standard>Central Standard Time</standard> + <daylight>Central Daylight Time</daylight> + </long> + <short> + <generic>CT</generic> + <standard>CST</standard> + <daylight>CDT</daylight> + </short> + </zone> + <zone type="America/New_York"> + <long> + <generic>Eastern Time</generic> + <standard>Eastern Standard Time</standard> + <daylight>Eastern Daylight Time</daylight> + </long> + <short> + <generic>ET</generic> + <standard>EST</standard> + <daylight>EDT</daylight> + </short> + </zone> + </timeZoneNames> + </dates> + <numbers> + <symbols> + <decimal>.</decimal> + <group>,</group> + </symbols> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>¤#,##0.00</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + <currencies> + <currency type="ADP"> + <displayName>Andorran Peseta</displayName> + </currency> + <currency type="AED"> + <displayName>United Arab Emirates Dirham</displayName> + </currency> + <currency type="AFA"> + <displayName>Afghani (1927-2002)</displayName> + </currency> + <currency type="AFN"> + <displayName>Afghani</displayName> + <symbol>Af</symbol> + </currency> + <currency type="ALL"> + <displayName>Albanian Lek</displayName> + <symbol>lek</symbol> + </currency> + <currency type="AMD"> + <displayName>Armenian Dram</displayName> + <symbol>dram</symbol> + </currency> + <currency type="ANG"> + <displayName>Netherlands Antillan Guilder</displayName> + <symbol>NA f.</symbol> + </currency> + <currency type="AOA"> + <displayName>Angolan Kwanza</displayName> + </currency> + <currency type="AOK"> + <displayName>Angolan Kwanza (1977-1990)</displayName> + </currency> + <currency type="AON"> + <displayName>Angolan New Kwanza (1990-2000)</displayName> + </currency> + <currency type="AOR"> + <displayName>Angolan Kwanza Reajustado (1995-1999)</displayName> + </currency> + <currency type="ARA"> + <displayName>Argentine Austral</displayName> + </currency> + <currency type="ARP"> + <displayName>Argentine Peso (1983-1985)</displayName> + </currency> + <currency type="ARS"> + <displayName>Argentine Peso</displayName> + <symbol>Arg$</symbol> + </currency> + <currency type="ATS"> + <displayName>Austrian Schilling</displayName> + </currency> + <currency type="AUD"> + <displayName>Australian Dollar</displayName> + <symbol>$A</symbol> + </currency> + <currency type="AWG"> + <displayName>Aruban Guilder</displayName> + </currency> + <currency type="AZM"> + <displayName>Azerbaijanian Manat (1993-2006)</displayName> + </currency> + <currency type="AZN"> + <displayName>Azerbaijanian Manat</displayName> + </currency> + <currency type="BAD"> + <displayName>Bosnia-Herzegovina Dinar</displayName> + </currency> + <currency type="BAM"> + <displayName>Bosnia-Herzegovina Convertible Mark</displayName> + <symbol>KM</symbol> + </currency> + <currency type="BBD"> + <displayName>Barbados Dollar</displayName> + <symbol>BDS$</symbol> + </currency> + <currency type="BDT"> + <displayName>Bangladesh Taka</displayName> + <symbol>Tk</symbol> + </currency> + <currency type="BEC"> + <displayName>Belgian Franc (convertible)</displayName> + </currency> + <currency type="BEF"> + <displayName>Belgian Franc</displayName> + <symbol>BF</symbol> + </currency> + <currency type="BEL"> + <displayName>Belgian Franc (financial)</displayName> + </currency> + <currency type="BGL"> + <displayName>Bulgarian Hard Lev</displayName> + <symbol>lev</symbol> + </currency> + <currency type="BGN"> + <displayName>Bulgarian New Lev</displayName> + </currency> + <currency type="BHD"> + <displayName>Bahraini Dinar</displayName> + <symbol>BD</symbol> + </currency> + <currency type="BIF"> + <displayName>Burundi Franc</displayName> + <symbol>Fbu</symbol> + </currency> + <currency type="BMD"> + <displayName>Bermudan Dollar</displayName> + <symbol>Ber$</symbol> + </currency> + <currency type="BND"> + <displayName>Brunei Dollar</displayName> + </currency> + <currency type="BOB"> + <displayName>Boliviano</displayName> + <symbol>Bs</symbol> + </currency> + <currency type="BOP"> + <displayName>Bolivian Peso</displayName> + </currency> + <currency type="BOV"> + <displayName>Bolivian Mvdol</displayName> + </currency> + <currency type="BRB"> + <displayName>Brazilian Cruzeiro Novo (1967-1986)</displayName> + </currency> + <currency type="BRC"> + <displayName>Brazilian Cruzado</displayName> + </currency> + <currency type="BRE"> + <displayName>Brazilian Cruzeiro (1990-1993)</displayName> + </currency> + <currency type="BRL"> + <displayName>Brazilian Real</displayName> + <symbol>R$</symbol> + </currency> + <currency type="BRN"> + <displayName>Brazilian Cruzado Novo</displayName> + </currency> + <currency type="BRR"> + <displayName>Brazilian Cruzeiro</displayName> + </currency> + <currency type="BSD"> + <displayName>Bahamian Dollar</displayName> + </currency> + <currency type="BTN"> + <displayName>Bhutan Ngultrum</displayName> + <symbol>Nu</symbol> + </currency> + <currency type="BUK"> + <displayName>Burmese Kyat</displayName> + </currency> + <currency type="BWP"> + <displayName>Botswanan Pula</displayName> + </currency> + <currency type="BYB"> + <displayName>Belarussian New Ruble (1994-1999)</displayName> + </currency> + <currency type="BYR"> + <displayName>Belarussian Ruble</displayName> + <symbol>Rbl</symbol> + </currency> + <currency type="BZD"> + <displayName>Belize Dollar</displayName> + <symbol>BZ$</symbol> + </currency> + <currency type="CAD"> + <displayName>Canadian Dollar</displayName> + <symbol>Can$</symbol> + </currency> + <currency type="CDF"> + <displayName>Congolese Franc Congolais</displayName> + </currency> + <currency type="CHE"> + <displayName>WIR Euro</displayName> + </currency> + <currency type="CHF"> + <displayName>Swiss Franc</displayName> + <symbol>SwF</symbol> + </currency> + <currency type="CHW"> + <displayName>WIR Franc</displayName> + </currency> + <currency type="CLF"> + <displayName>Chilean Unidades de Fomento</displayName> + </currency> + <currency type="CLP"> + <displayName>Chilean Peso</displayName> + <symbol>Ch$</symbol> + </currency> + <currency type="CNY"> + <displayName>Chinese Yuan Renminbi</displayName> + <symbol>Y</symbol> + </currency> + <currency type="COP"> + <displayName>Colombian Peso</displayName> + <symbol>Col$</symbol> + </currency> + <currency type="COU"> + <displayName>Unidad de Valor Real</displayName> + </currency> + <currency type="CRC"> + <displayName>Costa Rican Colon</displayName> + <symbol>C</symbol> + </currency> + <currency type="CSD"> + <displayName>Serbian Dinar</displayName> + </currency> + <currency type="CSK"> + <displayName>Czechoslovak Hard Koruna</displayName> + </currency> + <currency type="CUP"> + <displayName>Cuban Peso</displayName> + </currency> + <currency type="CVE"> + <displayName>Cape Verde Escudo</displayName> + <symbol>CVEsc</symbol> + </currency> + <currency type="CYP"> + <displayName>Cyprus Pound</displayName> + <symbol>£C</symbol> + </currency> + <currency type="CZK"> + <displayName>Czech Republic Koruna</displayName> + </currency> + <currency type="DDM"> + <displayName>East German Ostmark</displayName> + </currency> + <currency type="DEM"> + <displayName>Deutsche Mark</displayName> + </currency> + <currency type="DJF"> + <displayName>Djibouti Franc</displayName> + <symbol>DF</symbol> + </currency> + <currency type="DKK"> + <displayName>Danish Krone</displayName> + <symbol>DKr</symbol> + </currency> + <currency type="DOP"> + <displayName>Dominican Peso</displayName> + <symbol>RD$</symbol> + </currency> + <currency type="DZD"> + <displayName>Algerian Dinar</displayName> + <symbol>DA</symbol> + </currency> + <currency type="ECS"> + <displayName>Ecuador Sucre</displayName> + </currency> + <currency type="ECV"> + <displayName>Ecuador Unidad de Valor Constante (UVC)</displayName> + </currency> + <currency type="EEK"> + <displayName>Estonian Kroon</displayName> + </currency> + <currency type="EGP"> + <displayName>Egyptian Pound</displayName> + </currency> + <currency type="EQE"> + <displayName>Ekwele</displayName> + </currency> + <currency type="ERN"> + <displayName>Eritrean Nakfa</displayName> + </currency> + <currency type="ESA"> + <displayName>Spanish Peseta (A account)</displayName> + </currency> + <currency type="ESB"> + <displayName>Spanish Peseta (convertible account)</displayName> + </currency> + <currency type="ESP"> + <displayName>Spanish Peseta</displayName> + <symbol>₧</symbol> + </currency> + <currency type="ETB"> + <displayName>Ethiopian Birr</displayName> + <symbol>Br</symbol> + </currency> + <currency type="EUR"> + <displayName>Euro</displayName> + </currency> + <currency type="FIM"> + <displayName>Finnish Markka</displayName> + </currency> + <currency type="FJD"> + <displayName>Fiji Dollar</displayName> + <symbol>F$</symbol> + </currency> + <currency type="FKP"> + <displayName>Falkland Islands Pound</displayName> + </currency> + <currency type="FRF"> + <displayName>French Franc</displayName> + </currency> + <currency type="GBP"> + <displayName>British Pound Sterling</displayName> + </currency> + <currency type="GEK"> + <displayName>Georgian Kupon Larit</displayName> + </currency> + <currency type="GEL"> + <displayName>Georgian Lari</displayName> + <symbol>lari</symbol> + </currency> + <currency type="GHC"> + <displayName>Ghana Cedi</displayName> + </currency> + <currency type="GIP"> + <displayName>Gibraltar Pound</displayName> + </currency> + <currency type="GMD"> + <displayName>Gambia Dalasi</displayName> + </currency> + <currency type="GNF"> + <displayName>Guinea Franc</displayName> + <symbol>GF</symbol> + </currency> + <currency type="GNS"> + <displayName>Guinea Syli</displayName> + </currency> + <currency type="GQE"> + <displayName>Equatorial Guinea Ekwele Guineana</displayName> + </currency> + <currency type="GRD"> + <displayName>Greek Drachma</displayName> + </currency> + <currency type="GTQ"> + <displayName>Guatemala Quetzal</displayName> + <symbol>Q</symbol> + </currency> + <currency type="GWE"> + <displayName>Portuguese Guinea Escudo</displayName> + </currency> + <currency type="GWP"> + <displayName>Guinea-Bissau Peso</displayName> + </currency> + <currency type="GYD"> + <displayName>Guyana Dollar</displayName> + <symbol>G$</symbol> + </currency> + <currency type="HKD"> + <displayName>Hong Kong Dollar</displayName> + <symbol>HK$</symbol> + </currency> + <currency type="HNL"> + <displayName>Hoduras Lempira</displayName> + <symbol>L</symbol> + </currency> + <currency type="HRD"> + <displayName>Croatian Dinar</displayName> + </currency> + <currency type="HRK"> + <displayName>Croatian Kuna</displayName> + </currency> + <currency type="HTG"> + <displayName>Haitian Gourde</displayName> + </currency> + <currency type="HUF"> + <displayName>Hungarian Forint</displayName> + <symbol>Ft</symbol> + </currency> + <currency type="IDR"> + <displayName>Indonesian Rupiah</displayName> + <symbol>Rp</symbol> + </currency> + <currency type="IEP"> + <displayName>Irish Pound</displayName> + <symbol>IR£</symbol> + </currency> + <currency type="ILP"> + <displayName>Israeli Pound</displayName> + </currency> + <currency type="ILS"> + <displayName>Israeli New Sheqel</displayName> + </currency> + <currency type="INR"> + <displayName>Indian Rupee</displayName> + </currency> + <currency type="IQD"> + <displayName>Iraqi Dinar</displayName> + <symbol>ID</symbol> + </currency> + <currency type="IRR"> + <displayName>Iranian Rial</displayName> + <symbol>RI</symbol> + </currency> + <currency type="ISK"> + <displayName>Icelandic Krona</displayName> + </currency> + <currency type="ITL"> + <displayName>Italian Lira</displayName> + </currency> + <currency type="JMD"> + <displayName>Jamaican Dollar</displayName> + <symbol>J$</symbol> + </currency> + <currency type="JOD"> + <displayName>Jordanian Dinar</displayName> + <symbol>JD</symbol> + </currency> + <currency type="JPY"> + <displayName>Japanese Yen</displayName> + </currency> + <currency type="KES"> + <displayName>Kenyan Shilling</displayName> + <symbol>K Sh</symbol> + </currency> + <currency type="KGS"> + <displayName>Kyrgystan Som</displayName> + <symbol>som</symbol> + </currency> + <currency type="KHR"> + <displayName>Cambodian Riel</displayName> + <symbol>CR</symbol> + </currency> + <currency type="KMF"> + <displayName>Comoro Franc</displayName> + <symbol>CF</symbol> + </currency> + <currency type="KPW"> + <displayName>North Korean Won</displayName> + </currency> + <currency type="KRW"> + <displayName>South Korean Won</displayName> + </currency> + <currency type="KWD"> + <displayName>Kuwaiti Dinar</displayName> + <symbol>KD</symbol> + </currency> + <currency type="KYD"> + <displayName>Cayman Islands Dollar</displayName> + </currency> + <currency type="KZT"> + <displayName>Kazakhstan Tenge</displayName> + <symbol>T</symbol> + </currency> + <currency type="LAK"> + <displayName>Laotian Kip</displayName> + </currency> + <currency type="LBP"> + <displayName>Lebanese Pound</displayName> + <symbol>LL</symbol> + </currency> + <currency type="LKR"> + <displayName>Sri Lanka Rupee</displayName> + <symbol>SL Re</symbol> + </currency> + <currency type="LRD"> + <displayName>Liberian Dollar</displayName> + </currency> + <currency type="LSL"> + <displayName>Lesotho Loti</displayName> + <symbol>M</symbol> + </currency> + <currency type="LSM"> + <displayName>Maloti</displayName> + </currency> + <currency type="LTL"> + <displayName>Lithuanian Lita</displayName> + </currency> + <currency type="LTT"> + <displayName>Lithuanian Talonas</displayName> + </currency> + <currency type="LUC"> + <displayName>Luxembourg Convertible Franc</displayName> + </currency> + <currency type="LUF"> + <displayName>Luxembourg Franc</displayName> + </currency> + <currency type="LUL"> + <displayName>Luxembourg Financial Franc</displayName> + </currency> + <currency type="LVL"> + <displayName>Latvian Lats</displayName> + </currency> + <currency type="LVR"> + <displayName>Latvian Ruble</displayName> + </currency> + <currency type="LYD"> + <displayName>Libyan Dinar</displayName> + <symbol>LD</symbol> + </currency> + <currency type="MAD"> + <displayName>Moroccan Dirham</displayName> + </currency> + <currency type="MAF"> + <displayName>Moroccan Franc</displayName> + </currency> + <currency type="MDL"> + <displayName>Moldovan Leu</displayName> + </currency> + <currency type="MGA"> + <displayName>Madagascar Ariary</displayName> + </currency> + <currency type="MGF"> + <displayName>Madagascar Franc</displayName> + </currency> + <currency type="MKD"> + <displayName>Macedonian Denar</displayName> + <symbol>MDen</symbol> + </currency> + <currency type="MLF"> + <displayName>Mali Franc</displayName> + </currency> + <currency type="MMK"> + <displayName>Myanmar Kyat</displayName> + </currency> + <currency type="MNT"> + <displayName>Mongolian Tugrik</displayName> + <symbol>Tug</symbol> + </currency> + <currency type="MOP"> + <displayName>Macao Pataca</displayName> + </currency> + <currency type="MRO"> + <displayName>Mauritania Ouguiya</displayName> + <symbol>UM</symbol> + </currency> + <currency type="MTL"> + <displayName>Maltese Lira</displayName> + <symbol>Lm</symbol> + </currency> + <currency type="MTP"> + <displayName>Maltese Pound</displayName> + </currency> + <currency type="MUR"> + <displayName>Mauritius Rupee</displayName> + </currency> + <currency type="MVR"> + <displayName>Maldive Islands Rufiyaa</displayName> + </currency> + <currency type="MWK"> + <displayName>Malawi Kwacha</displayName> + <symbol>MK</symbol> + </currency> + <currency type="MXN"> + <displayName>Mexican Peso</displayName> + <symbol>MEX$</symbol> + </currency> + <currency type="MXP"> + <displayName>Mexican Silver Peso (1861-1992)</displayName> + </currency> + <currency type="MXV"> + <displayName>Mexican Unidad de Inversion (UDI)</displayName> + </currency> + <currency type="MYR"> + <displayName>Malaysian Ringgit</displayName> + <symbol>RM</symbol> + </currency> + <currency type="MZE"> + <displayName>Mozambique Escudo</displayName> + </currency> + <currency type="MZM"> + <displayName>Old Mozambique Metical</displayName> + <symbol>Mt</symbol> + </currency> + <currency type="MZN"> + <displayName>Mozambique Metical</displayName> + <symbol>MTn</symbol> + </currency> + <currency type="NAD"> + <displayName>Namibia Dollar</displayName> + <symbol>N$</symbol> + </currency> + <currency type="NGN"> + <displayName>Nigerian Naira</displayName> + </currency> + <currency type="NIC"> + <displayName>Nicaraguan Cordoba</displayName> + </currency> + <currency type="NIO"> + <displayName>Nicaraguan Cordoba Oro</displayName> + </currency> + <currency type="NLG"> + <displayName>Netherlands Guilder</displayName> + </currency> + <currency type="NOK"> + <displayName>Norwegian Krone</displayName> + <symbol>NKr</symbol> + </currency> + <currency type="NPR"> + <displayName>Nepalese Rupee</displayName> + <symbol>Nrs</symbol> + </currency> + <currency type="NZD"> + <displayName>New Zealand Dollar</displayName> + <symbol>$NZ</symbol> + </currency> + <currency type="OMR"> + <displayName>Oman Rial</displayName> + <symbol>RO</symbol> + </currency> + <currency type="PAB"> + <displayName>Panamanian Balboa</displayName> + </currency> + <currency type="PEI"> + <displayName>Peruvian Inti</displayName> + </currency> + <currency type="PEN"> + <displayName>Peruvian Sol Nuevo</displayName> + </currency> + <currency type="PES"> + <displayName>Peruvian Sol</displayName> + </currency> + <currency type="PGK"> + <displayName>Papua New Guinea Kina</displayName> + </currency> + <currency type="PHP"> + <displayName>Philippine Peso</displayName> + <symbol>Php</symbol> + </currency> + <currency type="PKR"> + <displayName>Pakistan Rupee</displayName> + <symbol>Pra</symbol> + </currency> + <currency type="PLN"> + <displayName>Polish Zloty</displayName> + <symbol>Zl</symbol> + </currency> + <currency type="PLZ"> + <displayName>Polish Zloty (1950-1995)</displayName> + </currency> + <currency type="PTE"> + <displayName>Portuguese Escudo</displayName> + </currency> + <currency type="PYG"> + <displayName>Paraguay Guarani</displayName> + </currency> + <currency type="QAR"> + <displayName>Qatari Rial</displayName> + <symbol>QR</symbol> + </currency> + <currency type="RHD"> + <displayName>Rhodesian Dollar</displayName> + </currency> + <currency type="ROL"> + <displayName>Old Romanian Leu</displayName> + <!-- FYI Lei is the plural form of Leu. The currency symbol should be considered for change too. --> + <symbol>=0#Old lei|1#Old leu|1<Old lei</symbol> + </currency> + <currency type="RON"> + <displayName>Romanian Leu</displayName> + <symbol>=0#lei|1#leu|1<lei</symbol> + </currency> + <currency type="RUB"> + <displayName>Russian Ruble</displayName> + </currency> + <currency type="RUR"> + <displayName>Russian Ruble (1991-1998)</displayName> + </currency> + <currency type="RWF"> + <displayName>Rwandan Franc</displayName> + </currency> + <currency type="SAR"> + <displayName>Saudi Riyal</displayName> + <symbol>SRl</symbol> + </currency> + <currency type="SBD"> + <displayName>Solomon Islands Dollar</displayName> + <symbol>SI$</symbol> + </currency> + <currency type="SCR"> + <displayName>Seychelles Rupee</displayName> + <symbol>SR</symbol> + </currency> + <currency type="SDD"> + <displayName>Sudanese Dinar</displayName> + </currency> + <currency type="SDP"> + <displayName>Sudanese Pound</displayName> + </currency> + <currency type="SEK"> + <displayName>Swedish Krona</displayName> + <symbol>SKr</symbol> + </currency> + <currency type="SGD"> + <displayName>Singapore Dollar</displayName> + <symbol>S$</symbol> + </currency> + <currency type="SHP"> + <displayName>Saint Helena Pound</displayName> + </currency> + <currency type="SIT"> + <displayName>Slovenia Tolar</displayName> + </currency> + <currency type="SKK"> + <displayName>Slovak Koruna</displayName> + <symbol>Sk</symbol> + </currency> + <currency type="SLL"> + <displayName>Sierra Leone Leone</displayName> + </currency> + <currency type="SOS"> + <displayName>Somali Shilling</displayName> + <symbol>So. Sh.</symbol> + </currency> + <currency type="SRD"> + <displayName>Surinam Dollar</displayName> + </currency> + <currency type="SRG"> + <displayName>Suriname Guilder</displayName> + <symbol>Sf</symbol> + </currency> + <currency type="STD"> + <displayName>Sao Tome and Principe Dobra</displayName> + <symbol>Db</symbol> + </currency> + <currency type="SUR"> + <displayName>Soviet Rouble</displayName> + </currency> + <currency type="SVC"> + <displayName>El Salvador Colon</displayName> + </currency> + <currency type="SYP"> + <displayName>Syrian Pound</displayName> + <symbol>LS</symbol> + </currency> + <currency type="SZL"> + <displayName>Swaziland Lilangeni</displayName> + <symbol>E</symbol> + </currency> + <currency type="THB"> + <displayName>Thai Baht</displayName> + </currency> + <currency type="TJR"> + <displayName>Tajikistan Ruble</displayName> + </currency> + <currency type="TJS"> + <displayName>Tajikistan Somoni</displayName> + </currency> + <currency type="TMM"> + <displayName>Turkmenistan Manat</displayName> + </currency> + <currency type="TND"> + <displayName>Tunisian Dinar</displayName> + </currency> + <currency type="TOP"> + <displayName>Tonga Paʻanga</displayName> + <symbol>T$</symbol> + </currency> + <currency type="TPE"> + <displayName>Timor Escudo</displayName> + </currency> + <currency type="TRL"> + <displayName>Turkish Lira</displayName> + <symbol>TL</symbol> + </currency> + <currency type="TRY"> + <displayName>New Turkish Lira</displayName> + </currency> + <currency type="TTD"> + <displayName>Trinidad and Tobago Dollar</displayName> + <symbol>TT$</symbol> + </currency> + <currency type="TWD"> + <displayName>Taiwan New Dollar</displayName> + <symbol>NT$</symbol> + </currency> + <currency type="TZS"> + <displayName>Tanzanian Shilling</displayName> + <symbol>T Sh</symbol> + </currency> + <currency type="UAH"> + <displayName>Ukrainian Hryvnia</displayName> + </currency> + <currency type="UAK"> + <displayName>Ukrainian Karbovanetz</displayName> + </currency> + <currency type="UGS"> + <displayName>Ugandan Shilling (1966-1987)</displayName> + </currency> + <currency type="UGX"> + <displayName>Ugandan Shilling</displayName> + <symbol>U Sh</symbol> + </currency> + <currency type="USD"> + <displayName>US Dollar</displayName> + <symbol>US$</symbol> + </currency> + <currency type="USN"> + <displayName>US Dollar (Next day)</displayName> + </currency> + <currency type="USS"> + <displayName>US Dollar (Same day)</displayName> + </currency> + <currency type="UYP"> + <displayName>Uruguay Peso (1975-1993)</displayName> + </currency> + <currency type="UYU"> + <displayName>Uruguay Peso Uruguayo</displayName> + <symbol>Ur$</symbol> + </currency> + <currency type="UZS"> + <displayName>Uzbekistan Sum</displayName> + </currency> + <currency type="VEB"> + <displayName>Venezuelan Bolivar</displayName> + <symbol>Be</symbol> + </currency> + <currency type="VND"> + <displayName>Vietnamese Dong</displayName> + </currency> + <currency type="VUV"> + <displayName>Vanuatu Vatu</displayName> + <symbol>VT</symbol> + </currency> + <currency type="WST"> + <displayName>Western Samoa Tala</displayName> + </currency> + <currency type="XAF"> + <displayName>CFA Franc BEAC</displayName> + </currency> + <currency type="XAG"> + <displayName>Silver</displayName> + </currency> + <currency type="XAU"> + <displayName>Gold</displayName> + </currency> + <currency type="XBA"> + <displayName>European Composite Unit</displayName> + </currency> + <currency type="XBB"> + <displayName>European Monetary Unit</displayName> + </currency> + <currency type="XBC"> + <displayName>European Unit of Account (XBC)</displayName> + </currency> + <currency type="XBD"> + <displayName>European Unit of Account (XBD)</displayName> + </currency> + <currency type="XCD"> + <displayName>East Caribbean Dollar</displayName> + <symbol>EC$</symbol> + </currency> + <currency type="XDR"> + <displayName>Special Drawing Rights</displayName> + </currency> + <currency type="XEU"> + <displayName>European Currency Unit</displayName> + </currency> + <currency type="XFO"> + <displayName>French Gold Franc</displayName> + </currency> + <currency type="XFU"> + <displayName>French UIC-Franc</displayName> + </currency> + <currency type="XOF"> + <displayName>CFA Franc BCEAO</displayName> + </currency> + <currency type="XPD"> + <displayName>Palladium</displayName> + </currency> + <currency type="XPF"> + <displayName>CFP Franc</displayName> + <symbol>CFPF</symbol> + </currency> + <currency type="XPT"> + <displayName>Platinum</displayName> + </currency> + <currency type="XRE"> + <displayName>RINET Funds</displayName> + </currency> + <currency type="XTS"> + <displayName>Testing Currency Code</displayName> + </currency> + <currency type="XXX"> + <displayName>No Currency</displayName> + </currency> + <currency type="YDD"> + <displayName>Yemeni Dinar</displayName> + </currency> + <currency type="YER"> + <displayName>Yemeni Rial</displayName> + <symbol>YRl</symbol> + </currency> + <currency type="YUD"> + <displayName>Yugoslavian Hard Dinar</displayName> + </currency> + <currency type="YUM"> + <displayName>Yugoslavian Noviy Dinar</displayName> + </currency> + <currency type="YUN"> + <displayName>Yugoslavian Convertible Dinar</displayName> + </currency> + <currency type="ZAL"> + <displayName>South African Rand (financial)</displayName> + </currency> + <currency type="ZAR"> + <displayName>South African Rand</displayName> + <symbol>R</symbol> + </currency> + <currency type="ZMK"> + <displayName>Zambian Kwacha</displayName> + </currency> + <currency type="ZRN"> + <displayName>Zairean New Zaire</displayName> + </currency> + <currency type="ZRZ"> + <displayName>Zairean Zaire</displayName> + </currency> + <currency type="ZWD"> + <displayName>Zimbabwe Dollar</displayName> + <symbol>Z$</symbol> + </currency> + </currencies> + </numbers> + <references> + <reference type="R01" draft="unconfirmed"/> + <reference type="R02" draft="provisional"/> + <reference type="R03" uri="http://unstats.un.org/unsd/geoinfo/">UN Geographical Names</reference> + <reference type="R1">Special reference used only to prevent minimalization</reference> + <reference type="RP1" uri="isbn:0-321-18578-1">The Unicode Standard 4.0</reference> + <reference type="RP2">The Economist Style Guide</reference> + </references> +</ldml> +<!-- Comments without bases + + See the National Bank of Romania for details http://www.bnro.ro/def_en.htm - was on: //ldml/numbers/currencies/currency[@type="RON"]/displayName[@alt="proposed"] +--> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/de.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/de.xml new file mode 100644 index 0000000000..c3b6d54c76 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/de.xml @@ -0,0 +1,2135 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.79 $"/> + <generation date="$Date: 2006/12/08 16:29:35 $"/> + <language type="de"/> + </identity> + <localeDisplayNames> + <languages> + <language type="aa">Afar</language> + <language type="ab">Abchasisch</language> + <language type="ace">Aceh-Sprache</language> + <language type="ach">Acholi-Sprache</language> + <language type="ada">Adangme</language> + <language type="ady">Adygai</language> + <language type="ae">Avestisch</language> + <language type="af">Afrikaans</language> + <language type="afa">Afro-Asiatische Sprachen (Andere)</language> + <language type="afh">Afrihili</language> + <language type="ain" draft="provisional">Ainu-Sprache</language> + <language type="ak">Akan</language> + <language type="akk">Akkadisch</language> + <language type="ale">Aleutisch</language> + <language type="alg">Algonkin-Sprachen</language> + <language type="alt" draft="provisional">Altaisch</language> + <language type="am">Amharisch</language> + <language type="an">Aragonesisch</language> + <language type="ang">Altenglisch</language> + <language type="apa">Apachen-Sprache</language> + <language type="ar">Arabisch</language> + <language type="arc">Aramäisch</language> + <language type="arn">Araukanisch</language> + <language type="arp">Arapaho-Sprache</language> + <language type="art">Kunstsprachen (Andere)</language> + <language type="arw">Arawak-Sprachen</language> + <language type="as">Assamesisch</language> + <language type="ast">Asturianisch</language> + <language type="ath">Athapaskische Sprachen</language> + <language type="aus">Australische Sprachen</language> + <language type="av">Awarisch</language> + <language type="awa">Awadhi</language> + <language type="ay">Aymará-Sprache</language> + <language type="ay" alt="proposed-u212-1" draft="provisional">Aymara</language> + <language type="az">Aserbaidschanisch</language> + <language type="ba">Baschkirisch</language> + <language type="bad">Banda-Sprache</language> + <language type="bai">Bamileke-Sprache</language> + <language type="bal">Belutschisch</language> + <language type="ban">Balinesisch</language> + <language type="bas">Basaa-Sprache</language> + <language type="bat">Baltische Sprachen (Andere)</language> + <language type="be">Weißrussisch</language> + <language type="bej">Bedauye</language> + <language type="bej" alt="proposed-u45-1" draft="provisional">Bedja-Sprache</language> + <language type="bem">Bemba-Sprache</language> + <language type="ber">Berbersprachen (Andere)</language> + <language type="bg">Bulgarisch</language> + <language type="bh">Biharisch</language> + <language type="bho">Bhodschpuri</language> + <language type="bi">Bislama</language> + <language type="bik">Bikol-Sprache</language> + <language type="bin">Bini-Sprache</language> + <language type="bla">Blackfoot-Sprache</language> + <language type="bm">Bambara-Sprache</language> + <language type="bn">Bengalisch</language> + <language type="bnt">Bantusprachen (Andere)</language> + <language type="bo">Tibetisch</language> + <language type="br">Bretonisch</language> + <language type="bra">Braj-Bhakha</language> + <language type="bs">Bosnisch</language> + <language type="btk">Batak (Indonesien)</language> + <language type="bua">Burjatisch</language> + <language type="bug">Buginesisch</language> + <language type="byn">Blin</language> + <language type="ca">Katalanisch</language> + <language type="cad">Caddo</language> + <language type="cai">Indianersprachen, Zentralamerika (Andere)</language> + <language type="car">Karibische Sprachen</language> + <language type="cau">Kaukasische Sprachen (Andere)</language> + <language type="ce">Tschetschenisch</language> + <language type="ceb">Cebuano</language> + <language type="cel">Keltische Sprachen (Andere)</language> + <language type="ch">Chamorro-Sprache</language> + <language type="chb">Chibcha-Sprachen</language> + <language type="chg">Tschagataisch</language> + <language type="chk">Trukesisch</language> + <language type="chm">Tscheremissisch</language> + <language type="chn">Chinook</language> + <language type="cho">Choctaw</language> + <language type="chp">Chipewyan</language> + <language type="chr">Cherokee</language> + <language type="chy">Cheyenne</language> + <language type="cmc">Cham-Sprachen</language> + <language type="co">Korsisch</language> + <language type="cop">Koptisch</language> + <language type="cpe">Kreolisch-Englisch (Andere)</language> + <language type="cpf">Kreolisch-Französisch (Andere)</language> + <language type="cpp">Kreolisch-Portugiesisch (Andere)</language> + <language type="cr">Cree</language> + <language type="crh">Krimtatarisch</language> + <language type="crp">Kreolische Sprachen</language> + <language type="cs">Tschechisch</language> + <language type="csb">Kaschubisch</language> + <language type="cu">Kirchenslawisch</language> + <language type="cus">Kuschitische Sprachen (Andere)</language> + <language type="cv">Tschuwaschisch</language> + <language type="cy">Kymrisch</language> + <language type="da">Dänisch</language> + <language type="dak">Dakota-Sprache</language> + <language type="dar">Darginisch</language> + <language type="day">Dajak</language> + <language type="de">Deutsch</language> + <language type="del">Delaware-Sprache</language> + <language type="den">Slave (Athapaskische Sprachen)</language> + <language type="dgr">Dogrib</language> + <language type="din">Dinka-Sprache</language> + <language type="doi">Dogri</language> + <language type="dra">Drawidische Sprachen (Andere)</language> + <language type="dsb">Niedersorbisch</language> + <language type="dua">Duala</language> + <language type="dum">Mittelniederländisch</language> + <language type="dv">Maledivisch</language> + <language type="dyu">Dyula-Sprache</language> + <language type="dz">Bhutanisch</language> + <language type="ee">Ewe-Sprache</language> + <language type="efi">Efik</language> + <language type="egy">Ägyptisch</language> + <language type="eka">Ekajuk</language> + <language type="el">Griechisch</language> + <language type="elx">Elamisch</language> + <language type="en">Englisch</language> + <language type="enm">Mittelenglisch</language> + <language type="eo">Esperanto</language> + <language type="es">Spanisch</language> + <language type="et">Estnisch</language> + <language type="eu">Baskisch</language> + <language type="ewo">Ewondo</language> + <language type="fa">Persisch</language> + <language type="fan">Pangwe-Sprache</language> + <language type="fat">Fanti-Sprache</language> + <language type="ff">Ful</language> + <language type="fi">Finnisch</language> + <language type="fil">Filipino</language> + <language type="fiu">Finnougrische Sprachen (Andere)</language> + <language type="fj">Fidschianisch</language> + <language type="fo">Färöisch</language> + <language type="fon">Fon-Sprache</language> + <language type="fr">Französisch</language> + <language type="frm">Mittelfranzösisch</language> + <language type="fro">Altfranzösisch</language> + <language type="fur">Friulisch</language> + <language type="fy">Friesisch</language> + <language type="ga">Irisch</language> + <language type="gaa">Ga-Sprache</language> + <language type="gay">Gayo</language> + <language type="gba">Gbaya-Sprache</language> + <language type="gd">Schottisch-Gälisch</language> + <language type="gem">Germanische Sprachen (Andere)</language> + <language type="gez">Geez</language> + <language type="gil">Gilbertesisch</language> + <language type="gl">Galizisch</language> + <language type="gmh">Mittelhochdeutsch</language> + <language type="gn">Guarani</language> + <language type="goh">Althochdeutsch</language> + <language type="gon">Gondi-Sprache</language> + <language type="gor">Mongondou</language> + <language type="got">Gotisch</language> + <language type="grb">Grebo-Sprache</language> + <language type="grc">Griechisch (bis 1453)</language> + <language type="gu">Gujarati</language> + <language type="gv">Manx</language> + <language type="gwi">Kutchin-Sprache</language> + <language type="ha">Hausa</language> + <language type="hai">Haida-Sprache</language> + <language type="haw">Hawaiianisch</language> + <language type="he">Hebräisch</language> + <language type="hi">Hindi</language> + <language type="hil">Hiligaynon-Sprache</language> + <language type="him">Himachali</language> + <language type="hit">Hethitisch</language> + <language type="hmn">Miao-Sprachen</language> + <language type="ho">Hiri-Motu</language> + <language type="hr">Kroatisch</language> + <language type="hsb">Obersorbisch</language> + <language type="ht">Kreolisch</language> + <language type="hu">Ungarisch</language> + <language type="hup">Hupa</language> + <language type="hy">Armenisch</language> + <language type="hz">Herero-Sprache</language> + <language type="ia">Interlingua</language> + <language type="iba">Iban</language> + <language type="id">Indonesisch</language> + <language type="ie">Interlingue</language> + <language type="ig">Igbo-Sprache</language> + <language type="ii">Sichuan Yi</language> + <language type="ijo">Ijo-Sprache</language> + <language type="ik">Inupiak</language> + <language type="ilo">Ilokano-Sprache</language> + <language type="inc">Indoarische Sprachen (Andere)</language> + <language type="ine">Indogermanische Sprachen (Andere)</language> + <language type="inh">Ingush</language> + <language type="io">Ido-Sprache</language> + <language type="ira">Iranische Sprachen (Andere)</language> + <language type="iro">Irokesische Sprachen</language> + <language type="is">Isländisch</language> + <language type="it">Italienisch</language> + <language type="iu">Inukitut</language> + <language type="iu" alt="proposed-u45-1" draft="provisional">Inuktitut</language> + <language type="ja">Japanisch</language> + <language type="jbo">Lojban</language> + <language type="jpr">Jüdisch-Persisch</language> + <language type="jrb">Jüdisch-Arabisch</language> + <language type="jv">Javanisch</language> + <language type="ka">Georgisch</language> + <language type="kaa">Karakalpakisch</language> + <language type="kab">Kabylisch</language> + <language type="kac">Kachin-Sprache</language> + <language type="kam">Kamba</language> + <language type="kar">Karenisch</language> + <language type="kaw">Kawi</language> + <language type="kbd">Kabardinisch</language> + <language type="kg">Kongo</language> + <language type="kha">Khasi-Sprache</language> + <language type="khi">Khoisan-Sprachen (Andere)</language> + <language type="kho">Sakisch</language> + <language type="ki">Kikuyu-Sprache</language> + <language type="kj">Kwanyama</language> + <language type="kk">Kasachisch</language> + <language type="kl">Grönländisch</language> + <language type="km">Kambodschanisch</language> + <language type="kmb">Kimbundu-Sprache</language> + <language type="kn">Kannada</language> + <language type="ko">Koreanisch</language> + <language type="kok">Konkani</language> + <language type="kos">Kosraeanisch</language> + <language type="kpe">Kpelle-Sprache</language> + <language type="kr">Kanuri-Sprache</language> + <language type="krc">Karatschaiisch-Balkarisch</language> + <language type="kro">Kru-Sprachen</language> + <language type="kru">Oraon-Sprache</language> + <language type="ks">Kaschmirisch</language> + <language type="ku">Kurdisch</language> + <language type="kum">Kumükisch</language> + <language type="kut">Kutenai-Sprache</language> + <language type="kv">Komi-Sprache</language> + <language type="kw">Kornisch</language> + <language type="ky">Kirgisisch</language> + <language type="la">Latein</language> + <language type="lad">Judenspanisch</language> + <language type="lad" alt="proposed-u212-1" draft="unconfirmed">Ladino</language> + <language type="lad" alt="proposed-u45-1" draft="provisional">Ladinisch</language> + <language type="lah">Lahnda</language> + <language type="lam">Lamba-Sprache</language> + <language type="lb">Luxemburgisch</language> + <language type="lez">Lesgisch</language> + <language type="lg">Ganda-Sprache</language> + <language type="li">Limburgisch</language> + <language type="ln">Lingala</language> + <language type="lo">Laotisch</language> + <language type="lol">Mongo</language> + <language type="loz">Rotse-Sprache</language> + <language type="lt">Litauisch</language> + <language type="lu">Luba</language> + <language type="lua">Luba-Lulua</language> + <language type="lui">Luiseno-Sprache</language> + <language type="lun">Lunda-Sprache</language> + <language type="luo">Luo-Sprache</language> + <language type="lus">Lushai-Sprache</language> + <language type="lv">Lettisch</language> + <language type="mad">Maduresisch</language> + <language type="mag">Khotta</language> + <language type="mai">Maithili</language> + <language type="mak">Makassarisch</language> + <language type="man">Manding-Sprache</language> + <language type="map">Austronesische Sprachen (Andere)</language> + <language type="mas">Massai-Sprache</language> + <language type="mdf">Moksha</language> + <language type="mdr">Mandaresisch</language> + <language type="men">Mende-Sprache</language> + <language type="mg">Madagassisch</language> + <language type="mg" alt="proposed-u45-1" draft="provisional">Malagassi-Sprache</language> + <language type="mga">Mittelirisch</language> + <language type="mh">Marschallesisch</language> + <language type="mi">Maori</language> + <language type="mic">Micmac-Sprache</language> + <language type="min">Minangkabau-Sprache</language> + <language type="mis">Verschiedene Sprachen</language> + <language type="mk">Mazedonisch</language> + <language type="mkh">Mon-Khmer-Sprachen (Andere)</language> + <language type="ml">Malayalam</language> + <language type="mn">Mongolisch</language> + <language type="mnc">Mandschurisch</language> + <language type="mni">Meithei-Sprache</language> + <language type="mno">Manobo-Sprache</language> + <language type="mo">Moldauisch</language> + <language type="moh">Mohawk-Sprache</language> + <language type="mos">Mossi-Sprache</language> + <language type="mr">Marathi</language> + <language type="ms">Malaiisch</language> + <language type="mt">Maltesisch</language> + <language type="mul">Polyglott</language> + <language type="mun">Munda-Sprachen</language> + <language type="mus">Muskogee-Sprachen</language> + <language type="mwl" draft="provisional">Mirandesisch</language> + <language type="mwr">Marwari</language> + <language type="my">Birmanisch</language> + <language type="myn">Maya-Sprachen</language> + <language type="myv">Erzya</language> + <language type="na">Nauruisch</language> + <language type="nah">Nahuatl</language> + <language type="nai">Indianersprachen, Nordamerika (Andere)</language> + <language type="nap">Neapolitanisch</language> + <language type="nb">Norwegisch Bokmål</language> + <language type="nb" alt="proposed-u212-1" draft="provisional">Norwegisch (Bokmål)</language> + <language type="nd">Ndebele-Sprache (Nord)</language> + <language type="nds">Niederdeutsch</language> + <language type="ne">Nepalesisch</language> + <language type="new">Newari</language> + <language type="ng">Ndonga</language> + <language type="nia">Nias-Sprache</language> + <language type="nic">Nigerkordofanische Sprachen (Andere)</language> + <language type="niu">Niue-Sprache</language> + <language type="nl">Niederländisch</language> + <language type="nn">Norwegisch Nynorsk</language> + <language type="nn" alt="proposed-u45-1" draft="provisional">Norwegisch (Nynorsk)</language> + <language type="no">Norwegisch</language> + <language type="nog">Nogai</language> + <language type="non">Altnordisch</language> + <language type="nr">Ndebele-Sprache (Süd)</language> + <language type="nso">Sotho-Sprache (Nord)</language> + <language type="nub">Nubische Sprachen</language> + <language type="nv">Navajo-Sprache</language> + <language type="nwc" draft="provisional">Alt-Newari</language> + <language type="ny">Chewa-Sprache</language> + <language type="nym">Nyamwezi-Sprache</language> + <language type="nyn">Nyankole</language> + <language type="nyo">Nyoro</language> + <language type="nzi">Nzima</language> + <language type="oc">Okzitanisch</language> + <language type="oj">Ojibwa-Sprache</language> + <language type="om">Oromo</language> + <language type="or">Orija</language> + <language type="os">Ossetisch</language> + <language type="osa">Osage-Sprache</language> + <language type="ota">Osmanisch</language> + <language type="oto">Otomangue-Sprachen</language> + <language type="pa">Pandschabisch</language> + <language type="paa">Papuasprachen (Andere)</language> + <language type="pag">Pangasinan-Sprache</language> + <language type="pal">Mittelpersisch</language> + <language type="pam">Pampanggan-Sprache</language> + <language type="pap">Papiamento</language> + <language type="pau">Palau</language> + <language type="peo">Altpersisch</language> + <language type="phi">Philippinen-Austronesisch (Andere)</language> + <language type="phn">Phönikisch</language> + <language type="pi">Pali</language> + <language type="pl">Polnisch</language> + <language type="pon">Ponapeanisch</language> + <language type="pra">Prakrit</language> + <language type="pro">Altprovenzalisch</language> + <language type="ps">Afghanisch (Paschtu)</language> + <language type="pt">Portugiesisch</language> + <language type="qu">Quechua</language> + <language type="raj">Rajasthani</language> + <language type="rap">Osterinsel-Sprache</language> + <language type="rar">Rarotonganisch</language> + <language type="rm">Rätoromanisch</language> + <language type="rn">Rundi-Sprache</language> + <language type="ro">Rumänisch</language> + <language type="roa">Romanische Sprachen (Andere)</language> + <language type="rom">Zigeunersprache</language> + <language type="root" draft="provisional">Root</language> + <language type="ru">Russisch</language> + <language type="rup" draft="provisional">Aromunisch</language> + <language type="rw">Ruandisch</language> + <language type="sa">Sanskrit</language> + <language type="sad">Sandawe-Sprache</language> + <language type="sah">Jakutisch</language> + <language type="sai">Indianersprachen, Südamerika (Andere)</language> + <language type="sal">Salish-Sprache</language> + <language type="sam">Samaritanisch</language> + <language type="sas">Sasak</language> + <language type="sat">Santali</language> + <language type="sc">Sardisch</language> + <language type="scn" draft="provisional">Sizilianisch</language> + <language type="sco">Schottisch</language> + <language type="sd">Sindhi</language> + <language type="se">Nord-Samisch</language> + <language type="sel">Selkupisch</language> + <language type="sem">Semitische Sprachen (Andere)</language> + <language type="sg">Sango</language> + <language type="sga">Altirisch</language> + <language type="sgn">Gebärdensprache</language> + <language type="sh">Serbo-Kroatisch</language> + <language type="shn">Schan-Sprache</language> + <language type="si">Singhalesisch</language> + <language type="sid">Sidamo</language> + <language type="sio">Sioux-Sprachen</language> + <language type="sit">Sinotibetische Sprachen (Andere)</language> + <language type="sk">Slowakisch</language> + <language type="sl">Slowenisch</language> + <language type="sla">Slawische Sprachen (Andere)</language> + <language type="sm">Samoanisch</language> + <language type="sma">Süd-Samisch</language> + <language type="smi">Lappisch</language> + <language type="smj">Lule-Lappisch</language> + <language type="smn">Inari-Lappisch</language> + <language type="sms">Skolt-Lappisch</language> + <language type="sn">Shona</language> + <language type="snk">Soninke-Sprache</language> + <language type="so">Somali</language> + <language type="sog">Sogdisch</language> + <language type="son">Songhai-Sprache</language> + <language type="sq">Albanisch</language> + <language type="sr">Serbisch</language> + <language type="srn" draft="provisional">Srananisch</language> + <language type="srr">Serer-Sprache</language> + <language type="ss">Swazi</language> + <language type="ssa">Nilosaharanische Sprachen (Andere)</language> + <language type="st">Süd-Sotho-Sprache</language> + <language type="su">Sudanesisch</language> + <language type="suk">Sukuma-Sprache</language> + <language type="sus">Susu</language> + <language type="sux">Sumerisch</language> + <language type="sv">Schwedisch</language> + <language type="sw">Suaheli</language> + <language type="syr">Syrisch</language> + <language type="ta">Tamilisch</language> + <language type="tai">Thaisprachen (Andere)</language> + <language type="te">Telugu</language> + <language type="tem">Temne</language> + <language type="ter">Tereno-Sprache</language> + <language type="tet">Tetum-Sprache</language> + <language type="tg">Tadschikisch</language> + <language type="th">Thai</language> + <language type="ti">Tigrinja</language> + <language type="tig">Tigre</language> + <language type="tiv">Tiv-Sprache</language> + <language type="tk">Turkmenisch</language> + <language type="tkl">Tokelauanisch</language> + <language type="tl">Tagalog</language> + <language type="tlh" draft="provisional">Klingonisch</language> + <language type="tli">Tlingit-Sprache</language> + <language type="tmh">Tamaseq</language> + <language type="tn">Tswana-Sprache</language> + <language type="to">Tongaisch</language> + <language type="tog">Tonga (Nyasa)</language> + <language type="tog" alt="proposed-u45-1" draft="provisional">Tsonga-Sprache</language> + <language type="tpi">Neumelanesisch</language> + <language type="tr">Türkisch</language> + <language type="ts">Tsonga</language> + <language type="tsi">Tsimshian-Sprache</language> + <language type="tt">Tatarisch</language> + <language type="tum">Tumbuka-Sprache</language> + <language type="tup">Tupi-Sprachen</language> + <language type="tut">Altaische Sprachen (Andere)</language> + <language type="tvl">Elliceanisch</language> + <language type="tw">Twi</language> + <language type="ty">Tahitisch</language> + <language type="tyv">Tuwinisch</language> + <language type="udm">Udmurtisch</language> + <language type="ug">Uigurisch</language> + <language type="uga">Ugaritisch</language> + <language type="uk">Ukrainisch</language> + <language type="umb">Mbundu-Sprache</language> + <language type="und">Sprache nicht ermittelt</language> + <language type="ur">Urdu</language> + <language type="uz">Usbekisch</language> + <language type="vai">Vai-Sprache</language> + <language type="ve">Venda-Sprache</language> + <language type="vi">Vietnamesisch</language> + <language type="vo">Volapük</language> + <language type="vot">Wotisch</language> + <language type="wa">Wallonisch</language> + <language type="wak">Wakashanisch</language> + <language type="wal">Walamo-Sprache</language> + <language type="war">Waray</language> + <language type="was">Washo-Sprache</language> + <language type="wen">Sorbisch</language> + <language type="wo">Wolof</language> + <language type="xal">Kalmückisch</language> + <language type="xh">Xhosa</language> + <language type="yao">Yao-Sprache</language> + <language type="yap">Yapesisch</language> + <language type="yi">Jiddisch</language> + <language type="yo">Joruba</language> + <language type="ypk">Yupik-Sprache</language> + <language type="za">Zhuang</language> + <language type="zap">Zapotekisch</language> + <language type="zen">Zenaga</language> + <language type="zh">Chinesisch</language> + <language type="znd">Zande-Sprache</language> + <language type="zu">Zulu</language> + <language type="zun">Zuni-Sprache</language> + </languages> + <scripts> + <script type="Arab">Arabisch</script> + <script type="Armn">Armenisch</script> + <script type="Bali" draft="provisional">Balinesisch</script> + <script type="Batk" draft="provisional">Battakisch</script> + <script type="Beng">Bengalisch</script> + <script type="Blis" draft="provisional">Bliss-Symbole</script> + <script type="Bopo">Bopomofo</script> + <script type="Brah" draft="provisional">Brahmi</script> + <script type="Brai">Blindenschrift</script> + <script type="Bugi" draft="provisional">Buginesisch</script> + <script type="Buhd" draft="provisional">Buhid</script> + <script type="Cans" draft="provisional">UCAS</script> + <script type="Cham" draft="provisional">Cham</script> + <script type="Cher">Cherokee</script> + <script type="Cirt" draft="provisional">Cirth</script> + <script type="Copt">Koptisch</script> + <script type="Cprt">Zypriotisch</script> + <script type="Cyrl">Kyrillisch</script> + <script type="Cyrs" draft="provisional">Kyrillisch (Altkirchenslawische Variante)</script> + <script type="Deva">Devanagari</script> + <script type="Dsrt" draft="provisional">Deseret</script> + <script type="Egyd" draft="provisional">Ägyptisch (Demotisch)</script> + <script type="Egyh" draft="provisional">Ägyptisch (Hieratisch)</script> + <script type="Egyp" draft="provisional">Ägyptische Hieroglyphen</script> + <script type="Ethi">Äthiopisch</script> + <script type="Geok" draft="provisional">Khutsuri (Asomtavruli und Nuskhuri)</script> + <script type="Geor">Georgisch</script> + <script type="Glag" draft="provisional">Glagolitisch</script> + <script type="Goth">Gotisch</script> + <script type="Grek">Griechisch</script> + <script type="Gujr">Gujarati</script> + <script type="Guru">Gurmukhi</script> + <script type="Hang">Hangul</script> + <script type="Hani">Chinesisch</script> + <script type="Hano" draft="provisional">Hanunoo</script> + <script type="Hans">Vereinfachte Chinesische Schrift</script> + <script type="Hant">Traditionelle Chinesische Schrift</script> + <script type="Hebr">Hebräisch</script> + <script type="Hira">Hiragana</script> + <script type="Hmng" draft="provisional">Pahawh Hmong</script> + <script type="Hrkt" draft="provisional">Katakana oder Hiragana</script> + <script type="Hung" draft="provisional">Altungarisch</script> + <script type="Inds" draft="provisional">Indus (Harappan)</script> + <script type="Ital">Altitalisch</script> + <script type="Java" draft="provisional">Javanesisch</script> + <script type="Kali" draft="provisional">Kayah Li</script> + <script type="Kana">Katakana</script> + <script type="Khar" draft="provisional">Kharoshthi</script> + <script type="Khmr">Khmer</script> + <script type="Knda">Kannada</script> + <script type="Laoo">Laotisch</script> + <script type="Latf" draft="provisional">Lateinisch (Fraktur-Variante)</script> + <script type="Latg" draft="provisional">Lateinisch (Gälische Variante)</script> + <script type="Latn">Lateinisch</script> + <script type="Lepc" draft="provisional">Lepcha (Róng)</script> + <script type="Limb">Limbu</script> + <script type="Lina" draft="provisional">Linear A</script> + <script type="Linb">Linear B</script> + <script type="Mand" draft="provisional">Mandaean</script> + <script type="Maya" draft="provisional">Maya-Hieroglyphen</script> + <script type="Mero" draft="provisional">Meroitisch</script> + <script type="Mlym">Malaysisch</script> + <script type="Mong">Mongolisch</script> + <script type="Mymr">Burmesisch</script> + <script type="Nkoo" draft="provisional">N’Ko</script> + <script type="Ogam">Ogham</script> + <script type="Orkh" draft="provisional">Orchon-Runen</script> + <script type="Orya">Oriya</script> + <script type="Osma">Osmanisch</script> + <script type="Perm" draft="provisional">Altpermisch</script> + <script type="Phag" draft="provisional">Phags-pa</script> + <script type="Phnx" draft="provisional">Phönizisch</script> + <script type="Plrd" draft="provisional">Pollard Phonetisch</script> + <script type="Qaai">Geerbter Schriftwert</script> + <script type="Roro" draft="provisional">Rongorongo</script> + <script type="Runr">Runenschrift</script> + <script type="Sara" draft="provisional">Sarati</script> + <script type="Shaw" draft="provisional">Shaw-Alphabet</script> + <script type="Sinh">Singhalesisch</script> + <script type="Sylo" draft="provisional">Syloti Nagri</script> + <script type="Syrc">Syrisch</script> + <script type="Syre" draft="provisional">Syrisch (Estrangelo-Variante)</script> + <script type="Syrj" draft="provisional">Syrisch (Westliche Variante)</script> + <script type="Syrn" draft="provisional">Syrisch (Östliche Variante)</script> + <script type="Tagb" draft="provisional">Tagbanwa</script> + <script type="Tale" draft="provisional">Tai Le</script> + <script type="Talu" draft="provisional">Tai Lue</script> + <script type="Taml">Tamilisch</script> + <script type="Telu">Telugu</script> + <script type="Teng" draft="provisional">Tengwar</script> + <script type="Tfng" draft="provisional">Tifinagh (Berber)</script> + <script type="Tglg">Tagalog</script> + <script type="Thaa" draft="provisional">Thaana</script> + <script type="Thai" draft="provisional">Thai</script> + <script type="Tibt">Tibetisch</script> + <script type="Ugar">Ugaritisch</script> + <script type="Vaii" draft="provisional">Vai</script> + <script type="Visp" draft="provisional">Visible Speech</script> + <script type="Xpeo" draft="provisional">Altpersisch</script> + <script type="Xsux" draft="provisional">Sumerisch-akkadische Keilschrift</script> + <script type="Yiii">Yi</script> + <script type="Zxxx" draft="provisional">Schriftlose Sprachen</script> + <script type="Zyyy">Unbestimmt</script> + <script type="Zzzz" draft="provisional">Uncodierte Schrift</script> + </scripts> + <territories> + <territory type="001">Welt</territory> + <territory type="002">Afrika</territory> + <territory type="005">Südamerika</territory> + <territory type="009">Ozeanien</territory> + <territory type="011">Westafrika</territory> + <territory type="013">Mittelamerika</territory> + <territory type="014">Ostafrika</territory> + <territory type="015">Nordafrika</territory> + <territory type="017">Zentralafrika</territory> + <territory type="018" draft="provisional">Südliches Afrika</territory> + <territory type="019">Nord-, Mittel- und Südamerika</territory> + <territory type="021">Nordamerika</territory> + <territory type="029">Karibik</territory> + <territory type="030">Ostasien</territory> + <territory type="034">Südasien</territory> + <territory type="035">Südostasien</territory> + <territory type="039">Südeuropa</territory> + <territory type="053">Australien und Neuseeland</territory> + <territory type="054">Melanesien</territory> + <territory type="057" draft="provisional">Mikronesien (Inselgebiet)</territory> + <territory type="061">Polynesien</territory> + <territory type="062">Süd-Zentralasien</territory> + <territory type="142">Asien</territory> + <territory type="143">Zentralasien</territory> + <territory type="145">Westasien</territory> + <territory type="150">Europa</territory> + <territory type="151">Osteuropa</territory> + <territory type="154">Nordeuropa</territory> + <territory type="155">Westeuropa</territory> + <territory type="172" draft="provisional">Gemeinschaft Unabhängiger Staaten</territory> + <territory type="419">Lateinamerika und Karibik</territory> + <territory type="830">Kanalinseln</territory> + <territory type="IM">Insel Man</territory> + <territory type="AD">Andorra</territory> + <territory type="AE">Vereinigte Arabische Emirate</territory> + <territory type="AF">Afghanistan</territory> + <territory type="AG">Antigua und Barbuda</territory> + <territory type="AI">Anguilla</territory> + <territory type="AL">Albanien</territory> + <territory type="AM">Armenien</territory> + <territory type="AN">Niederländische Antillen</territory> + <territory type="AO">Angola</territory> + <territory type="AQ">Antarktis</territory> + <territory type="AR">Argentinien</territory> + <territory type="AS">Amerikanisch-Samoa</territory> + <territory type="AT">Österreich</territory> + <territory type="AU">Australien</territory> + <territory type="AW">Aruba</territory> + <territory type="AX">Alandinseln</territory> + <territory type="AZ">Aserbaidschan</territory> + <territory type="BA">Bosnien und Herzegowina</territory> + <territory type="BB">Barbados</territory> + <territory type="BD">Bangladesch</territory> + <territory type="BE">Belgien</territory> + <territory type="BF">Burkina Faso</territory> + <territory type="BG">Bulgarien</territory> + <territory type="BH">Bahrain</territory> + <territory type="BI">Burundi</territory> + <territory type="BJ">Benin</territory> + <territory type="BM">Bermuda</territory> + <territory type="BN">Brunei Darussalam</territory> + <territory type="BO">Bolivien</territory> + <territory type="BR">Brasilien</territory> + <territory type="BS">Bahamas</territory> + <territory type="BT">Bhutan</territory> + <territory type="BV">Bouvetinsel</territory> + <territory type="BW">Botsuana</territory> + <territory type="BY">Belarus</territory> + <territory type="BZ">Belize</territory> + <territory type="CA">Kanada</territory> + <territory type="CC">Kokosinseln (Keeling)</territory> + <territory type="CD">Demokratische Republik Kongo</territory> + <territory type="CF">Zentralafrikanische Republik</territory> + <territory type="CG">Kongo</territory> + <territory type="CH">Schweiz</territory> + <territory type="CI">Côte d’Ivoire</territory> + <territory type="CK">Cookinseln</territory> + <territory type="CL">Chile</territory> + <territory type="CM">Kamerun</territory> + <territory type="CN">China</territory> + <territory type="CO">Kolumbien</territory> + <territory type="CR">Costa Rica</territory> + <territory type="CS">Serbien und Montenegro</territory> + <territory type="CU">Kuba</territory> + <territory type="CV">Kap Verde</territory> + <territory type="CX">Weihnachtsinsel</territory> + <territory type="CY">Zypern</territory> + <territory type="CZ">Tschechische Republik</territory> + <territory type="DE">Deutschland</territory> + <territory type="DJ">Dschibuti</territory> + <territory type="DK">Dänemark</territory> + <territory type="DM">Dominica</territory> + <territory type="DO">Dominikanische Republik</territory> + <territory type="DZ">Algerien</territory> + <territory type="EC">Ecuador</territory> + <territory type="EE">Estland</territory> + <territory type="EG">Ägypten</territory> + <territory type="EH">Westsahara</territory> + <territory type="ER">Eritrea</territory> + <territory type="ES">Spanien</territory> + <territory type="ET">Äthiopien</territory> + <territory type="FI">Finnland</territory> + <territory type="FJ">Fidschi</territory> + <territory type="FK">Falklandinseln</territory> + <territory type="FM">Mikronesien</territory> + <territory type="FO">Färöer</territory> + <territory type="FR">Frankreich</territory> + <territory type="GA">Gabun</territory> + <territory type="GB">Vereinigtes Königreich</territory> + <territory type="GD">Grenada</territory> + <territory type="GE">Georgien</territory> + <territory type="GF">Französisch-Guayana</territory> + <territory type="GH">Ghana</territory> + <territory type="GI">Gibraltar</territory> + <territory type="GL">Grönland</territory> + <territory type="GM">Gambia</territory> + <territory type="GN">Guinea</territory> + <territory type="GP">Guadeloupe</territory> + <territory type="GQ">Äquatorialguinea</territory> + <territory type="GR">Griechenland</territory> + <territory type="GS">Südgeorgien und die Südlichen Sandwichinseln</territory> + <territory type="GT">Guatemala</territory> + <territory type="GU">Guam</territory> + <territory type="GW">Guinea-Bissau</territory> + <territory type="GY">Guyana</territory> + <territory type="HK">Hong Kong S.A.R., China</territory> + <territory type="HM">Heard und McDonaldinseln</territory> + <territory type="HN">Honduras</territory> + <territory type="HR">Kroatien</territory> + <territory type="HT">Haiti</territory> + <territory type="HU">Ungarn</territory> + <territory type="ID">Indonesien</territory> + <territory type="IE">Irland</territory> + <territory type="IL">Israel</territory> + <territory type="IN">Indien</territory> + <territory type="IO">Britisches Territorium im Indischen Ozean</territory> + <territory type="IQ">Irak</territory> + <territory type="IR">Iran</territory> + <territory type="IS">Island</territory> + <territory type="IT">Italien</territory> + <territory type="JM">Jamaika</territory> + <territory type="JO">Jordanien</territory> + <territory type="JP">Japan</territory> + <territory type="KE">Kenia</territory> + <territory type="KG">Kirgisistan</territory> + <territory type="KH">Kambodscha</territory> + <territory type="KI">Kiribati</territory> + <territory type="KM">Komoren</territory> + <territory type="KN">St. Kitts und Nevis</territory> + <territory type="KP">Demokratische Volksrepublik Korea</territory> + <territory type="KR">Republik Korea</territory> + <territory type="KW">Kuwait</territory> + <territory type="KY">Kaimaninseln</territory> + <territory type="KZ">Kasachstan</territory> + <territory type="LA">Laos</territory> + <territory type="LB">Libanon</territory> + <territory type="LC">St. Lucia</territory> + <territory type="LI">Liechtenstein</territory> + <territory type="LK">Sri Lanka</territory> + <territory type="LR">Liberia</territory> + <territory type="LS">Lesotho</territory> + <territory type="LT">Litauen</territory> + <territory type="LU">Luxemburg</territory> + <territory type="LV">Lettland</territory> + <territory type="LY">Libyen</territory> + <territory type="MA">Marokko</territory> + <territory type="MC">Monaco</territory> + <territory type="MD">Republik Moldau</territory> + <territory type="MG">Madagaskar</territory> + <territory type="MH">Marshallinseln</territory> + <territory type="MK">Mazedonien</territory> + <territory type="ML">Mali</territory> + <territory type="MM">Myanmar</territory> + <territory type="MN">Mongolei</territory> + <territory type="MO">Macau S.A.R., China</territory> + <territory type="MP">Nördliche Marianen</territory> + <territory type="MQ">Martinique</territory> + <territory type="MR">Mauretanien</territory> + <territory type="MS">Montserrat</territory> + <territory type="MT">Malta</territory> + <territory type="MU">Mauritius</territory> + <territory type="MV">Malediven</territory> + <territory type="MW">Malawi</territory> + <territory type="MX">Mexiko</territory> + <territory type="MY">Malaysia</territory> + <territory type="MZ">Mosambik</territory> + <territory type="NA">Namibia</territory> + <territory type="NC">Neukaledonien</territory> + <territory type="NE">Niger</territory> + <territory type="NF">Norfolkinsel</territory> + <territory type="NG">Nigeria</territory> + <territory type="NI">Nicaragua</territory> + <territory type="NL">Niederlande</territory> + <territory type="NO">Norwegen</territory> + <territory type="NP">Nepal</territory> + <territory type="NR">Nauru</territory> + <territory type="NU">Niue</territory> + <territory type="NZ">Neuseeland</territory> + <territory type="OM">Oman</territory> + <territory type="PA">Panama</territory> + <territory type="PE">Peru</territory> + <territory type="PF">Französisch-Polynesien</territory> + <territory type="PG">Papua-Neuguinea</territory> + <territory type="PH">Philippinen</territory> + <territory type="PK">Pakistan</territory> + <territory type="PL">Polen</territory> + <territory type="PM">St. Pierre und Miquelon</territory> + <territory type="PN">Pitcairn</territory> + <territory type="PR">Puerto Rico</territory> + <territory type="PS">Palästinensische Gebiete</territory> + <territory type="PT">Portugal</territory> + <territory type="PW">Palau</territory> + <territory type="PY">Paraguay</territory> + <territory type="QA">Katar</territory> + <territory type="QO">Äußeres Ozeanien</territory> + <territory type="RE">Réunion</territory> + <territory type="RO">Rumänien</territory> + <territory type="RU">Russische Föderation</territory> + <territory type="RW">Ruanda</territory> + <territory type="SA">Saudi-Arabien</territory> + <territory type="SB">Salomonen</territory> + <territory type="SC">Seychellen</territory> + <territory type="SD">Sudan</territory> + <territory type="SE">Schweden</territory> + <territory type="SG">Singapur</territory> + <territory type="SH">St. Helena</territory> + <territory type="SI">Slowenien</territory> + <territory type="SJ">Svalbard und Jan Mayen</territory> + <territory type="SK">Slowakei</territory> + <territory type="SL">Sierra Leone</territory> + <territory type="SM">San Marino</territory> + <territory type="SN">Senegal</territory> + <territory type="SO">Somalia</territory> + <territory type="SR">Suriname</territory> + <territory type="ST">São Tomé und Príncipe</territory> + <territory type="SV">El Salvador</territory> + <territory type="SY">Syrien</territory> + <territory type="SZ">Swasiland</territory> + <territory type="TC">Turks- und Caicosinseln</territory> + <territory type="TD">Tschad</territory> + <territory type="TF">Französische Süd- und Antarktisgebiete</territory> + <territory type="TG">Togo</territory> + <territory type="TH">Thailand</territory> + <territory type="TJ">Tadschikistan</territory> + <territory type="TK">Tokelau</territory> + <territory type="TL">Osttimor</territory> + <territory type="TM">Turkmenistan</territory> + <territory type="TN">Tunesien</territory> + <territory type="TO">Tonga</territory> + <territory type="TR">Türkei</territory> + <territory type="TT">Trinidad und Tobago</territory> + <territory type="TV">Tuvalu</territory> + <territory type="TW">Taiwan</territory> + <territory type="TZ">Tansania</territory> + <territory type="UA">Ukraine</territory> + <territory type="UG">Uganda</territory> + <territory type="UM">Amerikanisch-Ozeanien</territory> + <territory type="US">Vereinigte Staaten</territory> + <territory type="UY">Uruguay</territory> + <territory type="UZ">Usbekistan</territory> + <territory type="VA">Vatikanstadt</territory> + <territory type="VC">St. Vincent und die Grenadinen</territory> + <territory type="VE">Venezuela</territory> + <territory type="VG">Britische Jungferninseln</territory> + <territory type="VI">Amerikanische Jungferninseln</territory> + <territory type="VN">Vietnam</territory> + <territory type="VU">Vanuatu</territory> + <territory type="WF">Wallis und Futuna</territory> + <territory type="WS">Samoa</territory> + <territory type="YE">Jemen</territory> + <territory type="YT">Mayotte</territory> + <territory type="ZA">Südafrika</territory> + <territory type="ZA" alt="proposed-u212-1" draft="unconfirmed">Südafrika (Republik)</territory> + <territory type="ZA" alt="proposed-u45-2" draft="provisional">Republik Südafrika</territory> + <territory type="ZM">Sambia</territory> + <territory type="ZW">Simbabwe</territory> + </territories> + <variants> + <variant type="1901" draft="unconfirmed">alte deutsche Rechtschreibung</variant> + <variant type="1996" draft="unconfirmed">neue deutsche Rechtschreibung</variant> + <variant type="NEDIS" draft="provisional">Natisone-Dialekt</variant> + <variant type="POLYTONI" draft="provisional">Polytonisch</variant> + <variant type="POSIX">Posix</variant> + <variant type="REVISED">Revidiert</variant> + <variant type="ROZAJ" draft="provisional">Resianisch</variant> + <variant type="SAAHO" draft="provisional">Saho</variant> + </variants> + <keys> + <key type="calendar">Kalender</key> + <key type="collation">Sortierung</key> + <key type="currency">Währung</key> + </keys> + <types> + <type type="big5han" key="collation" draft="provisional">Traditionelles Chinesisch (Big5)</type> + <type type="buddhist" key="calendar">Buddhistischer Kalender</type> + <type type="chinese" key="calendar">Chinesischer Kalender</type> + <type type="direct" key="collation">Direkte Sortierregeln</type> + <type type="gb2312han" key="collation" draft="provisional">Vereinfachtes Chinesisch (GB2312)</type> + <type type="gregorian" key="calendar">Gregorianischer Kalender</type> + <type type="hebrew" key="calendar">Hebräischer Kalender</type> + <type type="islamic" key="calendar">Islamischer Kalender</type> + <type type="islamic-civil" key="calendar">Bürgerlicher islamischer Kalender</type> + <type type="japanese" key="calendar">Japanischer Kalender</type> + <type type="phonebook" key="collation">Telefonbuch-Sortierregeln</type> + <type type="pinyin" key="collation">Pinyin-Sortierregeln</type> + <type type="stroke" key="collation">Strichfolge</type> + <type type="traditional" key="collation">Traditionelle Sortierregeln</type> + </types> + <measurementSystemNames> + <measurementSystemName type="US" references="RP11" draft="provisional">US-amerikanisch</measurementSystemName> + <measurementSystemName type="metric" references="RP10" draft="unconfirmed">metrisch</measurementSystemName> + </measurementSystemNames> + </localeDisplayNames> + <characters> + <exemplarCharacters>[a ä b-o ö p-s ß t u ü v-z]</exemplarCharacters> + </characters> + <delimiters> + <quotationStart>‚</quotationStart> + <quotationEnd>‘</quotationEnd> + <alternateQuotationStart>„</alternateQuotationStart> + <alternateQuotationEnd>“</alternateQuotationEnd> + </delimiters> + <dates> + <localizedPatternChars>GjMtkHmsSEDFwWahKzJeugAZvcL</localizedPatternChars> + <calendars> + <calendar type="gregorian"> + <months> + <monthContext type="format"> + <monthWidth type="abbreviated"> + <month type="1">Jan</month> + <month type="2">Feb</month> + <month type="3">Mrz</month> + <month type="3" alt="proposed-u45-1" draft="provisional">Mär</month> + <month type="4">Apr</month> + <month type="5">Mai</month> + <month type="6">Jun</month> + <month type="7">Jul</month> + <month type="8">Aug</month> + <month type="9">Sep</month> + <month type="10">Okt</month> + <month type="11">Nov</month> + <month type="12">Dez</month> + </monthWidth> + <monthWidth type="wide"> + <month type="1">Januar</month> + <month type="2">Februar</month> + <month type="3">März</month> + <month type="4">April</month> + <month type="5">Mai</month> + <month type="6">Juni</month> + <month type="7">Juli</month> + <month type="8">August</month> + <month type="9">September</month> + <month type="10">Oktober</month> + <month type="11">November</month> + <month type="12">Dezember</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="1">J</month> + <month type="2">F</month> + <month type="3">M</month> + <month type="4">A</month> + <month type="5">M</month> + <month type="6">J</month> + <month type="7">J</month> + <month type="8">A</month> + <month type="9">S</month> + <month type="10">O</month> + <month type="11">N</month> + <month type="12">D</month> + </monthWidth> + </monthContext> + </months> + <days> + <dayContext type="format"> + <dayWidth type="abbreviated"> + <day type="sun">So</day> + <day type="mon">Mo</day> + <day type="tue">Di</day> + <day type="wed">Mi</day> + <day type="thu">Do</day> + <day type="fri">Fr</day> + <day type="sat">Sa</day> + </dayWidth> + <dayWidth type="wide"> + <day type="sun">Sonntag</day> + <day type="mon">Montag</day> + <day type="tue">Dienstag</day> + <day type="wed">Mittwoch</day> + <day type="thu">Donnerstag</day> + <day type="fri">Freitag</day> + <day type="sat">Samstag</day> + </dayWidth> + </dayContext> + <dayContext type="stand-alone"> + <dayWidth type="narrow"> + <day type="sun">S</day> + <day type="mon">M</day> + <day type="tue">D</day> + <day type="wed">M</day> + <day type="thu">D</day> + <day type="fri">F</day> + <day type="sat">S</day> + </dayWidth> + </dayContext> + </days> + <quarters> + <quarterContext type="format"> + <quarterWidth type="wide"> + <quarter type="1">1. Quartal</quarter> + <quarter type="2">2. Quartal</quarter> + <quarter type="3">3. Quartal</quarter> + <quarter type="4">4. Quartal</quarter> + </quarterWidth> + </quarterContext> + </quarters> + <am>vorm.</am> + <pm>nachm.</pm> + <eras> + <eraNames> + <era type="0">v. Chr.</era> + <era type="1">n. Chr.</era> + </eraNames> + <eraAbbr> + <era type="0">v. Chr.</era> + <era type="1">n. Chr.</era> + </eraAbbr> + </eras> + <dateFormats> + <dateFormatLength type="full"> + <dateFormat> + <pattern>EEEE, d. MMMM yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="long"> + <dateFormat> + <pattern>d. MMMM yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="medium"> + <dateFormat> + <pattern>dd.MM.yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="short"> + <dateFormat> + <pattern>dd.MM.yy</pattern> + </dateFormat> + </dateFormatLength> + </dateFormats> + <timeFormats> + <timeFormatLength type="full"> + <timeFormat> + <pattern>H:mm' Uhr 'z</pattern> + <pattern alt="proposed-u45-1" draft="provisional">H:mm' Uhr 'v</pattern> + </timeFormat> + </timeFormatLength> + </timeFormats> + <dateTimeFormats> + <availableFormats> + <dateFormatItem id="HHmm" draft="provisional">HH:mm</dateFormatItem> + <dateFormatItem id="HHmmss" draft="provisional">HH:mm:ss</dateFormatItem> + <dateFormatItem id="MMMMd" draft="provisional">d. MMMM</dateFormatItem> + <dateFormatItem id="MMdd" draft="provisional">dd.MM</dateFormatItem> + <dateFormatItem id="hhmm" draft="provisional">hh:mm a</dateFormatItem> + <dateFormatItem id="hhmmss" draft="provisional">hh:mm:ss a</dateFormatItem> + <dateFormatItem id="yyMM" draft="provisional">MM.yy</dateFormatItem> + <dateFormatItem id="yyQQQQ" draft="provisional">QQQQ yy</dateFormatItem> + <dateFormatItem id="yyyyMMMM" draft="provisional">MMMM yyyy</dateFormatItem> + </availableFormats> + </dateTimeFormats> + <fields> + <field type="era"> + <displayName draft="provisional">Epoche</displayName> + </field> + <field type="year"> + <displayName draft="provisional">Jahr</displayName> + </field> + <field type="month"> + <displayName draft="provisional">Monat</displayName> + </field> + <field type="week"> + <displayName draft="provisional">Woche</displayName> + </field> + <field type="day"> + <displayName draft="provisional">Tag</displayName> + </field> + <field type="weekday"> + <displayName draft="provisional">Wochentag</displayName> + </field> + <field type="dayperiod"> + <displayName draft="provisional">Tageshälfte</displayName> + </field> + <field type="hour"> + <displayName draft="provisional">Stunde</displayName> + </field> + <field type="second"> + <displayName draft="provisional">Sekunde</displayName> + </field> + </fields> + </calendar> + </calendars> + <timeZoneNames> + <zone type="Antarctica/South_Pole"> + <exemplarCity>Südpol</exemplarCity> + </zone> + <zone type="Antarctica/Vostok"> + <exemplarCity>Wostok</exemplarCity> + </zone> + <zone type="America/St_Johns"> + <exemplarCity>St. John's</exemplarCity> + </zone> + <!-- Chile --> + <zone type="Pacific/Easter"> + <exemplarCity>Osterinsel</exemplarCity> + </zone> + <zone type="Europe/Berlin"> + <long> + <standard>Mitteleuropäische Zeit</standard> + <daylight>Mitteleuropäische Sommerzeit</daylight> + </long> + <short> + <standard>MEZ</standard> + <daylight>MESZ</daylight> + </short> + <exemplarCity>Berlin</exemplarCity> + </zone> + <!-- Spain --> + <zone type="Atlantic/Canary"> + <exemplarCity>Kanaren</exemplarCity> + </zone> + <zone type="Asia/Ulaanbaatar"> + <exemplarCity>Ulan-Bator</exemplarCity> + </zone> + <zone type="America/Mexico_City"> + <exemplarCity>Mexiko-Stadt</exemplarCity> + </zone> + <zone type="Atlantic/Azores"> + <exemplarCity>Azoren</exemplarCity> + </zone> + <zone type="Europe/Lisbon"> + <exemplarCity>Lissabon</exemplarCity> + </zone> + <zone type="Europe/Moscow"> + <exemplarCity>Moskau</exemplarCity> + </zone> + <zone type="Asia/Yekaterinburg"> + <exemplarCity>Jekaterinburg</exemplarCity> + </zone> + <zone type="Asia/Novosibirsk"> + <exemplarCity>Nowosibirsk</exemplarCity> + </zone> + <zone type="Asia/Krasnoyarsk"> + <exemplarCity>Krasnojarsk</exemplarCity> + </zone> + <zone type="Asia/Yakutsk"> + <exemplarCity>Jakutsk</exemplarCity> + </zone> + <zone type="Asia/Vladivostok"> + <exemplarCity>Wladiwostok</exemplarCity> + </zone> + <zone type="Asia/Sakhalin"> + <exemplarCity>Sachalin</exemplarCity> + </zone> + <zone type="Asia/Kamchatka"> + <exemplarCity>Kamtschatka</exemplarCity> + </zone> + <!-- Ukraine --> + <zone type="Europe/Uzhgorod"> + <exemplarCity>Uschgorod</exemplarCity> + </zone> + <zone type="Europe/Kiev"> + <exemplarCity>Kiew</exemplarCity> + </zone> + <zone type="Europe/Zaporozhye"> + <exemplarCity>Saporischja</exemplarCity> + </zone> + <zone type="Asia/Tashkent"> + <exemplarCity>Taschkent</exemplarCity> + </zone> + </timeZoneNames> + </dates> + <numbers> + <symbols> + <decimal>,</decimal> + <group>.</group> + </symbols> + <percentFormats> + <percentFormatLength> + <percentFormat> + <pattern draft="provisional">#,##0 %</pattern> + </percentFormat> + </percentFormatLength> + </percentFormats> + <currencies> + <currency type="ADP"> + <displayName>Andorranische Pesete</displayName> + </currency> + <currency type="AED"> + <displayName>UAE Dirham</displayName> + </currency> + <currency type="AFA"> + <displayName>Afghani (1927-2002)</displayName> + </currency> + <currency type="AFN"> + <displayName>Afghani</displayName> + <symbol>Af</symbol> + </currency> + <currency type="ALL"> + <displayName>Lek</displayName> + </currency> + <currency type="AMD"> + <displayName>Dram</displayName> + </currency> + <currency type="ANG"> + <displayName>Niederl. Antillen Gulden</displayName> + </currency> + <currency type="AOA"> + <displayName>Kwanza</displayName> + </currency> + <currency type="AOK"> + <displayName>Angolanischer Kwanza (1977-1990)</displayName> + </currency> + <currency type="AON"> + <displayName>Neuer Kwanza</displayName> + </currency> + <currency type="AOR"> + <displayName>Kwanza Reajustado</displayName> + </currency> + <currency type="ARA"> + <displayName>Argentinischer Austral</displayName> + </currency> + <currency type="ARP"> + <displayName>Argentinischer Peso (1983-1985)</displayName> + </currency> + <currency type="ARS"> + <displayName>Argentinischer Peso</displayName> + </currency> + <currency type="ATS"> + <displayName>Österreichischer Schilling</displayName> + <symbol>öS</symbol> + </currency> + <currency type="AUD"> + <displayName>Australischer Dollar</displayName> + </currency> + <currency type="AWG"> + <displayName>Aruba Florin</displayName> + </currency> + <currency type="AZM"> + <displayName>Aserbeidschan Manat</displayName> + </currency> + <currency type="BAD"> + <displayName>Bosnien und Herzegowina Dinar</displayName> + </currency> + <currency type="BAM"> + <displayName>Konvertierbare Mark</displayName> + </currency> + <currency type="BBD"> + <displayName>Barbados-Dollar</displayName> + </currency> + <currency type="BDT"> + <displayName>Taka</displayName> + </currency> + <currency type="BEC"> + <displayName>Belgischer Franc (konvertibel)</displayName> + </currency> + <currency type="BEF"> + <displayName>Belgischer Franc</displayName> + </currency> + <currency type="BGL"> + <displayName>Lew (1962-1999)</displayName> + <displayName references="RP10" alt="proposed-u212-2" draft="provisional">Bulgarischer Lew (1962-1999)</displayName> + </currency> + <currency type="BGN"> + <displayName>Lew</displayName> + <displayName references="RP10" alt="proposed-u212-2" draft="unconfirmed">Bulgarischer Lew</displayName> + <displayName alt="proposed-u45-1" draft="provisional">Neuer Bulgarischer Lew</displayName> + </currency> + <currency type="BHD"> + <displayName>Bahrain-Dinar</displayName> + </currency> + <currency type="BIF"> + <displayName>Burundi-Franc</displayName> + </currency> + <currency type="BMD"> + <displayName>Bermuda-Dollar</displayName> + </currency> + <currency type="BND"> + <displayName>Brunei-Dollar</displayName> + </currency> + <currency type="BOB"> + <displayName>Boliviano</displayName> + </currency> + <currency type="BOP"> + <displayName>Bolivianischer Peso</displayName> + </currency> + <currency type="BOV"> + <displayName>Mvdol</displayName> + </currency> + <currency type="BRB"> + <displayName>Brasilianischer Cruzeiro Novo (1967-1986)</displayName> + </currency> + <currency type="BRC"> + <displayName>Brasilianischer Cruzado</displayName> + </currency> + <currency type="BRE"> + <displayName>Brasilianischer Cruzeiro (1990-1993)</displayName> + </currency> + <currency type="BRL"> + <displayName>Real</displayName> + </currency> + <currency type="BRN"> + <displayName>Brasilianischer Cruzado Novo</displayName> + </currency> + <currency type="BRR"> + <displayName>Brasilianischer Cruzeiro</displayName> + </currency> + <currency type="BSD"> + <displayName>Bahama-Dollar</displayName> + </currency> + <currency type="BTN"> + <displayName>Ngultrum</displayName> + </currency> + <currency type="BUK"> + <displayName>Birmanischer Kyat</displayName> + </currency> + <currency type="BWP"> + <displayName>Pula</displayName> + </currency> + <currency type="BYB"> + <displayName>Belarus Rubel (alt)</displayName> + </currency> + <currency type="BYR"> + <displayName>Belarus Rubel (neu)</displayName> + </currency> + <currency type="BZD"> + <displayName>Belize-Dollar</displayName> + </currency> + <currency type="CAD"> + <displayName>Kanadischer Dollar</displayName> + </currency> + <currency type="CDF"> + <displayName>Franc congolais</displayName> + </currency> + <currency type="CHE"> + <displayName draft="provisional">WIR Euro</displayName> + </currency> + <currency type="CHF"> + <displayName>Schweizer Franken</displayName> + <symbol>SFr.</symbol> + </currency> + <currency type="CHW"> + <displayName draft="provisional">WIR Franken</displayName> + </currency> + <currency type="CLF"> + <displayName>Unidades de Fomento</displayName> + </currency> + <currency type="CLP"> + <displayName>Chilenischer Peso</displayName> + </currency> + <currency type="CNY"> + <displayName>Renminbi Yuan</displayName> + </currency> + <currency type="COP"> + <displayName>Kolumbianischer Peso</displayName> + </currency> + <currency type="COU"> + <displayName draft="provisional">Unidad de Valor Real</displayName> + </currency> + <currency type="CRC"> + <displayName>Costa Rica Colon</displayName> + </currency> + <currency type="CSD"> + <displayName draft="provisional">Serbischer Dinar</displayName> + </currency> + <currency type="CSK"> + <displayName draft="provisional">Tschechoslowakische Krone</displayName> + </currency> + <currency type="CUP"> + <displayName>Kubanischer Peso</displayName> + </currency> + <currency type="CVE"> + <displayName>Kap Verde Escudo</displayName> + </currency> + <currency type="CYP"> + <displayName>Zypern Pfund</displayName> + </currency> + <currency type="CZK"> + <displayName>Tschechische Krone</displayName> + </currency> + <currency type="DDM"> + <displayName draft="provisional">Mark der DDR</displayName> + </currency> + <currency type="DEM"> + <displayName>Deutsche Mark</displayName> + <symbol>DM</symbol> + </currency> + <currency type="DJF"> + <displayName>Dschibuti-Franc</displayName> + </currency> + <currency type="DKK"> + <displayName>Dänische Krone</displayName> + </currency> + <currency type="DOP"> + <displayName>Dominikanischer Peso</displayName> + </currency> + <currency type="DZD"> + <displayName>Algerischer Dinar</displayName> + </currency> + <currency type="ECS"> + <displayName>Ecuadorianischer Sucre</displayName> + </currency> + <currency type="ECV"> + <displayName>Verrechnungseinheit für EC</displayName> + </currency> + <currency type="EEK"> + <displayName>Estnische Krone</displayName> + </currency> + <currency type="EGP"> + <displayName>Ägyptisches Pfund</displayName> + </currency> + <currency type="EQE"> + <displayName draft="provisional">Ekwele</displayName> + </currency> + <currency type="ERN"> + <displayName>Nakfa</displayName> + </currency> + <currency type="ESA"> + <displayName references="RP10" draft="provisional">Spanische Peseta (A-Konten)</displayName> + </currency> + <currency type="ESB"> + <displayName references="RP10" draft="provisional">Spanische Peseta (konvertibel)</displayName> + </currency> + <currency type="ESP"> + <displayName>Spanische Pesete</displayName> + </currency> + <currency type="ETB"> + <displayName>Birr</displayName> + </currency> + <currency type="EUR"> + <displayName>Euro</displayName> + </currency> + <currency type="FIM"> + <displayName>Finnische Mark</displayName> + </currency> + <currency type="FJD"> + <displayName>Fidschi Dollar</displayName> + </currency> + <currency type="FKP"> + <displayName>Falkland Pfund</displayName> + </currency> + <currency type="FRF"> + <displayName>Französischer Franc</displayName> + <symbol>FF</symbol> + </currency> + <currency type="GBP"> + <displayName>Pfund Sterling</displayName> + </currency> + <currency type="GEK"> + <displayName>Georgischer Kupon Larit</displayName> + </currency> + <currency type="GEL"> + <displayName>Georgischer Lari</displayName> + </currency> + <currency type="GHC"> + <displayName>Cedi</displayName> + </currency> + <currency type="GIP"> + <displayName>Gibraltar Pfund</displayName> + </currency> + <currency type="GMD"> + <displayName>Dalasi</displayName> + </currency> + <currency type="GNF"> + <displayName>Guinea Franc</displayName> + </currency> + <currency type="GNS"> + <displayName references="RP10" draft="provisional">Guineischer Syli</displayName> + </currency> + <currency type="GQE"> + <displayName>Äquatorialguinea Ekwele Guineana</displayName> + </currency> + <currency type="GRD"> + <displayName>Griechische Drachme</displayName> + </currency> + <currency type="GTQ"> + <displayName>Quetzal</displayName> + </currency> + <currency type="GWE"> + <displayName>Portugiesisch Guinea Escudo</displayName> + </currency> + <currency type="GWP"> + <displayName>Guinea Bissau Peso</displayName> + </currency> + <currency type="GYD"> + <displayName>Guyana Dollar</displayName> + </currency> + <currency type="HKD"> + <displayName>Hongkong Dollar</displayName> + </currency> + <currency type="HNL"> + <displayName>Lempira</displayName> + </currency> + <currency type="HRD"> + <displayName>Kroatischer Dinar</displayName> + </currency> + <currency type="HRK"> + <displayName>Kuna</displayName> + </currency> + <currency type="HTG"> + <displayName>Gourde</displayName> + </currency> + <currency type="HUF"> + <displayName>Forint</displayName> + </currency> + <currency type="IDR"> + <displayName>Rupiah</displayName> + </currency> + <currency type="IEP"> + <displayName>Irisches Pfund</displayName> + </currency> + <currency type="ILP"> + <displayName>Israelisches Pfund</displayName> + </currency> + <currency type="ILS"> + <displayName>Schekel</displayName> + </currency> + <currency type="INR"> + <displayName>Indische Rupie</displayName> + </currency> + <currency type="IQD"> + <displayName>Irak Dinar</displayName> + </currency> + <currency type="IRR"> + <displayName>Rial</displayName> + </currency> + <currency type="ISK"> + <displayName>Isländische Krone</displayName> + </currency> + <currency type="ITL"> + <displayName>Italienische Lire</displayName> + <displayName alt="proposed-u45-1" draft="provisional">Italienische Lira</displayName> + </currency> + <currency type="JMD"> + <displayName>Jamaika Dollar</displayName> + </currency> + <currency type="JOD"> + <displayName>Jordanischer Dinar</displayName> + </currency> + <currency type="JPY"> + <displayName>Yen</displayName> + </currency> + <currency type="KES"> + <displayName>Kenia Schilling</displayName> + </currency> + <currency type="KGS"> + <displayName>Som</displayName> + <symbol>som</symbol> + </currency> + <currency type="KHR"> + <displayName>Riel</displayName> + </currency> + <currency type="KMF"> + <displayName>Komoren Franc</displayName> + </currency> + <currency type="KPW"> + <displayName>Nordkoreanischer Won</displayName> + </currency> + <currency type="KRW"> + <displayName>Südkoreanischer Won</displayName> + </currency> + <currency type="KWD"> + <displayName>Kuwait Dinar</displayName> + </currency> + <currency type="KYD"> + <displayName>Kaiman-Dollar</displayName> + </currency> + <currency type="KZT"> + <displayName>Tenge</displayName> + </currency> + <currency type="LAK"> + <displayName>Kip</displayName> + </currency> + <currency type="LBP"> + <displayName>Libanesisches Pfund</displayName> + </currency> + <currency type="LKR"> + <displayName>Sri Lanka Rupie</displayName> + </currency> + <currency type="LRD"> + <displayName>Liberianischer Dollar</displayName> + </currency> + <currency type="LSL"> + <displayName>Loti</displayName> + </currency> + <currency type="LSM"> + <displayName draft="provisional">Maloti</displayName> + </currency> + <currency type="LTL"> + <displayName>Litauischer Litas</displayName> + </currency> + <currency type="LTT"> + <displayName>Litauischer Talonas</displayName> + </currency> + <currency type="LUC"> + <displayName draft="provisional">Luxemburgischer Franc (konvertibel)</displayName> + </currency> + <currency type="LUF"> + <displayName>Luxemburgischer Franc</displayName> + </currency> + <currency type="LUL"> + <displayName draft="provisional">Luxemburgischer Finanz-Franc</displayName> + </currency> + <currency type="LVL"> + <displayName>Lettischer Lats</displayName> + </currency> + <currency type="LVR"> + <displayName>Lettischer Rubel</displayName> + </currency> + <currency type="LYD"> + <displayName>Libyscher Dinar</displayName> + </currency> + <currency type="MAD"> + <displayName>Marokkanischer Dirham</displayName> + </currency> + <currency type="MAF"> + <displayName>Marokkanischer Franc</displayName> + </currency> + <currency type="MDL"> + <displayName>Moldau Leu</displayName> + </currency> + <currency type="MGA"> + <displayName>Madagaskar Ariary</displayName> + </currency> + <currency type="MGF"> + <displayName>Madagaskar Franc</displayName> + </currency> + <currency type="MKD"> + <displayName>Denar</displayName> + </currency> + <currency type="MLF"> + <displayName draft="provisional">Malischer Franc</displayName> + </currency> + <currency type="MMK"> + <displayName>Kyat</displayName> + </currency> + <currency type="MNT"> + <displayName>Tugrik</displayName> + </currency> + <currency type="MOP"> + <displayName>Pataca</displayName> + </currency> + <currency type="MRO"> + <displayName>Ouguiya</displayName> + </currency> + <currency type="MTL"> + <displayName>Maltesische Lira</displayName> + </currency> + <currency type="MTP"> + <displayName>Maltesisches Pfund</displayName> + </currency> + <currency type="MUR"> + <displayName>Mauritius Rupie</displayName> + </currency> + <currency type="MVR"> + <displayName>Rufiyaa</displayName> + </currency> + <currency type="MWK"> + <displayName>Malawi Kwacha</displayName> + </currency> + <currency type="MXN"> + <displayName>Mexikanischer Peso</displayName> + </currency> + <currency type="MXP"> + <displayName>Mexikanischer Silber-Peso (1861-1992)</displayName> + </currency> + <currency type="MXV"> + <displayName>Mexican Unidad de Inversion (UDI)</displayName> + </currency> + <currency type="MYR"> + <displayName>Malaysischer Ringgit</displayName> + </currency> + <currency type="MZE"> + <displayName draft="provisional">Mosambikanischer Escudo</displayName> + </currency> + <currency type="MZM"> + <displayName>Metical</displayName> + </currency> + <currency type="NAD"> + <displayName>Namibia Dollar</displayName> + </currency> + <currency type="NGN"> + <displayName>Naira</displayName> + </currency> + <currency type="NIC"> + <displayName>Cordoba</displayName> + </currency> + <currency type="NIO"> + <displayName>Gold-Cordoba</displayName> + </currency> + <currency type="NLG"> + <displayName>Holländischer Gulden</displayName> + </currency> + <currency type="NOK"> + <displayName>Norwegische Krone</displayName> + </currency> + <currency type="NPR"> + <displayName>Nepalesische Rupie</displayName> + </currency> + <currency type="NZD"> + <displayName>Neuseeland Dollar</displayName> + </currency> + <currency type="OMR"> + <displayName>Rial Omani</displayName> + </currency> + <currency type="PAB"> + <displayName>Balboa</displayName> + </currency> + <currency type="PEI"> + <displayName>Peruanischer Inti</displayName> + </currency> + <currency type="PEN"> + <displayName>Neuer Sol</displayName> + </currency> + <currency type="PES"> + <displayName>Sol</displayName> + </currency> + <currency type="PGK"> + <displayName>Kina</displayName> + </currency> + <currency type="PHP"> + <displayName>Philippinischer Peso</displayName> + </currency> + <currency type="PKR"> + <displayName>Pakistanische Rupie</displayName> + </currency> + <currency type="PLN"> + <displayName>Zloty</displayName> + </currency> + <currency type="PLZ"> + <displayName>Zloty (1950-1995)</displayName> + </currency> + <currency type="PTE"> + <displayName>Portugiesischer Escudo</displayName> + </currency> + <currency type="PYG"> + <displayName>Guarani</displayName> + </currency> + <currency type="QAR"> + <displayName>Katar Riyal</displayName> + </currency> + <currency type="RHD"> + <displayName draft="provisional">Rhodesischer Dollar</displayName> + </currency> + <currency type="ROL"> + <displayName>Leu</displayName> + </currency> + <currency type="RON"> + <displayName references="RP10" draft="provisional">Neuer Rumänischer Leu</displayName> + </currency> + <currency type="RUB"> + <displayName>Russischer Rubel (neu)</displayName> + </currency> + <currency type="RUR"> + <displayName>Russischer Rubel (alt)</displayName> + </currency> + <currency type="RWF"> + <displayName>Ruanda Franc</displayName> + </currency> + <currency type="SAR"> + <displayName>Saudi Riyal</displayName> + </currency> + <currency type="SBD"> + <displayName>Salomonen Dollar</displayName> + </currency> + <currency type="SCR"> + <displayName>Seychellen Rupie</displayName> + </currency> + <currency type="SDD"> + <displayName>Sudanesischer Dinar</displayName> + </currency> + <currency type="SDP"> + <displayName>Sudanesisches Pfund</displayName> + </currency> + <currency type="SEK"> + <displayName>Schwedische Krone</displayName> + </currency> + <currency type="SGD"> + <displayName>Singapur Dollar</displayName> + </currency> + <currency type="SHP"> + <displayName>St. Helena Pfund</displayName> + </currency> + <currency type="SIT"> + <displayName>Tolar</displayName> + </currency> + <currency type="SKK"> + <displayName>Slowakische Krone</displayName> + </currency> + <currency type="SLL"> + <displayName>Leone</displayName> + </currency> + <currency type="SOS"> + <displayName>Somalia Schilling</displayName> + </currency> + <currency type="SRD"> + <displayName references="RP10" draft="provisional">Surinamischer Dollar</displayName> + </currency> + <currency type="SRG"> + <displayName>Suriname Gulden</displayName> + </currency> + <currency type="STD"> + <displayName>Dobra</displayName> + </currency> + <currency type="SUR"> + <displayName>Sowjetischer Rubel</displayName> + </currency> + <currency type="SVC"> + <displayName>El Salvador Colon</displayName> + </currency> + <currency type="SYP"> + <displayName>Syrisches Pfund</displayName> + </currency> + <currency type="SZL"> + <displayName>Lilangeni</displayName> + </currency> + <currency type="THB"> + <displayName>Baht</displayName> + </currency> + <currency type="TJR"> + <displayName>Tadschikistan Rubel</displayName> + </currency> + <currency type="TJS"> + <displayName>Tadschikistan Somoni</displayName> + </currency> + <currency type="TMM"> + <displayName>Turkmenistan-Manat</displayName> + </currency> + <currency type="TND"> + <displayName>Tunesischer Dinar</displayName> + </currency> + <currency type="TOP"> + <displayName>Paʻanga</displayName> + </currency> + <currency type="TPE"> + <displayName>Timor Escudo</displayName> + </currency> + <currency type="TRL"> + <displayName>Türkische Lira</displayName> + </currency> + <currency type="TRY"> + <displayName>Neue Türkische Lira</displayName> + </currency> + <currency type="TTD"> + <displayName>Trinidad und Tobago Dollar</displayName> + </currency> + <currency type="TWD"> + <displayName>Neuer Taiwan Dollar</displayName> + </currency> + <currency type="TZS"> + <displayName>Tansania Schilling</displayName> + </currency> + <currency type="UAH"> + <displayName>Hryvnia</displayName> + </currency> + <currency type="UAK"> + <displayName>Ukrainischer Karbovanetz</displayName> + </currency> + <currency type="UGS"> + <displayName>Uganda Schilling (1966-1987)</displayName> + </currency> + <currency type="UGX"> + <displayName>Uganda Schilling</displayName> + </currency> + <currency type="USD"> + <displayName>US Dollar</displayName> + </currency> + <currency type="USN"> + <displayName>US Dollar (Nächster Tag)</displayName> + </currency> + <currency type="USS"> + <displayName>US Dollar (Gleicher Tag)</displayName> + </currency> + <currency type="UYP"> + <displayName references="RP10" draft="provisional">Uruguayischer Neuer Peso (1975-1993)</displayName> + </currency> + <currency type="UYU"> + <displayName>Uruguayischer Peso</displayName> + </currency> + <currency type="UZS"> + <displayName>Usbekistan Sum</displayName> + </currency> + <currency type="VEB"> + <displayName>Bolivar</displayName> + </currency> + <currency type="VND"> + <displayName>Dong</displayName> + </currency> + <currency type="VUV"> + <displayName>Vatu</displayName> + </currency> + <currency type="WST"> + <displayName>Tala</displayName> + </currency> + <currency type="XAF"> + <displayName>CFA Franc (Äquatorial)</displayName> + </currency> + <currency type="XAG"> + <displayName draft="provisional">Silber</displayName> + </currency> + <currency type="XAU"> + <displayName>Gold</displayName> + </currency> + <currency type="XBA"> + <displayName>Europäische Rechnungseinheit</displayName> + </currency> + <currency type="XBB"> + <displayName draft="provisional">Europäische Währungseinheit (XBB)</displayName> + </currency> + <currency type="XBC"> + <displayName>Europäische Rechnungseinheit (XBC)</displayName> + </currency> + <currency type="XBD"> + <displayName>Europäische Rechnungseinheit (XBD)</displayName> + </currency> + <currency type="XCD"> + <displayName>Ostkaribischer Dollar</displayName> + <symbol>EC$</symbol> + </currency> + <currency type="XDR"> + <displayName>Sonderziehungsrechte</displayName> + </currency> + <currency type="XEU"> + <displayName draft="provisional">Europäische Währungseinheit (XEU)</displayName> + </currency> + <currency type="XFO"> + <displayName>Französischer Gold-Franc</displayName> + </currency> + <currency type="XFU"> + <displayName>Französischer UIC-Franc</displayName> + </currency> + <currency type="XOF"> + <displayName>CFA Franc (West)</displayName> + </currency> + <currency type="XPD"> + <displayName draft="provisional">Palladium</displayName> + </currency> + <currency type="XPF"> + <displayName>CFP Franc</displayName> + </currency> + <currency type="XPT"> + <displayName draft="provisional">Platin</displayName> + </currency> + <currency type="XRE"> + <displayName draft="provisional">RINET Funds</displayName> + </currency> + <currency type="XTS"> + <displayName draft="provisional">Testwährung</displayName> + </currency> + <currency type="XXX"> + <displayName draft="unconfirmed">keine Währung</displayName> + </currency> + <currency type="YDD"> + <displayName>Jemen Dinar</displayName> + </currency> + <currency type="YER"> + <displayName>Jemen Rial</displayName> + </currency> + <currency type="YUD"> + <displayName>Jugoslawischer Dinar (1966-1990)</displayName> + </currency> + <currency type="YUM"> + <displayName>Neuer Dinar</displayName> + </currency> + <currency type="YUN"> + <displayName>Jugoslawischer Dinar (konvertibel)</displayName> + </currency> + <currency type="ZAR"> + <displayName>Rand</displayName> + </currency> + <currency type="ZMK"> + <displayName>Kwacha</displayName> + </currency> + <currency type="ZRN"> + <displayName>Neuer Zaire</displayName> + </currency> + <currency type="ZRZ"> + <displayName>Zaire</displayName> + </currency> + <currency type="ZWD"> + <displayName>Simbabwe Dollar</displayName> + </currency> + </currencies> + </numbers> + <posix> + <messages> + <yesstr>ja:j</yesstr> + <nostr>nein:n</nostr> + </messages> + </posix> + <references> + <reference type="RP1" uri="http://www2.bibliothek.uni-augsburg.de/kfe/kkb_mab_037.html">Languages</reference> + <reference type="RP10" uri="http://www.ids-mannheim.de/reform/regelwerk.pdf">German spelling, official new rules (for capitalization see pp. 51, 64-67 = §§ 60-64)</reference> + <reference type="RP11" uri="http://de.wikipedia.org/wiki/Angloamerikanisches_Ma%C3%9Fsystem">US measurement system in German</reference> + <reference type="RP2" uri="http://www.allegro-c.de/formate/sprachen.htm">Languages 2</reference> + <reference type="RP3" uri="http://www.metatab.de/meta_tags/sprachenkuerzel2.htm">Languages 3</reference> + <reference type="RP4" uri="http://www.auswaertiges-amt.de/www/de/infoservice/download/pdf/publikationen/staatennamen.pdf">Territories</reference> + <reference type="RP5" uri="http://de.wikipedia.org/wiki/Liste_der_Unicode-Blöcke">Scripts</reference> + <reference type="RP6" uri="http://www.oenb.at/ebusinesscodes/isocodes?lang=de&mode=isocodes">Currencies</reference> + <reference type="RP7" uri="http://de.wikipedia.org/wiki/ISO_4217">Currencies 2</reference> + <reference type="RP8" uri="http://de.wikipedia.org/wiki/Prozent">Prozent</reference> + <reference type="RP9" uri="http://afrika.heim.at">Territories of Africa in German</reference> + </references> +</ldml> +<!-- Old Comments. See root.xml for more info. +URL: http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/de.txt?only_with_tag=final-update-LDML + +Country names in de, de_AT, and de_CH are short names from the +list of names maintained by the German +Federal Permanent Committee for Geographic Names, +Sta"ndiger Ausschuss fu"r Geographische Namen (StAGN), +as published at its web site at +http://www.ifag.de/kartographie/Stagn/Staatennamen.htm +Date there: 1999-apr-19 +Note 2003-sep-19: The site seems to have moved to +http://www.bkg.bund.de/kartographie/stagn/Staatennamen.htm +This shouldn't be used, but valid data should be here. +vorm. -> vormittags -> in the morning +nachm. -> nachmittags -> in the afternoon +Currency display names +See for example "W\u00e4hrungscodes" at +http://www-cik.uni-paderborn.de/vddk/Dokumentationen/Dokumentation_IDM_1_3/ISO-Tabellen/Wahrungscodes/body_wahrungscodes.html +(On the page it says "Quelle: gem\u00e4\u00df ISO 4217 3-alpha-code (Stand: Juli 2000)" +and "Verzeichnis der ISO-Codes f\u00FCr W\u00e4hrung mit Land".) +See also http://umrechnen.de/ + BOV { "BOV", "Mvdol" } // financial instrument +BY { "Belarus" } // AKA Wei\u00DFrussland +CI { "C\u00F4te d\u0092Ivoire" } +RE { "R\u00E9union" } +some entries that are not in the official list: +For the languages, I am trying to use the adjective list in the +official list of country names. +Sometimes I am guessing. +Markus Scherer, 2000jun01 +I just found http://suchfix.uni-muenster.de/vifanie/NedGuideDt/help/languagecode.html +(which is not entirely reliable, contains some English names). +Generally cross-checking with google.de (search for the language name + "Sprache") +and with other CLDR data. +Markus 2003-dec-12 +Fallback{ "en" } // commented out because it's too unreliable +in { "Indonesisch" } // Use "id" instead +iw { "Hebr\u00e4isch" }// Use he instead +ji { "Jiddisch" } // Use "yi" instead +jw { "Javanisch" } // Use jv instead + jv { "Javanisch" } // more google.de hits than Javanesisch + la { "Latein" } // Lateinisch doesn't seem correct + ml { "Malayalam" } // do not confuse with ms Malaiisch + ms { "Malaiisch" } // less often: Malaysisch, Malayisch + nl { "Niederl\u00e4ndisch" } // "Holl\u00e4ndisch" is not correct + om { "Oromo" } // also mentioned: Afan, Oromiffa + rw { "Rwanda-Sprache" } // Kinyarwanda? + sd { "Sindhi" } // less often Zinti + sn { "Shona" } // looks like Shona is a language in Zimbabwe while Schonisch is a Danish dialect + so { "Somali" } // "Somalisch" is the adjectiv in the country list but less frequent on google.de + tk { "Turkmenisch" } // "T\u00fcrkmenisch" is a typo + tn { "Tswana-Sprache" } // language of Botswana, also Tswana, very rarely Tsuana; Sezuan is in China + tw { "Twi" } // spoken in Ghana + wo { "Wolof" } // in Senegal + xh { "Xhosa" } // in South Africa + za { "Zhuang" } // in China + zap { "Zapotekisch" } // in Mexico + "Latn", // ISO 15924 Name +I "verified" each of these by searching www.google.de for +"Bopomofo Schrift", "Koptische Schrift", etc. +Ones that are commented out and have no further comment I don't know +and could not find. +Note: The script names in German that are used directly as English or +native transliterated names are often used with a dash between them and +"Schrift", e.g., "Kannada-Schrift". +Other script names are used as in "Arabische Schrift". +Sometimes I included "Schrift" in the display name here because it +would not make any sense without it, even with "Schrift" in a higher-level +menu or similar. +markus 2003-nov-20 +Buhd { "Buhid" } +Cans { "Unified Canadian Aboriginal Symbols" } +Dsrt { "Deseret" } +Hano { "Hanunoo" } +Shaw { "Shavian" } +Tagb { "Tagbanwa" } +Tale { "Tai Le" } +Thaa { "Thaana" } +Thai { "Thai" } // Just happens to be a duplicate - in German, too + +Comments without bases + + Kiribati - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Enderbury"] + Marshall Islands - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Kwajalein"] + Mali - was on: /ldml/dates/timeZoneNames/zone[@type="Africa/Bamako"] + Ecuador - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Galapagos"] + Indonesia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Jakarta"] + Russia - was on: /ldml/dates/timeZoneNames/zone[@type="Europe/Kaliningrad"] + United States - was on: /ldml/dates/timeZoneNames/zone[@type="America/Adak"] + Kazakhstan - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Aqtau"] + Portugal - was on: /ldml/dates/timeZoneNames/zone[@type="Atlantic/Madeira"] + Brazil - was on: /ldml/dates/timeZoneNames/zone[@type="America/Eirunepe"] + Antarctica - was on: /ldml/dates/timeZoneNames/zone[@type="Antarctica/Rothera"] + Malaysia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Kuala_Lumpur"] + Canada - was on: /ldml/dates/timeZoneNames/zone[@type="America/Dawson"] + Micronesia - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Yap"] + Argentina - was on: /ldml/dates/timeZoneNames/zone[@type="America/Argentina/Rio_Gallegos"] + United States Minor Outlying Islands - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Midway"] + Mexico - was on: /ldml/dates/timeZoneNames/zone[@type="America/Tijuana"] + Democratic Republic of the Congo - was on: /ldml/dates/timeZoneNames/zone[@type="Africa/Kinshasa"] + United Kingdom - was on: /ldml/dates/timeZoneNames/zone[@type="Europe/Belfast"] + French Polynesia - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Tahiti"] + New Zealand - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Chatham"] + Greenland - was on: /ldml/dates/timeZoneNames/zone[@type="America/Thule"] + Mongolia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Hovd"] + Uzbekistan - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Samarkand"] + Svalbard and Jan Mayen - was on: /ldml/dates/timeZoneNames/zone[@type="Atlantic/Jan_Mayen"] + Australia - was on: /ldml/dates/timeZoneNames/zone[@type="Australia/Perth"] + China - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Kashgar"] + +Comments without bases + + <territory type="057">Mikronesien</territory> - was on: //ldml/localeDisplayNames/territories/territory[@type="057"][@alt="proposed-u212-1"] +--> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/de_DE.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/de_DE.xml new file mode 100644 index 0000000000..9064400b08 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/de_DE.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.40 $"/> + <generation date="$Date: 2006/12/08 16:29:35 $"/> + <language type="de"/> + <territory type="DE"/> + </identity> + <numbers> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>#,##0.00 ¤</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + </numbers> +</ldml> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/en.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/en.xml new file mode 100644 index 0000000000..1fc97d9905 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/en.xml @@ -0,0 +1,2303 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.117 $"/> + <generation date="$Date: 2006/12/08 16:29:36 $"/> + <language type="en"/> + </identity> + <localeDisplayNames> + <languages> + <language type="aa">Afar</language> + <language type="ab">Abkhazian</language> + <language type="ace">Achinese</language> + <language type="ach">Acoli</language> + <language type="ada">Adangme</language> + <language type="ady">Adyghe</language> + <language type="ae">Avestan</language> + <language type="af">Afrikaans</language> + <language type="afa">Afro-Asiatic (Other)</language> + <language type="afh">Afrihili</language> + <language type="ain">Ainu</language> + <language type="ak">Akan</language> + <language type="akk">Akkadian</language> + <language type="ale">Aleut</language> + <language type="alg">Algonquian Languages</language> + <language type="alt">Southern Altai</language> + <language type="am">Amharic</language> + <language type="an">Aragonese</language> + <language type="ang">Old English (ca.450-1100)</language> + <language type="anp">Angika</language> + <language type="apa">Apache Languages</language> + <language type="ar">Arabic</language> + <language type="arc">Aramaic</language> + <language type="arn">Araucanian</language> + <language type="arp">Arapaho</language> + <language type="art">Artificial (Other)</language> + <language type="arw">Arawak</language> + <language type="as">Assamese</language> + <language type="ast">Asturian</language> + <language type="ath">Athapascan Languages</language> + <language type="aus">Australian Languages</language> + <language type="av">Avaric</language> + <language type="awa">Awadhi</language> + <language type="ay">Aymara</language> + <language type="az">Azerbaijani</language> + <language type="ba">Bashkir</language> + <language type="bad">Banda</language> + <language type="bai">Bamileke Languages</language> + <language type="bal">Baluchi</language> + <language type="ban">Balinese</language> + <language type="bas">Basa</language> + <language type="bat">Baltic (Other)</language> + <language type="be">Belarusian</language> + <language type="bej">Beja</language> + <language type="bem">Bemba</language> + <language type="ber">Berber</language> + <language type="bg">Bulgarian</language> + <language type="bh">Bihari</language> + <language type="bho">Bhojpuri</language> + <language type="bi">Bislama</language> + <language type="bik">Bikol</language> + <language type="bin">Bini</language> + <language type="bla">Siksika</language> + <language type="bm">Bambara</language> + <language type="bn">Bengali</language> + <language type="bnt">Bantu</language> + <language type="bo">Tibetan</language> + <language type="br">Breton</language> + <language type="bra">Braj</language> + <language type="bs">Bosnian</language> + <language type="btk">Batak</language> + <language type="bua">Buriat</language> + <language type="bug">Buginese</language> + <language type="byn">Blin</language> + <language type="ca">Catalan</language> + <language type="cad">Caddo</language> + <language type="cai">Central American Indian (Other)</language> + <language type="car">Carib</language> + <language type="cau">Caucasian (Other)</language> + <language type="cch">Atsam</language> + <language type="ce">Chechen</language> + <language type="ceb">Cebuano</language> + <language type="cel">Celtic (Other)</language> + <language type="ch">Chamorro</language> + <language type="chb">Chibcha</language> + <language type="chg">Chagatai</language> + <language type="chk">Chuukese</language> + <language type="chm">Mari</language> + <language type="chn">Chinook Jargon</language> + <language type="cho">Choctaw</language> + <language type="chp">Chipewyan</language> + <language type="chr">Cherokee</language> + <language type="chy">Cheyenne</language> + <language type="cmc">Chamic Languages</language> + <language type="co">Corsican</language> + <language type="cop">Coptic</language> + <language type="cpe">Other English-based Creoles and Pidgins</language> + <language type="cpf">Other French-based Creoles and Pidgins</language> + <language type="cpp">Other Portuguese-based Creoles and Pidgins</language> + <language type="cr">Cree</language> + <language type="crh">Crimean Turkish; Crimean Tatar</language> + <language type="crp">Creoles and Pidgins (Other)</language> + <language type="cs">Czech</language> + <language type="csb">Kashubian</language> + <language type="cu">Church Slavic</language> + <language type="cus">Cushitic (Other)</language> + <language type="cv">Chuvash</language> + <language type="cy">Welsh</language> + <language type="da">Danish</language> + <language type="dak">Dakota</language> + <language type="dar">Dargwa</language> + <language type="day">Dayak</language> + <language type="de">German</language> + <language type="de_AT">Austrian German</language> + <language type="del">Delaware</language> + <language type="den">Slave</language> + <language type="dgr">Dogrib</language> + <language type="din">Dinka</language> + <language type="doi">Dogri</language> + <language type="dra">Dravidian (Other)</language> + <language type="dsb">Lower Sorbian</language> + <language type="dua">Duala</language> + <language type="dum">Middle Dutch</language> + <language type="dv">Divehi</language> + <language type="dyu">Dyula</language> + <language type="dz">Dzongkha</language> + <language type="ee">Ewe</language> + <language type="efi">Efik</language> + <language type="egy">Egyptian (Ancient)</language> + <language type="eka">Ekajuk</language> + <language type="el">Greek</language> + <language type="elx">Elamite</language> + <language type="en">English</language> + <language type="en_AU">Australian English</language> + <language type="en_CA">Canadian English</language> + <language type="en_GB">British English</language> + <language type="en_US">U.S. English</language> + <language type="enm">Middle English</language> + <language type="eo">Esperanto</language> + <language type="es">Spanish</language> + <language type="es_419">Latin American Spanish</language> + <language type="et">Estonian</language> + <language type="eu">Basque</language> + <language type="ewo">Ewondo</language> + <language type="fa">Persian</language> + <language type="fan">Fang</language> + <language type="fat">Fanti</language> + <language type="ff">Fulah</language> + <language type="fi">Finnish</language> + <language type="fil">Filipino</language> + <language type="fiu">Finno - Ugrian (Other)</language> + <language type="fj">Fijian</language> + <language type="fo">Faroese</language> + <language type="fon">Fon</language> + <language type="fr">French</language> + <language type="fr_CA">Canadian French</language> + <language type="fr_CH">Swiss French</language> + <language type="frm">Middle French</language> + <language type="fro">Old French</language> + <language type="frr">Northern Frisian</language> + <language type="frs">Eastern Frisian</language> + <language type="fur">Friulian</language> + <language type="fy">Western Frisian</language> + <language type="ga">Irish</language> + <language type="gaa">Ga</language> + <language type="gay">Gayo</language> + <language type="gba">Gbaya</language> + <language type="gd">Scottish Gaelic</language> + <language type="gem">Germanic (Other)</language> + <language type="gez">Geez</language> + <language type="gil">Gilbertese</language> + <language type="gl">Galician</language> + <language type="gmh">Middle High German</language> + <language type="gn">Guarani</language> + <language type="goh">Old High German</language> + <language type="gon">Gondi</language> + <language type="gor">Gorontalo</language> + <language type="got">Gothic</language> + <language type="grb">Grebo</language> + <language type="grc">Ancient Greek</language> + <language type="gsw">Swiss German</language> + <language type="gu">Gujarati</language> + <language type="gv">Manx</language> + <language type="gwi">Gwichʼin</language> + <language type="ha">Hausa</language> + <language type="hai">Haida</language> + <language type="haw">Hawaiian</language> + <language type="he">Hebrew</language> + <language type="hi">Hindi</language> + <language type="hil">Hiligaynon</language> + <language type="him">Himachali</language> + <language type="hit">Hittite</language> + <language type="hmn">Hmong</language> + <language type="ho">Hiri Motu</language> + <language type="hr">Croatian</language> + <language type="hsb">Upper Sorbian</language> + <language type="ht">Haitian</language> + <language type="hu">Hungarian</language> + <language type="hup">Hupa</language> + <language type="hy">Armenian</language> + <language type="hz">Herero</language> + <language type="ia">Interlingua</language> + <language type="iba">Iban</language> + <language type="id">Indonesian</language> + <language type="ie">Interlingue</language> + <language type="ig">Igbo</language> + <language type="ii">Sichuan Yi</language> + <language type="ijo">Ijo</language> + <language type="ik">Inupiaq</language> + <language type="ilo">Iloko</language> + <language type="inc">Indic (Other)</language> + <language type="ine">Indo-European (Other)</language> + <language type="inh">Ingush</language> + <language type="io">Ido</language> + <language type="ira">Iranian (Other)</language> + <language type="iro">Iroquoian languages</language> + <language type="is">Icelandic</language> + <language type="it">Italian</language> + <language type="iu">Inuktitut</language> + <language type="ja">Japanese</language> + <language type="jbo">Lojban</language> + <language type="jpr">Judeo-Persian</language> + <language type="jrb">Judeo-Arabic</language> + <language type="jv">Javanese</language> + <language type="ka">Georgian</language> + <language type="kaa">Kara-Kalpak</language> + <language type="kab">Kabyle</language> + <language type="kac">Kachin</language> + <language type="kaj">Jju</language> + <language type="kam">Kamba</language> + <language type="kar">Karen</language> + <language type="kaw">Kawi</language> + <language type="kbd">Kabardian</language> + <language type="kcg">Tyap</language> + <language type="kfo">Koro</language> + <language type="kg">Kongo</language> + <language type="kha">Khasi</language> + <language type="khi">Khoisan (Other)</language> + <language type="kho">Khotanese</language> + <language type="ki">Kikuyu</language> + <language type="kj">Kuanyama</language> + <language type="kk">Kazakh</language> + <language type="kl">Kalaallisut</language> + <language type="km">Khmer</language> + <language type="kmb">Kimbundu</language> + <language type="kn">Kannada</language> + <language type="ko">Korean</language> + <language type="kok">Konkani</language> + <language type="kos">Kosraean</language> + <language type="kpe">Kpelle</language> + <language type="kr">Kanuri</language> + <language type="krc">Karachay-Balkar</language> + <language type="krl">Karelian</language> + <language type="kro">Kru</language> + <language type="kru">Kurukh</language> + <language type="ks">Kashmiri</language> + <language type="ku">Kurdish</language> + <language type="kum">Kumyk</language> + <language type="kut">Kutenai</language> + <language type="kv">Komi</language> + <language type="kw">Cornish</language> + <language type="ky">Kirghiz</language> + <language type="la">Latin</language> + <language type="lad">Ladino</language> + <language type="lah">Lahnda</language> + <language type="lam">Lamba</language> + <language type="lb">Luxembourgish</language> + <language type="lez">Lezghian</language> + <language type="lg">Ganda</language> + <language type="li">Limburgish</language> + <language type="ln">Lingala</language> + <language type="lo">Lao</language> + <language type="lol">Mongo</language> + <language type="loz">Lozi</language> + <language type="lt">Lithuanian</language> + <language type="lu">Luba-Katanga</language> + <language type="lua">Luba-Lulua</language> + <language type="lui">Luiseno</language> + <language type="lun">Lunda</language> + <language type="luo">Luo</language> + <language type="lus">Lushai</language> + <language type="lv">Latvian</language> + <language type="mad">Madurese</language> + <language type="mag">Magahi</language> + <language type="mai">Maithili</language> + <language type="mak">Makasar</language> + <language type="man">Mandingo</language> + <language type="map">Austronesian</language> + <language type="mas">Masai</language> + <language type="mdf">Moksha</language> + <language type="mdr">Mandar</language> + <language type="men">Mende</language> + <language type="mg">Malagasy</language> + <language type="mga">Middle Irish</language> + <language type="mh">Marshallese</language> + <language type="mi">Maori</language> + <language type="mic">Micmac</language> + <language type="min">Minangkabau</language> + <language type="mis">Miscellaneous Languages</language> + <language type="mk">Macedonian</language> + <language type="mkh">Mon-Khmer (Other)</language> + <language type="ml">Malayalam</language> + <language type="mn">Mongolian</language> + <language type="mnc">Manchu</language> + <language type="mni">Manipuri</language> + <language type="mno">Manobo Languages</language> + <language type="mo">Moldavian</language> + <language type="moh">Mohawk</language> + <language type="mos">Mossi</language> + <language type="mr">Marathi</language> + <language type="ms">Malay</language> + <language type="mt">Maltese</language> + <language type="mul">Multiple Languages</language> + <language type="mun">Munda Languages</language> + <language type="mus">Creek</language> + <language type="mwl">Mirandese</language> + <language type="mwr">Marwari</language> + <language type="my">Burmese</language> + <language type="myn">Mayan languages</language> + <language type="myv">Erzya</language> + <language type="na">Nauru</language> + <language type="nah">Nahuatl</language> + <language type="nai">North American Indian (Other)</language> + <language type="nap">Neapolitan</language> + <language type="nb">Norwegian Bokmål</language> + <language type="nd">North Ndebele</language> + <language type="nds">Low German; Low Saxon</language> + <language type="ne">Nepali</language> + <language type="new">Newari</language> + <language type="ng">Ndonga</language> + <language type="nia">Nias</language> + <language type="nic">Niger - Kordofanian (Other)</language> + <language type="niu">Niuean</language> + <language type="nl">Dutch</language> + <language type="nl_BE">Flemish</language> + <language type="nn">Norwegian Nynorsk</language> + <language type="no">Norwegian</language> + <language type="nog">Nogai</language> + <language type="non">Norse, Old</language> + <language type="nqo">N’Ko</language> + <language type="nr">South Ndebele</language> + <language type="nso">Northern Sotho</language> + <language type="nub">Nubian Languages</language> + <language type="nv">Navajo</language> + <language type="nwc">Classical Newari</language> + <language type="ny">Nyanja; Chichewa; Chewa</language> + <language type="nym">Nyamwezi</language> + <language type="nyn">Nyankole</language> + <language type="nyo">Nyoro</language> + <language type="nzi">Nzima</language> + <language type="oc">Occitan (post 1500); Provençal</language> + <language type="oj">Ojibwa</language> + <language type="om">Oromo</language> + <language type="or">Oriya</language> + <language type="os">Ossetic</language> + <language type="osa">Osage</language> + <language type="ota">Ottoman Turkish</language> + <language type="oto">Otomian Languages</language> + <language type="pa">Punjabi</language> + <language type="paa">Papuan (Other)</language> + <language type="pag">Pangasinan</language> + <language type="pal">Pahlavi</language> + <language type="pam">Pampanga</language> + <language type="pap">Papiamento</language> + <language type="pau">Palauan</language> + <language type="peo">Old Persian</language> + <language type="phi">Philippine (Other)</language> + <language type="phn">Phoenician</language> + <language type="pi">Pali</language> + <language type="pl">Polish</language> + <language type="pon">Pohnpeian</language> + <language type="pra">Prakrit Languages</language> + <language type="pro">Old Provençal</language> + <language type="ps" references="RP1">Pashto</language> + <language type="ps" alt="variant">Pushto</language> + <language type="pt">Portuguese</language> + <language type="pt_BR">Brazilian Portuguese</language> + <language type="qu">Quechua</language> + <language type="raj">Rajasthani</language> + <language type="rap">Rapanui</language> + <language type="rar">Rarotongan</language> + <language type="rm">Rhaeto-Romance</language> + <language type="rn">Rundi</language> + <language type="ro">Romanian</language> + <language type="roa">Romance (Other)</language> + <language type="rom">Romany</language> + <language type="root">Root</language> + <language type="ru">Russian</language> + <language type="rup">Aromanian</language> + <language type="rw">Kinyarwanda</language> + <language type="sa">Sanskrit</language> + <language type="sad">Sandawe</language> + <language type="sah">Yakut</language> + <language type="sai">South American Indian (Other)</language> + <language type="sal">Salishan languages</language> + <language type="sam">Samaritan Aramaic</language> + <language type="sas">Sasak</language> + <language type="sat">Santali</language> + <language type="sc">Sardinian</language> + <language type="scn">Sicilian</language> + <language type="sco">Scots</language> + <language type="sd">Sindhi</language> + <language type="se">Northern Sami</language> + <language type="sel">Selkup</language> + <language type="sem">Semitic (Other)</language> + <language type="sg">Sango</language> + <language type="sga">Old Irish</language> + <language type="sgn">Sign Languages</language> + <language type="sh">Serbo-Croatian</language> + <language type="shn">Shan</language> + <language type="si">Sinhalese</language> + <language type="sid">Sidamo</language> + <language type="sio">Siouan Languages</language> + <language type="sit">Sino-Tibetan (Other)</language> + <language type="sk">Slovak</language> + <language type="sl">Slovenian</language> + <language type="sla">Slavic (Other)</language> + <language type="sm">Samoan</language> + <language type="sma">Southern Sami</language> + <language type="smi">Sami languages (Other)</language> + <language type="smj">Lule Sami</language> + <language type="smn">Inari Sami</language> + <language type="sms">Skolt Sami</language> + <language type="sn">Shona</language> + <language type="snk">Soninke</language> + <language type="so">Somali</language> + <language type="sog">Sogdien</language> + <language type="son">Songhai</language> + <language type="sq">Albanian</language> + <language type="sr">Serbian</language> + <language type="srn">Sranan Tongo</language> + <language type="srr">Serer</language> + <language type="ss">Swati</language> + <language type="ssa">Nilo-Saharan (Other)</language> + <language type="st">Southern Sotho</language> + <language type="su">Sundanese</language> + <language type="suk">Sukuma</language> + <language type="sus">Susu</language> + <language type="sux">Sumerian</language> + <language type="sv">Swedish</language> + <language type="sw">Swahili</language> + <language type="syr">Syriac</language> + <language type="ta">Tamil</language> + <language type="tai">Tai (Other)</language> + <language type="te">Telugu</language> + <language type="tem">Timne</language> + <language type="ter">Tereno</language> + <language type="tet">Tetum</language> + <language type="tg">Tajik</language> + <language type="th">Thai</language> + <language type="ti">Tigrinya</language> + <language type="tig">Tigre</language> + <language type="tiv">Tiv</language> + <language type="tk">Turkmen</language> + <language type="tkl">Tokelau</language> + <language type="tl">Tagalog</language> + <language type="tlh">Klingon</language> + <language type="tli">Tlingit</language> + <language type="tmh">Tamashek</language> + <language type="tn">Tswana</language> + <language type="to">Tonga (Tonga Islands)</language> + <language type="tog">Tonga (Nyasa)</language> + <language type="tpi">Tok Pisin</language> + <language type="tr">Turkish</language> + <language type="ts">Tsonga</language> + <language type="tsi">Tsimshian</language> + <language type="tt">Tatar</language> + <language type="tum">Tumbuka</language> + <language type="tup">Tupi languages</language> + <language type="tut">Altaic (Other)</language> + <language type="tvl">Tuvalu</language> + <language type="tw">Twi</language> + <language type="ty">Tahitian</language> + <language type="tyv">Tuvinian</language> + <language type="udm">Udmurt</language> + <language type="ug">Uighur</language> + <language type="uga">Ugaritic</language> + <language type="uk">Ukrainian</language> + <language type="umb">Umbundu</language> + <language type="und">Unknown or Invalid Language</language> + <language type="ur">Urdu</language> + <language type="uz">Uzbek</language> + <language type="vai">Vai</language> + <language type="ve">Venda</language> + <language type="vi">Vietnamese</language> + <language type="vo">Volapük</language> + <language type="vot">Votic</language> + <language type="wa">Walloon</language> + <language type="wak">Wakashan Languages</language> + <language type="wal">Walamo</language> + <language type="war">Waray</language> + <language type="was">Washo</language> + <language type="wen">Sorbian Languages</language> + <language type="wo">Wolof</language> + <language type="xal">Kalmyk</language> + <language type="xh">Xhosa</language> + <language type="yao">Yao</language> + <language type="yap">Yapese</language> + <language type="yi">Yiddish</language> + <language type="yo">Yoruba</language> + <language type="ypk">Yupik Languages</language> + <language type="za">Zhuang</language> + <language type="zap">Zapotec</language> + <language type="zen">Zenaga</language> + <language type="zh">Chinese</language> + <language type="zh_Hans">Simplified Chinese</language> + <language type="zh_Hant">Traditional Chinese</language> + <language type="znd">Zande</language> + <language type="zu">Zulu</language> + <language type="zun">Zuni</language> + <language type="zza">Zaza</language> + <language type="zxx">No linguistic content</language> + </languages> + <scripts> + <script type="Arab">Arabic</script> + <script type="Armn">Armenian</script> + <script type="Bali">Balinese</script> + <script type="Batk">Batak</script> + <script type="Beng">Bengali</script> + <script type="Blis">Blissymbols</script> + <script type="Bopo">Bopomofo</script> + <script type="Brah">Brahmi</script> + <script type="Brai">Braille</script> + <script type="Bugi">Buginese</script> + <script type="Buhd">Buhid</script> + <script type="Cans">Unified Canadian Aboriginal Symbols</script> + <script type="Cari">Carian</script> + <script type="Cham" references="R1">Cham</script> + <script type="Cher">Cherokee</script> + <script type="Cirt">Cirth</script> + <script type="Copt">Coptic</script> + <script type="Cprt">Cypriot</script> + <script type="Cyrl">Cyrillic</script> + <script type="Cyrs">Cyrillic (Old Church Slavonic variant)</script> + <script type="Deva">Devanagari</script> + <script type="Dsrt">Deseret</script> + <script type="Egyd">Egyptian demotic</script> + <script type="Egyh">Egyptian hieratic</script> + <script type="Egyp">Egyptian hieroglyphs</script> + <script type="Ethi">Ethiopic</script> + <script type="Geok">Khutsuri (Asomtavruli and Nuskhuri)</script> + <script type="Geor">Georgian</script> + <script type="Glag">Glagolitic</script> + <script type="Goth">Gothic</script> + <script type="Grek">Greek</script> + <script type="Gujr">Gujarati</script> + <script type="Guru">Gurmukhi</script> + <script type="Hang">Hangul</script> + <script type="Hani">Han</script> + <script type="Hano">Hanunoo</script> + <script type="Hans">Simplified Han</script> + <script type="Hant">Traditional Han</script> + <script type="Hebr">Hebrew</script> + <script type="Hira">Hiragana</script> + <script type="Hmng">Pahawh Hmong</script> + <script type="Hrkt">Katakana or Hiragana</script> + <script type="Hung">Old Hungarian</script> + <script type="Inds">Indus (Harappan)</script> + <script type="Ital">Old Italic</script> + <script type="Jpan">Japanese</script> + <script type="Java">Javanese</script> + <script type="Kali">Kayah Li</script> + <script type="Kana">Katakana</script> + <script type="Khar">Kharoshthi</script> + <script type="Khmr">Khmer</script> + <script type="Knda">Kannada</script> + <script type="Lana">Lanna</script> + <script type="Laoo">Lao</script> + <script type="Latf">Latin (Fraktur variant)</script> + <script type="Latg">Latin (Gaelic variant)</script> + <script type="Latn">Latin</script> + <script type="Lepc">Lepcha (Róng)</script> + <script type="Limb">Limbu</script> + <script type="Lina">Linear A</script> + <script type="Linb">Linear B</script> + <script type="Lyci">Lycian</script> + <script type="Lydi">Lydian</script> + <script type="Mand">Mandaean</script> + <script type="Maya">Mayan hieroglyphs</script> + <script type="Mero">Meroitic</script> + <script type="Mlym">Malayalam</script> + <script type="Mong">Mongolian</script> + <script type="Mymr">Myanmar</script> + <script type="Nkoo">N’Ko</script> + <script type="Ogam">Ogham</script> + <script type="Olck">Ol Chiki</script> + <script type="Orkh">Orkhon</script> + <script type="Orya">Oriya</script> + <script type="Osma">Osmanya</script> + <script type="Perm">Old Permic</script> + <script type="Phag">Phags-pa</script> + <script type="Phnx">Phoenician</script> + <script type="Plrd">Pollard Phonetic</script> + <script type="Qaai">Inherited</script> + <script type="Rjng">Rejang</script> + <script type="Roro">Rongorongo</script> + <script type="Runr">Runic</script> + <script type="Sara">Sarati</script> + <script type="Saur">Saurashtra</script> + <script type="Sgnw">SignWriting</script> + <script type="Shaw">Shavian</script> + <script type="Sinh">Sinhala</script> + <script type="Sund">Sundanese</script> + <script type="Sylo">Syloti Nagri</script> + <script type="Syrc">Syriac</script> + <script type="Syre">Syriac (Estrangelo variant)</script> + <script type="Syrj">Syriac (Western variant)</script> + <script type="Syrn">Syriac (Eastern variant)</script> + <script type="Tagb">Tagbanwa</script> + <script type="Tale">Tai Le</script> + <script type="Talu">New Tai Lue</script> + <script type="Taml">Tamil</script> + <script type="Telu">Telugu</script> + <script type="Teng">Tengwar</script> + <script type="Tfng">Tifinagh (Berber)</script> + <script type="Tglg">Tagalog</script> + <script type="Thaa">Thaana</script> + <script type="Thai" references="R1">Thai</script> + <script type="Tibt">Tibetan</script> + <script type="Ugar">Ugaritic</script> + <script type="Vaii">Vai</script> + <script type="Visp">Visible Speech</script> + <script type="Xpeo">Old Persian</script> + <script type="Xsux">Sumero-Akkadian Cuneiform</script> + <script type="Yiii">Yi</script> + <script type="Zxxx">Unwritten</script> + <script type="Zyyy">Common</script> + <script type="Zzzz">Unknown or Invalid Script</script> + </scripts> + <territories> + <territory type="001">World</territory> + <!-- UN codes --> + <territory type="002">Africa</territory> + <territory type="003">North America</territory> + <territory type="005">South America</territory> + <territory type="009">Oceania</territory> + <territory type="011">Western Africa</territory> + <territory type="013">Central America</territory> + <territory type="014">Eastern Africa</territory> + <territory type="015">Northern Africa</territory> + <territory type="017">Middle Africa</territory> + <territory type="018">Southern Africa</territory> + <territory type="019">Americas</territory> + <territory type="021">Northern America</territory> + <territory type="029">Caribbean</territory> + <territory type="030">Eastern Asia</territory> + <territory type="034">Southern Asia</territory> + <territory type="035">South-Eastern Asia</territory> + <territory type="039">Southern Europe</territory> + <territory type="053">Australia and New Zealand</territory> + <territory type="054">Melanesia</territory> + <territory type="057">Micronesian Region</territory> + <territory type="061">Polynesia</territory> + <territory type="062">South-Central Asia</territory> + <territory type="142">Asia</territory> + <territory type="143">Central Asia</territory> + <territory type="145">Western Asia</territory> + <territory type="150">Europe</territory> + <territory type="151">Eastern Europe</territory> + <territory type="154">Northern Europe</territory> + <territory type="155">Western Europe</territory> + <territory type="172">Commonwealth of Independent States</territory> + <territory type="200">Czechoslovakia</territory> + <territory type="419">Latin America and the Caribbean</territory> + <territory type="830">Channel Islands</territory> + <territory type="AD">Andorra</territory> + <territory type="AE">United Arab Emirates</territory> + <territory type="AF">Afghanistan</territory> + <territory type="AG">Antigua and Barbuda</territory> + <territory type="AI">Anguilla</territory> + <territory type="AL">Albania</territory> + <territory type="AM">Armenia</territory> + <territory type="AN">Netherlands Antilles</territory> + <territory type="AO">Angola</territory> + <territory type="AQ">Antarctica</territory> + <territory type="AR">Argentina</territory> + <territory type="AS">American Samoa</territory> + <territory type="AT">Austria</territory> + <territory type="AU">Australia</territory> + <territory type="AW">Aruba</territory> + <territory type="AX">Aland Islands</territory> + <territory type="AZ">Azerbaijan</territory> + <territory type="BA">Bosnia and Herzegovina</territory> + <territory type="BB">Barbados</territory> + <territory type="BD">Bangladesh</territory> + <territory type="BE">Belgium</territory> + <territory type="BF">Burkina Faso</territory> + <territory type="BG">Bulgaria</territory> + <territory type="BH">Bahrain</territory> + <territory type="BI">Burundi</territory> + <territory type="BJ">Benin</territory> + <territory type="BM">Bermuda</territory> + <territory type="BN">Brunei</territory> + <territory type="BO">Bolivia</territory> + <territory type="BQ">British Antarctic Territory</territory> + <territory type="BR">Brazil</territory> + <territory type="BS">Bahamas</territory> + <territory type="BT">Bhutan</territory> + <territory type="BV">Bouvet Island</territory> + <territory type="BW">Botswana</territory> + <territory type="BY">Belarus</territory> + <territory type="BZ">Belize</territory> + <territory type="CA">Canada</territory> + <territory type="CC">Cocos (Keeling) Islands</territory> + <territory type="CD">Congo (Kinshasa)</territory> + <territory type="CF">Central African Republic</territory> + <territory type="CG">Congo (Brazzaville)</territory> + <territory type="CH">Switzerland</territory> + <territory type="CI">Ivory Coast</territory> + <territory type="CK">Cook Islands</territory> + <territory type="CL">Chile</territory> + <territory type="CM">Cameroon</territory> + <territory type="CN">China</territory> + <territory type="CO">Colombia</territory> + <territory type="CR">Costa Rica</territory> + <territory type="CS">Serbia And Montenegro</territory> + <territory type="CT">Canton and Enderbury Islands</territory> + <territory type="CU">Cuba</territory> + <territory type="CV">Cape Verde</territory> + <territory type="CX">Christmas Island</territory> + <territory type="CY">Cyprus</territory> + <territory type="CZ">Czech Republic</territory> + <territory type="DD">East Germany</territory> + <territory type="DE">Germany</territory> + <territory type="DJ">Djibouti</territory> + <territory type="DK">Denmark</territory> + <territory type="DM">Dominica</territory> + <territory type="DO">Dominican Republic</territory> + <territory type="DZ">Algeria</territory> + <territory type="EC">Ecuador</territory> + <territory type="EE">Estonia</territory> + <territory type="EG">Egypt</territory> + <territory type="EH">Western Sahara</territory> + <territory type="ER">Eritrea</territory> + <territory type="ES">Spain</territory> + <territory type="ET">Ethiopia</territory> + <territory type="FI">Finland</territory> + <territory type="FJ">Fiji</territory> + <territory type="FK">Falkland Islands</territory> + <territory type="FM">Micronesia</territory> + <territory type="FO">Faroe Islands</territory> + <territory type="FQ">French Southern and Antarctic Territories</territory> + <territory type="FR">France</territory> + <territory type="FX">Metropolitan France</territory> + <territory type="GA">Gabon</territory> + <territory type="GB">United Kingdom</territory> + <territory type="GD">Grenada</territory> + <territory type="GE">Georgia</territory> + <territory type="GF">French Guiana</territory> + <territory type="GG">Guernsey</territory> + <territory type="GH">Ghana</territory> + <territory type="GI">Gibraltar</territory> + <territory type="GL">Greenland</territory> + <territory type="GM">Gambia</territory> + <territory type="GN">Guinea</territory> + <territory type="GP">Guadeloupe</territory> + <territory type="GQ">Equatorial Guinea</territory> + <territory type="GR">Greece</territory> + <territory type="GS">South Georgia and the South Sandwich Islands</territory> + <territory type="GT">Guatemala</territory> + <territory type="GU">Guam</territory> + <territory type="GW">Guinea-Bissau</territory> + <territory type="GY">Guyana</territory> + <territory type="HK">Hong Kong SAR China</territory> + <territory type="HM">Heard Island and McDonald Islands</territory> + <territory type="HN">Honduras</territory> + <territory type="HR">Croatia</territory> + <territory type="HT">Haiti</territory> + <territory type="HU">Hungary</territory> + <territory type="ID">Indonesia</territory> + <territory type="IE">Ireland</territory> + <territory type="IL">Israel</territory> + <territory type="IM">Isle of Man</territory> + <territory type="IN">India</territory> + <territory type="IO">British Indian Ocean Territory</territory> + <territory type="IQ">Iraq</territory> + <territory type="IR">Iran</territory> + <territory type="IS">Iceland</territory> + <territory type="IT">Italy</territory> + <territory type="JE">Jersey</territory> + <territory type="JM">Jamaica</territory> + <territory type="JO">Jordan</territory> + <territory type="JP">Japan</territory> + <territory type="JT">Johnston Island</territory> + <territory type="KE">Kenya</territory> + <territory type="KG">Kyrgyzstan</territory> + <territory type="KH">Cambodia</territory> + <territory type="KI">Kiribati</territory> + <territory type="KM">Comoros</territory> + <territory type="KN">Saint Kitts and Nevis</territory> + <territory type="KP">North Korea</territory> + <territory type="KR">South Korea</territory> + <territory type="KW">Kuwait</territory> + <territory type="KY">Cayman Islands</territory> + <territory type="KZ">Kazakhstan</territory> + <territory type="LA">Laos</territory> + <territory type="LB">Lebanon</territory> + <territory type="LC">Saint Lucia</territory> + <territory type="LI">Liechtenstein</territory> + <territory type="LK">Sri Lanka</territory> + <territory type="LR">Liberia</territory> + <territory type="LS">Lesotho</territory> + <territory type="LT">Lithuania</territory> + <territory type="LU">Luxembourg</territory> + <territory type="LV">Latvia</territory> + <territory type="LY">Libya</territory> + <territory type="MA">Morocco</territory> + <territory type="MC">Monaco</territory> + <territory type="MD">Moldova</territory> + <territory type="ME">Montenegro</territory> + <territory type="MG">Madagascar</territory> + <territory type="MH">Marshall Islands</territory> + <territory type="MI">Midway Islands</territory> + <territory type="MK">Macedonia</territory> + <territory type="ML">Mali</territory> + <territory type="MM">Myanmar</territory> + <territory type="MN">Mongolia</territory> + <territory type="MO">Macao SAR China</territory> + <territory type="MP">Northern Mariana Islands</territory> + <territory type="MQ">Martinique</territory> + <territory type="MR">Mauritania</territory> + <territory type="MS">Montserrat</territory> + <territory type="MT">Malta</territory> + <territory type="MU">Mauritius</territory> + <territory type="MV">Maldives</territory> + <territory type="MW">Malawi</territory> + <territory type="MX">Mexico</territory> + <territory type="MY">Malaysia</territory> + <territory type="MZ">Mozambique</territory> + <territory type="NA">Namibia</territory> + <territory type="NC">New Caledonia</territory> + <territory type="NE">Niger</territory> + <territory type="NF">Norfolk Island</territory> + <territory type="NG">Nigeria</territory> + <territory type="NI">Nicaragua</territory> + <territory type="NL">Netherlands</territory> + <territory type="NO">Norway</territory> + <territory type="NP">Nepal</territory> + <territory type="NQ">Dronning Maud Land</territory> + <territory type="NR">Nauru</territory> + <territory type="NT">Neutral Zone</territory> + <territory type="NU">Niue</territory> + <territory type="NZ">New Zealand</territory> + <territory type="OM">Oman</territory> + <territory type="PA">Panama</territory> + <territory type="PC">Pacific Islands Trust Territory</territory> + <territory type="PE">Peru</territory> + <territory type="PF">French Polynesia</territory> + <territory type="PG">Papua New Guinea</territory> + <territory type="PH">Philippines</territory> + <territory type="PK">Pakistan</territory> + <territory type="PL">Poland</territory> + <territory type="PM">Saint Pierre and Miquelon</territory> + <territory type="PN">Pitcairn</territory> + <territory type="PR">Puerto Rico</territory> + <territory type="PS">Palestinian Territory</territory> + <territory type="PT">Portugal</territory> + <territory type="PU">U.S. Miscellaneous Pacific Islands</territory> + <territory type="PW">Palau</territory> + <territory type="PY">Paraguay</territory> + <territory type="PZ">Panama Canal Zone</territory> + <territory type="QA">Qatar</territory> + <territory type="QO">Outlying Oceania</territory> + <territory type="QU">European Union</territory> + <territory type="RE">Reunion</territory> + <territory type="RO">Romania</territory> + <territory type="RS">Serbia</territory> + <territory type="RU">Russia</territory> + <territory type="RW">Rwanda</territory> + <territory type="SA">Saudi Arabia</territory> + <territory type="SB">Solomon Islands</territory> + <territory type="SC">Seychelles</territory> + <territory type="SD">Sudan</territory> + <territory type="SE">Sweden</territory> + <territory type="SG">Singapore</territory> + <territory type="SH">Saint Helena</territory> + <territory type="SI">Slovenia</territory> + <territory type="SJ">Svalbard and Jan Mayen</territory> + <territory type="SK">Slovakia</territory> + <territory type="SL">Sierra Leone</territory> + <territory type="SM">San Marino</territory> + <territory type="SN">Senegal</territory> + <territory type="SO">Somalia</territory> + <territory type="SR">Suriname</territory> + <territory type="ST">Sao Tome and Principe</territory> + <territory type="SU">Union of Soviet Socialist Republics</territory> + <territory type="SV">El Salvador</territory> + <territory type="SY">Syria</territory> + <territory type="SZ">Swaziland</territory> + <territory type="TC">Turks and Caicos Islands</territory> + <territory type="TD">Chad</territory> + <territory type="TF">French Southern Territories</territory> + <territory type="TG">Togo</territory> + <territory type="TH">Thailand</territory> + <territory type="TJ">Tajikistan</territory> + <territory type="TK">Tokelau</territory> + <territory type="TL">East Timor</territory> + <territory type="TM">Turkmenistan</territory> + <territory type="TN">Tunisia</territory> + <territory type="TO">Tonga</territory> + <territory type="TR">Turkey</territory> + <territory type="TT">Trinidad and Tobago</territory> + <territory type="TV">Tuvalu</territory> + <territory type="TW">Taiwan</territory> + <territory type="TZ">Tanzania</territory> + <territory type="UA">Ukraine</territory> + <territory type="UG">Uganda</territory> + <territory type="UM">United States Minor Outlying Islands</territory> + <territory type="US">United States</territory> + <territory type="UY">Uruguay</territory> + <territory type="UZ">Uzbekistan</territory> + <territory type="VA">Vatican</territory> + <territory type="VC">Saint Vincent and the Grenadines</territory> + <territory type="VD">North Vietnam</territory> + <territory type="VE">Venezuela</territory> + <territory type="VG">British Virgin Islands</territory> + <territory type="VI">U.S. Virgin Islands</territory> + <territory type="VN">Vietnam</territory> + <territory type="VU">Vanuatu</territory> + <territory type="WF">Wallis and Futuna</territory> + <territory type="WK">Wake Island</territory> + <territory type="WS">Samoa</territory> + <territory type="YD">People's Democratic Republic of Yemen</territory> + <territory type="YE">Yemen</territory> + <territory type="YT">Mayotte</territory> + <territory type="ZA">South Africa</territory> + <territory type="ZM">Zambia</territory> + <territory type="ZW">Zimbabwe</territory> + <territory type="ZZ">Unknown or Invalid Region</territory> + </territories> + <variants> + <variant type="1901">Traditional German orthography</variant> + <variant type="1996">German orthography of 1996</variant> + <variant type="BOONT">Boontling</variant> + <variant type="AREVELA">Eastern Armenian</variant> + <variant type="AREVMDA">Western Armenian</variant> + <variant type="GAULISH">Gaulish</variant> + <variant type="GUOYU">Mandarin or Standard Chinese</variant> + <variant type="HAKKA">Hakka</variant> + <variant type="LOJBAN">Lojban</variant> + <variant type="NEDIS">Natisone dialect</variant> + <variant type="POLYTONI">Polytonic</variant> + <variant type="POSIX">Computer</variant> + <variant type="REVISED">Revised Orthography</variant> + <variant type="ROZAJ">Resian</variant> + <variant type="SAAHO">Saho</variant> + <variant type="SCOUSE">Scouse</variant> + <variant type="XIANG">Xiang or Hunanese</variant> + </variants> + <keys> + <key type="calendar">Calendar</key> + <key type="collation">Collation</key> + <key type="currency">Currency</key> + </keys> + <types> + <type type="big5han" key="collation">Traditional Chinese (Big5)</type> + <type type="buddhist" key="calendar">Buddhist Calendar</type> + <type type="chinese" key="calendar">Chinese Calendar</type> + <type type="direct" key="collation">Direct Order</type> + <type type="gb2312han" key="collation">Simplified Chinese (GB2312)</type> + <type type="gregorian" key="calendar">Gregorian Calendar</type> + <type type="hebrew" key="calendar">Hebrew Calendar</type> + <type type="islamic" key="calendar">Islamic Calendar</type> + <type type="islamic-civil" key="calendar">Islamic-Civil Calendar</type> + <type type="japanese" key="calendar">Japanese Calendar</type> + <type type="phonebook" key="collation">Phonebook Order</type> + <type type="pinyin" key="collation">Pinyin Order</type> + <type type="stroke" key="collation">Stroke Order</type> + <type type="traditional" key="collation">Traditional</type> + </types> + </localeDisplayNames> + <characters> + <exemplarCharacters>[a-z]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[á à ă â å ä ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ß ú ù ŭ û ü ū ÿ]</exemplarCharacters> + </characters> + <dates> + <calendars> + <calendar type="gregorian"> + <months> + <monthContext type="format"> + <monthWidth type="abbreviated"> + <month type="1">Jan</month> + <month type="2">Feb</month> + <month type="3">Mar</month> + <month type="4">Apr</month> + <month type="5">May</month> + <month type="6">Jun</month> + <month type="7">Jul</month> + <month type="8">Aug</month> + <month type="9">Sep</month> + <month type="10">Oct</month> + <month type="11">Nov</month> + <month type="12">Dec</month> + </monthWidth> + <monthWidth type="wide"> + <month type="1">January</month> + <month type="2">February</month> + <month type="3">March</month> + <month type="4">April</month> + <month type="5">May</month> + <month type="6">June</month> + <month type="7">July</month> + <month type="8">August</month> + <month type="9">September</month> + <month type="10">October</month> + <month type="11">November</month> + <month type="12">December</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="1">J</month> + <month type="2">F</month> + <month type="3">M</month> + <month type="4">A</month> + <month type="5">M</month> + <month type="6">J</month> + <month type="7">J</month> + <month type="8">A</month> + <month type="9">S</month> + <month type="10">O</month> + <month type="11">N</month> + <month type="12">D</month> + </monthWidth> + </monthContext> + </months> + <days> + <dayContext type="format"> + <dayWidth type="abbreviated"> + <day type="sun">Sun</day> + <day type="mon">Mon</day> + <day type="tue">Tue</day> + <day type="wed">Wed</day> + <day type="thu">Thu</day> + <day type="fri">Fri</day> + <day type="sat">Sat</day> + </dayWidth> + <dayWidth type="wide"> + <day type="sun">Sunday</day> + <day type="mon">Monday</day> + <day type="tue">Tuesday</day> + <day type="wed">Wednesday</day> + <day type="thu">Thursday</day> + <day type="fri">Friday</day> + <day type="sat">Saturday</day> + </dayWidth> + </dayContext> + <dayContext type="stand-alone"> + <dayWidth type="narrow"> + <day type="sun">S</day> + <day type="mon">M</day> + <day type="tue">T</day> + <day type="wed">W</day> + <day type="thu">T</day> + <day type="fri">F</day> + <day type="sat">S</day> + </dayWidth> + </dayContext> + </days> + <quarters> + <quarterContext type="format"> + <quarterWidth type="wide"> + <quarter type="1">1st quarter</quarter> + <quarter type="2">2nd quarter</quarter> + <quarter type="3">3rd quarter</quarter> + <quarter type="4">4th quarter</quarter> + </quarterWidth> + </quarterContext> + </quarters> + <eras> + <eraNames> + <era type="0">Before Christ</era> + <era type="1">Anno Domini</era> + </eraNames> + <eraAbbr> + <era type="0">BC</era> + <era type="1">AD</era> + </eraAbbr> + </eras> + <dateFormats> + <dateFormatLength type="full"> + <dateFormat> + <pattern>EEEE, MMMM d, yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="long"> + <dateFormat> + <pattern>MMMM d, yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="medium"> + <dateFormat> + <pattern>MMM d, yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="short"> + <dateFormat> + <pattern>M/d/yy</pattern> + </dateFormat> + </dateFormatLength> + </dateFormats> + <timeFormats> + <timeFormatLength type="full"> + <timeFormat> + <pattern>h:mm:ss a v</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="long"> + <timeFormat> + <pattern>h:mm:ss a z</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="medium"> + <timeFormat> + <pattern>h:mm:ss a</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="short"> + <timeFormat> + <pattern>h:mm a</pattern> + </timeFormat> + </timeFormatLength> + </timeFormats> + <dateTimeFormats> + <availableFormats> + <dateFormatItem id="HHmm" draft="provisional">HH:mm</dateFormatItem> + <dateFormatItem id="HHmmss" draft="provisional">HH:mm:ss</dateFormatItem> + <dateFormatItem id="MMMMd" draft="provisional">MMMM d</dateFormatItem> + <dateFormatItem id="Md" draft="provisional">M/d</dateFormatItem> + <dateFormatItem id="mmss" draft="provisional">mm:ss</dateFormatItem> + <dateFormatItem id="yyMM" draft="provisional">MM/yy</dateFormatItem> + <dateFormatItem id="yyQQQQ" draft="provisional">QQQQ yy</dateFormatItem> + <dateFormatItem id="yyyyMMM" draft="provisional">MMM yyyy</dateFormatItem> + </availableFormats> + </dateTimeFormats> + <fields> + <field type="day"> + <relative type="0">Today</relative> + <relative type="1">Tomorrow</relative> + <relative type="-1">Yesterday</relative> + </field> + <field type="dayperiod"> + <displayName>AM/PM</displayName> + </field> + </fields> + </calendar> + </calendars> + <timeZoneNames> + <zone type="America/Vancouver"> + <long> + <generic>Pacific Time (CA)</generic> + <standard>Pacific Standard Time (CA)</standard> + <daylight>Pacific Daylight Time (CA)</daylight> + </long> + <short> + <generic>PT (CA)</generic> + <standard>PST (CA)</standard> + <daylight>PDT (CA)</daylight> + </short> + </zone> + <zone type="America/Edmonton"> + <long> + <generic>Mountain Time (CA)</generic> + <standard>Mountain Standard Time (CA)</standard> + <daylight>Mountain Daylight Time (CA)</daylight> + </long> + <short> + <generic>MT (CA)</generic> + <standard>MST (CA)</standard> + <daylight>MDT (CA)</daylight> + </short> + </zone> + <zone type="America/Winnipeg"> + <long> + <generic>Central Time (CA)</generic> + <standard>Central Standard Time (CA)</standard> + <daylight>Central Daylight Time (CA)</daylight> + </long> + <short> + <generic>CT (CA)</generic> + <standard>CST (CA)</standard> + <daylight>CDT (CA)</daylight> + </short> + </zone> + <zone type="America/Montreal"> + <long> + <generic>Eastern Time (CA)</generic> + <standard>Eastern Standard Time (CA)</standard> + <daylight>Eastern Daylight Time (CA)</daylight> + </long> + <short> + <generic>ET (CA)</generic> + <standard>EST (CA)</standard> + <daylight>EDT (CA)</daylight> + </short> + </zone> + <zone type="America/Halifax"> + <long> + <generic>Atlantic Time</generic> + <standard>Atlantic Standard Time</standard> + <daylight>Atlantic Daylight Time</daylight> + </long> + <short> + <generic>AT</generic> + <standard>AST</standard> + <daylight>ADT</daylight> + </short> + </zone> + <zone type="America/St_Johns"> + <long> + <generic>Newfoundland Time</generic> + <standard>Newfoundland Standard Time</standard> + <daylight>Newfoundland Daylight Time</daylight> + </long> + <short> + <generic>NT</generic> + <standard>NST</standard> + <daylight>NDT</daylight> + </short> + <exemplarCity>St. John’s</exemplarCity> + </zone> + <zone type="Asia/Shanghai"> + <long> + <standard>China Standard Time</standard> + <daylight>China Daylight Time</daylight> + </long> + </zone> + <zone type="Europe/Paris"> + <long> + <generic>Central European Time</generic> + <standard>Central European Standard Time</standard> + <daylight>Central European Daylight Time</daylight> + </long> + <short> + <generic>CET</generic> + <standard>CEST</standard> + <daylight>CEDT</daylight> + </short> + <exemplarCity>Paris</exemplarCity> + </zone> + <zone type="Europe/London"> + <long> + <standard>Greenwich Mean Time</standard> + <daylight>British Summer Time</daylight> + </long> + <short> + <standard>GMT</standard> + <daylight>BST</daylight> + </short> + </zone> + <zone type="Europe/Dublin"> + <long> + <standard>Greenwich Mean Time</standard> + <daylight>Irish Summer Time</daylight> + </long> + <short> + <standard>GMT</standard> + <daylight>IST</daylight> + </short> + <exemplarCity>Dublin</exemplarCity> + </zone> + <!-- Note: the following is known to be sparse, and needs to be improved in the future --> + <zone type="Asia/Jerusalem"> + <long> + <standard>Israel Standard Time</standard> + <daylight>Israel Daylight Time</daylight> + </long> + <exemplarCity>Jerusalem</exemplarCity> + </zone> + <zone type="Asia/Tokyo"> + <long> + <standard>Japan Standard Time</standard> + <daylight>Japan Daylight Time</daylight> + </long> + <short> + <standard>JST</standard> + <daylight>JDT</daylight> + </short> + <exemplarCity>Tokyo</exemplarCity> + </zone> + <zone type="Europe/Bucharest"> + <long> + <standard>Eastern European Standard Time</standard> + <daylight>Eastern European Daylight Time</daylight> + </long> + <short> + <standard>EET</standard> + <daylight>EEST</daylight> + </short> + <exemplarCity>Bucharest</exemplarCity> + </zone> + <zone type="Asia/Singapore"> + <long> + <standard>Singapore Standard Time</standard> + <daylight>Singapore Standard Time</daylight> + </long> + <short> + <standard>SST</standard> + <daylight>SST</daylight> + </short> + <exemplarCity>Singapore</exemplarCity> + </zone> + <zone type="Pacific/Honolulu"> + <long> + <generic>Hawaii Time</generic> + <standard>Hawaii Standard Time</standard> + <daylight>Hawaii Daylight Time</daylight> + </long> + <short> + <generic>HT</generic> + <standard>HST</standard> + <daylight>HDT</daylight> + </short> + </zone> + <zone type="America/Anchorage"> + <long> + <generic>Alaska Time</generic> + <standard>Alaska Standard Time</standard> + <daylight>Alaska Daylight Time</daylight> + </long> + <short> + <generic>AKT</generic> + <standard>AKST</standard> + </short> + </zone> + <!-- Note: zones that don't use daylight time need further work --> + <zone type="America/Los_Angeles"> + <long> + <generic>Pacific Time</generic> + <standard>Pacific Standard Time</standard> + <daylight>Pacific Daylight Time</daylight> + </long> + <short> + <generic>PT</generic> + <standard>PST</standard> + <daylight>PDT</daylight> + </short> + </zone> + <zone type="America/Denver"> + <long> + <generic>Mountain Time</generic> + <standard>Mountain Standard Time</standard> + <daylight>Mountain Daylight Time</daylight> + </long> + <short> + <generic>MT</generic> + <standard>MST</standard> + <daylight>MDT</daylight> + </short> + </zone> + <zone type="America/Chicago"> + <long> + <generic>Central Time</generic> + <standard>Central Standard Time</standard> + <daylight>Central Daylight Time</daylight> + </long> + <short> + <generic>CT</generic> + <standard>CST</standard> + <daylight>CDT</daylight> + </short> + </zone> + <zone type="America/New_York"> + <long> + <generic>Eastern Time</generic> + <standard>Eastern Standard Time</standard> + <daylight>Eastern Daylight Time</daylight> + </long> + <short> + <generic>ET</generic> + <standard>EST</standard> + <daylight>EDT</daylight> + </short> + </zone> + </timeZoneNames> + </dates> + <numbers> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>¤#,##0.00</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + <currencies> + <currency type="ADP"> + <displayName>Andorran Peseta</displayName> + </currency> + <currency type="AED"> + <displayName>United Arab Emirates Dirham</displayName> + </currency> + <currency type="AFA"> + <displayName>Afghani (1927-2002)</displayName> + </currency> + <currency type="AFN"> + <displayName>Afghani</displayName> + <symbol>Af</symbol> + </currency> + <currency type="ALL"> + <displayName>Albanian Lek</displayName> + <symbol>lek</symbol> + </currency> + <currency type="AMD"> + <displayName>Armenian Dram</displayName> + <symbol>dram</symbol> + </currency> + <currency type="ANG"> + <displayName>Netherlands Antillan Guilder</displayName> + <symbol>NA f.</symbol> + </currency> + <currency type="AOA"> + <displayName>Angolan Kwanza</displayName> + </currency> + <currency type="AOK"> + <displayName>Angolan Kwanza (1977-1990)</displayName> + </currency> + <currency type="AON"> + <displayName>Angolan New Kwanza (1990-2000)</displayName> + </currency> + <currency type="AOR"> + <displayName>Angolan Kwanza Reajustado (1995-1999)</displayName> + </currency> + <currency type="ARA"> + <displayName>Argentine Austral</displayName> + </currency> + <currency type="ARP"> + <displayName>Argentine Peso (1983-1985)</displayName> + </currency> + <currency type="ARS"> + <displayName>Argentine Peso</displayName> + <symbol>Arg$</symbol> + </currency> + <currency type="ATS"> + <displayName>Austrian Schilling</displayName> + </currency> + <currency type="AUD"> + <displayName>Australian Dollar</displayName> + <symbol>$A</symbol> + </currency> + <currency type="AWG"> + <displayName>Aruban Guilder</displayName> + </currency> + <currency type="AZM"> + <displayName>Azerbaijanian Manat (1993-2006)</displayName> + </currency> + <currency type="AZN"> + <displayName>Azerbaijanian Manat</displayName> + </currency> + <currency type="BAD"> + <displayName>Bosnia-Herzegovina Dinar</displayName> + </currency> + <currency type="BAM"> + <displayName>Bosnia-Herzegovina Convertible Mark</displayName> + <symbol>KM</symbol> + </currency> + <currency type="BBD"> + <displayName>Barbados Dollar</displayName> + <symbol>BDS$</symbol> + </currency> + <currency type="BDT"> + <displayName>Bangladesh Taka</displayName> + <symbol>Tk</symbol> + </currency> + <currency type="BEC"> + <displayName>Belgian Franc (convertible)</displayName> + </currency> + <currency type="BEF"> + <displayName>Belgian Franc</displayName> + <symbol>BF</symbol> + </currency> + <currency type="BEL"> + <displayName>Belgian Franc (financial)</displayName> + </currency> + <currency type="BGL"> + <displayName>Bulgarian Hard Lev</displayName> + <symbol>lev</symbol> + </currency> + <currency type="BGN"> + <displayName>Bulgarian New Lev</displayName> + </currency> + <currency type="BHD"> + <displayName>Bahraini Dinar</displayName> + <symbol>BD</symbol> + </currency> + <currency type="BIF"> + <displayName>Burundi Franc</displayName> + <symbol>Fbu</symbol> + </currency> + <currency type="BMD"> + <displayName>Bermudan Dollar</displayName> + <symbol>Ber$</symbol> + </currency> + <currency type="BND"> + <displayName>Brunei Dollar</displayName> + </currency> + <currency type="BOB"> + <displayName>Boliviano</displayName> + <symbol>Bs</symbol> + </currency> + <currency type="BOP"> + <displayName>Bolivian Peso</displayName> + </currency> + <currency type="BOV"> + <displayName>Bolivian Mvdol</displayName> + </currency> + <currency type="BRB"> + <displayName>Brazilian Cruzeiro Novo (1967-1986)</displayName> + </currency> + <currency type="BRC"> + <displayName>Brazilian Cruzado</displayName> + </currency> + <currency type="BRE"> + <displayName>Brazilian Cruzeiro (1990-1993)</displayName> + </currency> + <currency type="BRL"> + <displayName>Brazilian Real</displayName> + <symbol>R$</symbol> + </currency> + <currency type="BRN"> + <displayName>Brazilian Cruzado Novo</displayName> + </currency> + <currency type="BRR"> + <displayName>Brazilian Cruzeiro</displayName> + </currency> + <currency type="BSD"> + <displayName>Bahamian Dollar</displayName> + </currency> + <currency type="BTN"> + <displayName>Bhutan Ngultrum</displayName> + <symbol>Nu</symbol> + </currency> + <currency type="BUK"> + <displayName>Burmese Kyat</displayName> + </currency> + <currency type="BWP"> + <displayName>Botswanan Pula</displayName> + </currency> + <currency type="BYB"> + <displayName>Belarussian New Ruble (1994-1999)</displayName> + </currency> + <currency type="BYR"> + <displayName>Belarussian Ruble</displayName> + <symbol>Rbl</symbol> + </currency> + <currency type="BZD"> + <displayName>Belize Dollar</displayName> + <symbol>BZ$</symbol> + </currency> + <currency type="CAD"> + <displayName>Canadian Dollar</displayName> + <symbol>Can$</symbol> + </currency> + <currency type="CDF"> + <displayName>Congolese Franc Congolais</displayName> + </currency> + <currency type="CHE"> + <displayName>WIR Euro</displayName> + </currency> + <currency type="CHF"> + <displayName>Swiss Franc</displayName> + <symbol>SwF</symbol> + </currency> + <currency type="CHW"> + <displayName>WIR Franc</displayName> + </currency> + <currency type="CLF"> + <displayName>Chilean Unidades de Fomento</displayName> + </currency> + <currency type="CLP"> + <displayName>Chilean Peso</displayName> + <symbol>Ch$</symbol> + </currency> + <currency type="CNY"> + <displayName>Chinese Yuan Renminbi</displayName> + <symbol>Y</symbol> + </currency> + <currency type="COP"> + <displayName>Colombian Peso</displayName> + <symbol>Col$</symbol> + </currency> + <currency type="COU"> + <displayName>Unidad de Valor Real</displayName> + </currency> + <currency type="CRC"> + <displayName>Costa Rican Colon</displayName> + <symbol>C</symbol> + </currency> + <currency type="CSD"> + <displayName>Serbian Dinar</displayName> + </currency> + <currency type="CSK"> + <displayName>Czechoslovak Hard Koruna</displayName> + </currency> + <currency type="CUP"> + <displayName>Cuban Peso</displayName> + </currency> + <currency type="CVE"> + <displayName>Cape Verde Escudo</displayName> + <symbol>CVEsc</symbol> + </currency> + <currency type="CYP"> + <displayName>Cyprus Pound</displayName> + <symbol>£C</symbol> + </currency> + <currency type="CZK"> + <displayName>Czech Republic Koruna</displayName> + </currency> + <currency type="DDM"> + <displayName>East German Ostmark</displayName> + </currency> + <currency type="DEM"> + <displayName>Deutsche Mark</displayName> + </currency> + <currency type="DJF"> + <displayName>Djibouti Franc</displayName> + <symbol>DF</symbol> + </currency> + <currency type="DKK"> + <displayName>Danish Krone</displayName> + <symbol>DKr</symbol> + </currency> + <currency type="DOP"> + <displayName>Dominican Peso</displayName> + <symbol>RD$</symbol> + </currency> + <currency type="DZD"> + <displayName>Algerian Dinar</displayName> + <symbol>DA</symbol> + </currency> + <currency type="ECS"> + <displayName>Ecuador Sucre</displayName> + </currency> + <currency type="ECV"> + <displayName>Ecuador Unidad de Valor Constante (UVC)</displayName> + </currency> + <currency type="EEK"> + <displayName>Estonian Kroon</displayName> + </currency> + <currency type="EGP"> + <displayName>Egyptian Pound</displayName> + </currency> + <currency type="EQE"> + <displayName>Ekwele</displayName> + </currency> + <currency type="ERN"> + <displayName>Eritrean Nakfa</displayName> + </currency> + <currency type="ESA"> + <displayName>Spanish Peseta (A account)</displayName> + </currency> + <currency type="ESB"> + <displayName>Spanish Peseta (convertible account)</displayName> + </currency> + <currency type="ESP"> + <displayName>Spanish Peseta</displayName> + <symbol>₧</symbol> + </currency> + <currency type="ETB"> + <displayName>Ethiopian Birr</displayName> + <symbol>Br</symbol> + </currency> + <currency type="EUR"> + <displayName>Euro</displayName> + </currency> + <currency type="FIM"> + <displayName>Finnish Markka</displayName> + </currency> + <currency type="FJD"> + <displayName>Fiji Dollar</displayName> + <symbol>F$</symbol> + </currency> + <currency type="FKP"> + <displayName>Falkland Islands Pound</displayName> + </currency> + <currency type="FRF"> + <displayName>French Franc</displayName> + </currency> + <currency type="GBP"> + <displayName>British Pound Sterling</displayName> + </currency> + <currency type="GEK"> + <displayName>Georgian Kupon Larit</displayName> + </currency> + <currency type="GEL"> + <displayName>Georgian Lari</displayName> + <symbol>lari</symbol> + </currency> + <currency type="GHC"> + <displayName>Ghana Cedi</displayName> + </currency> + <currency type="GIP"> + <displayName>Gibraltar Pound</displayName> + </currency> + <currency type="GMD"> + <displayName>Gambia Dalasi</displayName> + </currency> + <currency type="GNF"> + <displayName>Guinea Franc</displayName> + <symbol>GF</symbol> + </currency> + <currency type="GNS"> + <displayName>Guinea Syli</displayName> + </currency> + <currency type="GQE"> + <displayName>Equatorial Guinea Ekwele Guineana</displayName> + </currency> + <currency type="GRD"> + <displayName>Greek Drachma</displayName> + </currency> + <currency type="GTQ"> + <displayName>Guatemala Quetzal</displayName> + <symbol>Q</symbol> + </currency> + <currency type="GWE"> + <displayName>Portuguese Guinea Escudo</displayName> + </currency> + <currency type="GWP"> + <displayName>Guinea-Bissau Peso</displayName> + </currency> + <currency type="GYD"> + <displayName>Guyana Dollar</displayName> + <symbol>G$</symbol> + </currency> + <currency type="HKD"> + <displayName>Hong Kong Dollar</displayName> + <symbol>HK$</symbol> + </currency> + <currency type="HNL"> + <displayName>Hoduras Lempira</displayName> + <symbol>L</symbol> + </currency> + <currency type="HRD"> + <displayName>Croatian Dinar</displayName> + </currency> + <currency type="HRK"> + <displayName>Croatian Kuna</displayName> + </currency> + <currency type="HTG"> + <displayName>Haitian Gourde</displayName> + </currency> + <currency type="HUF"> + <displayName>Hungarian Forint</displayName> + <symbol>Ft</symbol> + </currency> + <currency type="IDR"> + <displayName>Indonesian Rupiah</displayName> + <symbol>Rp</symbol> + </currency> + <currency type="IEP"> + <displayName>Irish Pound</displayName> + <symbol>IR£</symbol> + </currency> + <currency type="ILP"> + <displayName>Israeli Pound</displayName> + </currency> + <currency type="ILS"> + <displayName>Israeli New Sheqel</displayName> + </currency> + <currency type="INR"> + <displayName>Indian Rupee</displayName> + </currency> + <currency type="IQD"> + <displayName>Iraqi Dinar</displayName> + <symbol>ID</symbol> + </currency> + <currency type="IRR"> + <displayName>Iranian Rial</displayName> + <symbol>RI</symbol> + </currency> + <currency type="ISK"> + <displayName>Icelandic Krona</displayName> + </currency> + <currency type="ITL"> + <displayName>Italian Lira</displayName> + </currency> + <currency type="JMD"> + <displayName>Jamaican Dollar</displayName> + <symbol>J$</symbol> + </currency> + <currency type="JOD"> + <displayName>Jordanian Dinar</displayName> + <symbol>JD</symbol> + </currency> + <currency type="JPY"> + <displayName>Japanese Yen</displayName> + </currency> + <currency type="KES"> + <displayName>Kenyan Shilling</displayName> + <symbol>K Sh</symbol> + </currency> + <currency type="KGS"> + <displayName>Kyrgystan Som</displayName> + <symbol>som</symbol> + </currency> + <currency type="KHR"> + <displayName>Cambodian Riel</displayName> + <symbol>CR</symbol> + </currency> + <currency type="KMF"> + <displayName>Comoro Franc</displayName> + <symbol>CF</symbol> + </currency> + <currency type="KPW"> + <displayName>North Korean Won</displayName> + </currency> + <currency type="KRW"> + <displayName>South Korean Won</displayName> + </currency> + <currency type="KWD"> + <displayName>Kuwaiti Dinar</displayName> + <symbol>KD</symbol> + </currency> + <currency type="KYD"> + <displayName>Cayman Islands Dollar</displayName> + </currency> + <currency type="KZT"> + <displayName>Kazakhstan Tenge</displayName> + <symbol>T</symbol> + </currency> + <currency type="LAK"> + <displayName>Laotian Kip</displayName> + </currency> + <currency type="LBP"> + <displayName>Lebanese Pound</displayName> + <symbol>LL</symbol> + </currency> + <currency type="LKR"> + <displayName>Sri Lanka Rupee</displayName> + <symbol>SL Re</symbol> + </currency> + <currency type="LRD"> + <displayName>Liberian Dollar</displayName> + </currency> + <currency type="LSL"> + <displayName>Lesotho Loti</displayName> + <symbol>M</symbol> + </currency> + <currency type="LSM"> + <displayName>Maloti</displayName> + </currency> + <currency type="LTL"> + <displayName>Lithuanian Lita</displayName> + </currency> + <currency type="LTT"> + <displayName>Lithuanian Talonas</displayName> + </currency> + <currency type="LUC"> + <displayName>Luxembourg Convertible Franc</displayName> + </currency> + <currency type="LUF"> + <displayName>Luxembourg Franc</displayName> + </currency> + <currency type="LUL"> + <displayName>Luxembourg Financial Franc</displayName> + </currency> + <currency type="LVL"> + <displayName>Latvian Lats</displayName> + </currency> + <currency type="LVR"> + <displayName>Latvian Ruble</displayName> + </currency> + <currency type="LYD"> + <displayName>Libyan Dinar</displayName> + <symbol>LD</symbol> + </currency> + <currency type="MAD"> + <displayName>Moroccan Dirham</displayName> + </currency> + <currency type="MAF"> + <displayName>Moroccan Franc</displayName> + </currency> + <currency type="MDL"> + <displayName>Moldovan Leu</displayName> + </currency> + <currency type="MGA"> + <displayName>Madagascar Ariary</displayName> + </currency> + <currency type="MGF"> + <displayName>Madagascar Franc</displayName> + </currency> + <currency type="MKD"> + <displayName>Macedonian Denar</displayName> + <symbol>MDen</symbol> + </currency> + <currency type="MLF"> + <displayName>Mali Franc</displayName> + </currency> + <currency type="MMK"> + <displayName>Myanmar Kyat</displayName> + </currency> + <currency type="MNT"> + <displayName>Mongolian Tugrik</displayName> + <symbol>Tug</symbol> + </currency> + <currency type="MOP"> + <displayName>Macao Pataca</displayName> + </currency> + <currency type="MRO"> + <displayName>Mauritania Ouguiya</displayName> + <symbol>UM</symbol> + </currency> + <currency type="MTL"> + <displayName>Maltese Lira</displayName> + <symbol>Lm</symbol> + </currency> + <currency type="MTP"> + <displayName>Maltese Pound</displayName> + </currency> + <currency type="MUR"> + <displayName>Mauritius Rupee</displayName> + </currency> + <currency type="MVR"> + <displayName>Maldive Islands Rufiyaa</displayName> + </currency> + <currency type="MWK"> + <displayName>Malawi Kwacha</displayName> + <symbol>MK</symbol> + </currency> + <currency type="MXN"> + <displayName>Mexican Peso</displayName> + <symbol>MEX$</symbol> + </currency> + <currency type="MXP"> + <displayName>Mexican Silver Peso (1861-1992)</displayName> + </currency> + <currency type="MXV"> + <displayName>Mexican Unidad de Inversion (UDI)</displayName> + </currency> + <currency type="MYR"> + <displayName>Malaysian Ringgit</displayName> + <symbol>RM</symbol> + </currency> + <currency type="MZE"> + <displayName>Mozambique Escudo</displayName> + </currency> + <currency type="MZM"> + <displayName>Old Mozambique Metical</displayName> + <symbol>Mt</symbol> + </currency> + <currency type="MZN"> + <displayName>Mozambique Metical</displayName> + <symbol>MTn</symbol> + </currency> + <currency type="NAD"> + <displayName>Namibia Dollar</displayName> + <symbol>N$</symbol> + </currency> + <currency type="NGN"> + <displayName>Nigerian Naira</displayName> + </currency> + <currency type="NIC"> + <displayName>Nicaraguan Cordoba</displayName> + </currency> + <currency type="NIO"> + <displayName>Nicaraguan Cordoba Oro</displayName> + </currency> + <currency type="NLG"> + <displayName>Netherlands Guilder</displayName> + </currency> + <currency type="NOK"> + <displayName>Norwegian Krone</displayName> + <symbol>NKr</symbol> + </currency> + <currency type="NPR"> + <displayName>Nepalese Rupee</displayName> + <symbol>Nrs</symbol> + </currency> + <currency type="NZD"> + <displayName>New Zealand Dollar</displayName> + <symbol>$NZ</symbol> + </currency> + <currency type="OMR"> + <displayName>Oman Rial</displayName> + <symbol>RO</symbol> + </currency> + <currency type="PAB"> + <displayName>Panamanian Balboa</displayName> + </currency> + <currency type="PEI"> + <displayName>Peruvian Inti</displayName> + </currency> + <currency type="PEN"> + <displayName>Peruvian Sol Nuevo</displayName> + </currency> + <currency type="PES"> + <displayName>Peruvian Sol</displayName> + </currency> + <currency type="PGK"> + <displayName>Papua New Guinea Kina</displayName> + </currency> + <currency type="PHP"> + <displayName>Philippine Peso</displayName> + <symbol>Php</symbol> + </currency> + <currency type="PKR"> + <displayName>Pakistan Rupee</displayName> + <symbol>Pra</symbol> + </currency> + <currency type="PLN"> + <displayName>Polish Zloty</displayName> + <symbol>Zl</symbol> + </currency> + <currency type="PLZ"> + <displayName>Polish Zloty (1950-1995)</displayName> + </currency> + <currency type="PTE"> + <displayName>Portuguese Escudo</displayName> + </currency> + <currency type="PYG"> + <displayName>Paraguay Guarani</displayName> + </currency> + <currency type="QAR"> + <displayName>Qatari Rial</displayName> + <symbol>QR</symbol> + </currency> + <currency type="RHD"> + <displayName>Rhodesian Dollar</displayName> + </currency> + <currency type="ROL"> + <displayName>Old Romanian Leu</displayName> + <!-- FYI Lei is the plural form of Leu. The currency symbol should be considered for change too. --> + <symbol>=0#Old lei|1#Old leu|1<Old lei</symbol> + </currency> + <currency type="RON"> + <displayName>Romanian Leu</displayName> + <symbol>=0#lei|1#leu|1<lei</symbol> + </currency> + <currency type="RUB"> + <displayName>Russian Ruble</displayName> + </currency> + <currency type="RUR"> + <displayName>Russian Ruble (1991-1998)</displayName> + </currency> + <currency type="RWF"> + <displayName>Rwandan Franc</displayName> + </currency> + <currency type="SAR"> + <displayName>Saudi Riyal</displayName> + <symbol>SRl</symbol> + </currency> + <currency type="SBD"> + <displayName>Solomon Islands Dollar</displayName> + <symbol>SI$</symbol> + </currency> + <currency type="SCR"> + <displayName>Seychelles Rupee</displayName> + <symbol>SR</symbol> + </currency> + <currency type="SDD"> + <displayName>Sudanese Dinar</displayName> + </currency> + <currency type="SDP"> + <displayName>Sudanese Pound</displayName> + </currency> + <currency type="SEK"> + <displayName>Swedish Krona</displayName> + <symbol>SKr</symbol> + </currency> + <currency type="SGD"> + <displayName>Singapore Dollar</displayName> + <symbol>S$</symbol> + </currency> + <currency type="SHP"> + <displayName>Saint Helena Pound</displayName> + </currency> + <currency type="SIT"> + <displayName>Slovenia Tolar</displayName> + </currency> + <currency type="SKK"> + <displayName>Slovak Koruna</displayName> + <symbol>Sk</symbol> + </currency> + <currency type="SLL"> + <displayName>Sierra Leone Leone</displayName> + </currency> + <currency type="SOS"> + <displayName>Somali Shilling</displayName> + <symbol>So. Sh.</symbol> + </currency> + <currency type="SRD"> + <displayName>Surinam Dollar</displayName> + </currency> + <currency type="SRG"> + <displayName>Suriname Guilder</displayName> + <symbol>Sf</symbol> + </currency> + <currency type="STD"> + <displayName>Sao Tome and Principe Dobra</displayName> + <symbol>Db</symbol> + </currency> + <currency type="SUR"> + <displayName>Soviet Rouble</displayName> + </currency> + <currency type="SVC"> + <displayName>El Salvador Colon</displayName> + </currency> + <currency type="SYP"> + <displayName>Syrian Pound</displayName> + <symbol>LS</symbol> + </currency> + <currency type="SZL"> + <displayName>Swaziland Lilangeni</displayName> + <symbol>E</symbol> + </currency> + <currency type="THB"> + <displayName>Thai Baht</displayName> + </currency> + <currency type="TJR"> + <displayName>Tajikistan Ruble</displayName> + </currency> + <currency type="TJS"> + <displayName>Tajikistan Somoni</displayName> + </currency> + <currency type="TMM"> + <displayName>Turkmenistan Manat</displayName> + </currency> + <currency type="TND"> + <displayName>Tunisian Dinar</displayName> + </currency> + <currency type="TOP"> + <displayName>Tonga Paʻanga</displayName> + <symbol>T$</symbol> + </currency> + <currency type="TPE"> + <displayName>Timor Escudo</displayName> + </currency> + <currency type="TRL"> + <displayName>Turkish Lira</displayName> + <symbol>TL</symbol> + </currency> + <currency type="TRY"> + <displayName>New Turkish Lira</displayName> + </currency> + <currency type="TTD"> + <displayName>Trinidad and Tobago Dollar</displayName> + <symbol>TT$</symbol> + </currency> + <currency type="TWD"> + <displayName>Taiwan New Dollar</displayName> + <symbol>NT$</symbol> + </currency> + <currency type="TZS"> + <displayName>Tanzanian Shilling</displayName> + <symbol>T Sh</symbol> + </currency> + <currency type="UAH"> + <displayName>Ukrainian Hryvnia</displayName> + </currency> + <currency type="UAK"> + <displayName>Ukrainian Karbovanetz</displayName> + </currency> + <currency type="UGS"> + <displayName>Ugandan Shilling (1966-1987)</displayName> + </currency> + <currency type="UGX"> + <displayName>Ugandan Shilling</displayName> + <symbol>U Sh</symbol> + </currency> + <currency type="USD"> + <displayName>US Dollar</displayName> + <symbol>US$</symbol> + </currency> + <currency type="USN"> + <displayName>US Dollar (Next day)</displayName> + </currency> + <currency type="USS"> + <displayName>US Dollar (Same day)</displayName> + </currency> + <currency type="UYP"> + <displayName>Uruguay Peso (1975-1993)</displayName> + </currency> + <currency type="UYU"> + <displayName>Uruguay Peso Uruguayo</displayName> + <symbol>Ur$</symbol> + </currency> + <currency type="UZS"> + <displayName>Uzbekistan Sum</displayName> + </currency> + <currency type="VEB"> + <displayName>Venezuelan Bolivar</displayName> + <symbol>Be</symbol> + </currency> + <currency type="VND"> + <displayName>Vietnamese Dong</displayName> + </currency> + <currency type="VUV"> + <displayName>Vanuatu Vatu</displayName> + <symbol>VT</symbol> + </currency> + <currency type="WST"> + <displayName>Western Samoa Tala</displayName> + </currency> + <currency type="XAF"> + <displayName>CFA Franc BEAC</displayName> + </currency> + <currency type="XAG"> + <displayName>Silver</displayName> + </currency> + <currency type="XAU"> + <displayName>Gold</displayName> + </currency> + <currency type="XBA"> + <displayName>European Composite Unit</displayName> + </currency> + <currency type="XBB"> + <displayName>European Monetary Unit</displayName> + </currency> + <currency type="XBC"> + <displayName>European Unit of Account (XBC)</displayName> + </currency> + <currency type="XBD"> + <displayName>European Unit of Account (XBD)</displayName> + </currency> + <currency type="XCD"> + <displayName>East Caribbean Dollar</displayName> + <symbol>EC$</symbol> + </currency> + <currency type="XDR"> + <displayName>Special Drawing Rights</displayName> + </currency> + <currency type="XEU"> + <displayName>European Currency Unit</displayName> + </currency> + <currency type="XFO"> + <displayName>French Gold Franc</displayName> + </currency> + <currency type="XFU"> + <displayName>French UIC-Franc</displayName> + </currency> + <currency type="XOF"> + <displayName>CFA Franc BCEAO</displayName> + </currency> + <currency type="XPD"> + <displayName>Palladium</displayName> + </currency> + <currency type="XPF"> + <displayName>CFP Franc</displayName> + <symbol>CFPF</symbol> + </currency> + <currency type="XPT"> + <displayName>Platinum</displayName> + </currency> + <currency type="XRE"> + <displayName>RINET Funds</displayName> + </currency> + <currency type="XTS"> + <displayName>Testing Currency Code</displayName> + </currency> + <currency type="XXX"> + <displayName>No Currency</displayName> + </currency> + <currency type="YDD"> + <displayName>Yemeni Dinar</displayName> + </currency> + <currency type="YER"> + <displayName>Yemeni Rial</displayName> + <symbol>YRl</symbol> + </currency> + <currency type="YUD"> + <displayName>Yugoslavian Hard Dinar</displayName> + </currency> + <currency type="YUM"> + <displayName>Yugoslavian Noviy Dinar</displayName> + </currency> + <currency type="YUN"> + <displayName>Yugoslavian Convertible Dinar</displayName> + </currency> + <currency type="ZAL"> + <displayName>South African Rand (financial)</displayName> + </currency> + <currency type="ZAR"> + <displayName>South African Rand</displayName> + <symbol>R</symbol> + </currency> + <currency type="ZMK"> + <displayName>Zambian Kwacha</displayName> + </currency> + <currency type="ZRN"> + <displayName>Zairean New Zaire</displayName> + </currency> + <currency type="ZRZ"> + <displayName>Zairean Zaire</displayName> + </currency> + <currency type="ZWD"> + <displayName>Zimbabwe Dollar</displayName> + <symbol>Z$</symbol> + </currency> + </currencies> + </numbers> + <references> + <reference type="R01" draft="unconfirmed"/> + <reference type="R02" draft="provisional"/> + <reference type="R03" uri="http://unstats.un.org/unsd/geoinfo/">UN Geographical Names</reference> + <reference type="R1">Special reference used only to prevent minimalization</reference> + <reference type="RP1" uri="isbn:0-321-18578-1">The Unicode Standard 4.0</reference> + <reference type="RP2">The Economist Style Guide</reference> + </references> +</ldml> +<!-- Comments without bases + + See the National Bank of Romania for details http://www.bnro.ro/def_en.htm - was on: //ldml/numbers/currencies/currency[@type="RON"]/displayName[@alt="proposed"] +--> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/en_US.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/en_US.xml new file mode 100644 index 0000000000..95bd1f2979 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/en_US.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.44 $"/> + <generation date="$Date: 2006/12/08 16:29:36 $"/> + <language type="en"/> + <territory type="US"/> + </identity> + <numbers> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>¤#,##0.00;(¤#,##0.00)</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + <currencies> + <currency type="USD"> + <symbol>$</symbol> + </currency> + </currencies> + </numbers> +</ldml> +<!-- Old Comments. See root.xml for more info. +URL: http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/en_US.txt?only_with_tag=final-update-LDML + +the PaperSize units are in mm +these values are not exact .. they are rounded off + 279, // height + 216 // width + MeasurementSystem:int{ 1 } // US system +--> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/es.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/es.xml new file mode 100644 index 0000000000..ee71fb327c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/es.xml @@ -0,0 +1,2271 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.80 $"/> + <generation date="$Date: 2006/12/08 16:29:36 $"/> + <language type="es"/> + </identity> + <localeDisplayNames> + <languages> + <language type="aa">afar</language> + <language type="ab">abjaso</language> + <language type="ace">acehnés</language> + <language type="ach">acoli</language> + <language type="ada">adangme</language> + <language type="ady">adigeo</language> + <language type="ae">avéstico</language> + <language type="af">afrikaans</language> + <language type="afa">afroasiáticas (otras)</language> + <language type="afh">afrihili</language> + <language type="ain" references="RP1">ainu</language> + <language type="ak">akan</language> + <language type="akk">acadio</language> + <language type="ale">aleutiano</language> + <language type="alg">lenguas algonquinas</language> + <language type="alt" references="RP3">altái meridional</language> + <language type="am">amárico</language> + <language type="an">aragonés</language> + <language type="ang">inglés antiguo (450-1100 aprox.)</language> + <language type="apa">lenguas apache</language> + <language type="ar">árabe</language> + <language type="arc">arameo</language> + <language type="arn">araucano</language> + <language type="arp">arapaho</language> + <language type="art">artificiales (otras)</language> + <language type="arw">arahuaco</language> + <language type="as">asamés</language> + <language type="ast">asturiano</language> + <language type="ath">lenguas atabascas</language> + <language type="aus">lenguas australianas</language> + <language type="av">avar</language> + <language type="awa">avadhi</language> + <language type="ay">aymara</language> + <language type="az">azerí</language> + <language type="ba">bashkir</language> + <language type="bad">banda</language> + <language type="bai">lenguas bamileke</language> + <language type="bal">baluchi</language> + <language type="ban">balinés</language> + <language type="bas">basa</language> + <language type="bat">bálticas (otras)</language> + <language type="be">bielorruso</language> + <language type="bej">beja</language> + <language type="bem">bemba</language> + <language type="ber">bereberes (otras)</language> + <language type="ber" alt="proposed-u167-1" draft="provisional">bereber</language> + <language type="bg">búlgaro</language> + <language type="bh">bihari</language> + <language type="bho">bhojpuri</language> + <language type="bi">bislama</language> + <language type="bik">bicol</language> + <language type="bin">bini</language> + <language type="bla">siksika</language> + <language type="bm">bambara</language> + <language type="bn">bengalí</language> + <language type="bnt">bantú</language> + <language type="bo">tibetano</language> + <language type="br">bretón</language> + <language type="bra">braj</language> + <language type="bs">bosnio</language> + <language type="btk">batak</language> + <language type="bua">buriat</language> + <language type="bua" alt="proposed-u167-1" draft="provisional">buriato</language> + <language type="bug">buginés</language> + <language type="byn">blin</language> + <language type="ca">catalán</language> + <language type="cad">caddo</language> + <language type="cai">indias centroamericanas (otras)</language> + <language type="car">caribe</language> + <language type="cau">caucásicas (otras)</language> + <language type="ce">checheno</language> + <language type="ceb">cebuano</language> + <language type="cel">celtas (otras)</language> + <language type="ch">chamorro</language> + <language type="chb">chibcha</language> + <language type="chg">chagatái</language> + <language type="chk">trukés</language> + <language type="chm">marí</language> + <language type="chn">jerga chinuk</language> + <language type="cho">choctaw</language> + <language type="chp">chipewyan</language> + <language type="chr">cherokee</language> + <language type="chy">cheyene</language> + <language type="cmc">lenguas chámicas</language> + <language type="co">corso</language> + <language type="cop">copto</language> + <language type="cpe">criollas y pidgins, basadas en el inglés (otras)</language> + <language type="cpf">criollas y pidgins, basadas en el francés (otras)</language> + <language type="cpp">criollas y pidgins, basadas en el portugués (otras)</language> + <language type="cr">cree</language> + <language type="crh">tártaro de Crimea</language> + <language type="crp">criollas y pidgins (otras)</language> + <language type="cs">checo</language> + <language type="csb">casubio</language> + <language type="cu">eslavo eclesiástico</language> + <language type="cus">cusitas (otras)</language> + <language type="cv">chuvash</language> + <language type="cy">galés</language> + <language type="da">danés</language> + <language type="dak">dakota</language> + <language type="dar">dargva</language> + <language type="day">dayak</language> + <language type="de">alemán</language> + <language type="del">delaware</language> + <language type="den">slave (atabasca)</language> + <language type="dgr">dogrib</language> + <language type="din">dinka</language> + <language type="doi">dogri</language> + <language type="dra">dravídicas (otras)</language> + <language type="dsb">sorbio inferior</language> + <language type="dua">duala</language> + <language type="dum">neerlandés medieval</language> + <language type="dv">divehi</language> + <language type="dyu">diula</language> + <language type="dz" references="RP1">dzongkha</language> + <language type="ee">ewe</language> + <language type="efi">efik</language> + <language type="egy">egipcio (antiguo)</language> + <language type="eka">ekajuk</language> + <language type="el">griego</language> + <language type="elx">elamita</language> + <language type="en">inglés</language> + <language type="enm">inglés medieval</language> + <language type="eo">esperanto</language> + <language type="es">español</language> + <language type="et">estonio</language> + <language type="eu">vasco</language> + <language type="ewo">ewondo</language> + <language type="fa">farsi</language> + <language type="fan">fang</language> + <language type="fat">fanti</language> + <language type="ff">fula</language> + <language type="fi">finés</language> + <language type="fil">filipino</language> + <language type="fiu">finougrias (otras)</language> + <language type="fj" references="RP1">fidjiano</language> + <language type="fo">feroés</language> + <language type="fr">francés</language> + <language type="frm">francés medieval</language> + <language type="fro">francés antiguo</language> + <language type="fur">friulano</language> + <language type="fy">frisón</language> + <language type="ga">irlandés</language> + <language type="gaa">ga</language> + <language type="gay">gayo</language> + <language type="gay" references="RP3" alt="proposed-u167-1" draft="provisional">gayón</language> + <language type="gba">gbaya</language> + <language type="gd">gaélico escocés</language> + <language type="gem">germánicas (otras)</language> + <language type="gez">geez</language> + <language type="gil">gilbertés</language> + <language type="gl">gallego</language> + <language type="gmh">alemán de la alta edad media</language> + <language type="gn">guaraní</language> + <language type="goh">alemán de la alta edad antigua</language> + <language type="gon">gondi</language> + <language type="gor">gorontalo</language> + <language type="got">gótico</language> + <language type="grb">grebo</language> + <language type="grc">griego antiguo</language> + <language type="gu">gujarati</language> + <language type="gv">gaélico manés</language> + <language type="gwi">kutchin</language> + <language type="ha">hausa</language> + <language type="hai">haida</language> + <language type="haw">hawaiano</language> + <language type="he">hebreo</language> + <language type="hi">hindi</language> + <language type="hil">hiligaynon</language> + <language type="him">himachali</language> + <language type="hit">hitita</language> + <language type="hmn">hmong</language> + <language type="ho">hiri motu</language> + <language type="hr">croata</language> + <language type="hsb">sorbio superior</language> + <language type="ht">haitiano</language> + <language type="hu">húngaro</language> + <language type="hup">hupa</language> + <language type="hy">armenio</language> + <language type="hz">herero</language> + <language type="ia">interlingua</language> + <language type="iba">iban</language> + <language type="id">indonesio</language> + <language type="ie">interlingue</language> + <language type="ig">igbo</language> + <language type="ii">sichuan yi</language> + <language type="ik">inupiak</language> + <language type="ilo">ilocano</language> + <language type="inc">índicas (otras)</language> + <language type="ine">indoeuropeas (otras)</language> + <language type="inh">ingush</language> + <language type="io">ido</language> + <language type="ira">iranias (otras)</language> + <language type="iro">lenguas iroquesas</language> + <language type="is">islandés</language> + <language type="it">italiano</language> + <language type="iu">inuktitut</language> + <language type="ja">japonés</language> + <language type="jbo">lojban</language> + <language type="jpr">judeo-persa</language> + <language type="jrb">judeo-árabe</language> + <language type="jv">javanés</language> + <language type="ka">georgiano</language> + <language type="kaa">karakalpako</language> + <language type="kab">cabila</language> + <language type="kac">kachin</language> + <language type="kam">kamba</language> + <language type="kar">karen</language> + <language type="kaw">kawi</language> + <language type="kbd">kabardiano</language> + <language type="kg">kongo</language> + <language type="kha">khasi</language> + <language type="khi">khoisan (otras)</language> + <language type="kho">kotanés</language> + <language type="ki">kikuyu</language> + <language type="kj">kuanyama</language> + <language type="kk">kazajo</language> + <language type="kl">groenlandés</language> + <language type="km">jemer</language> + <language type="kmb">kimbundu</language> + <language type="kn">canarés</language> + <language type="ko">coreano</language> + <language type="kok">konkani</language> + <language type="kos">kosraeano</language> + <language type="kpe">kpelle</language> + <language type="kr">kanuri</language> + <language type="krc">karachay-balkar</language> + <language type="kro">kru</language> + <language type="kru">kurukh</language> + <language type="ks">cachemiro</language> + <language type="ku">kurdo</language> + <language type="kum">kumyk</language> + <language type="kut">kutenai</language> + <language type="kv">komi</language> + <language type="kw">córnico</language> + <language type="ky">kirghiz</language> + <language type="la">latín</language> + <language type="lad">ladino</language> + <language type="lah">lahnda</language> + <language type="lam">lamba</language> + <language type="lb">luxemburgués</language> + <language type="lez">lezgiano</language> + <language type="lg">ganda</language> + <language type="li">limburgués</language> + <language type="ln">lingala</language> + <language type="lo">laosiano</language> + <language type="lol">mongo</language> + <language type="loz">lozi</language> + <language type="lt">lituano</language> + <language type="lu">luba-katanga</language> + <language type="lua">luba-lulua</language> + <language type="lui">luiseño</language> + <language type="lun">lunda</language> + <language type="lus">lushai</language> + <language type="lv">letón</language> + <language type="mad">madurés</language> + <language type="mag">magahi</language> + <language type="mai">maithili</language> + <language type="mak">macasar</language> + <language type="man">mandingo</language> + <language type="map">austronesias (otras)</language> + <language type="mas">masai</language> + <language type="mdf">moksha</language> + <language type="mdr">mandar</language> + <language type="men">mende</language> + <language type="mg">malgache</language> + <language type="mga">irlandés medieval</language> + <language type="mh">marshalés</language> + <language type="mi">maorí</language> + <language type="mic">micmac</language> + <language type="min">minangkabau</language> + <language type="mis">lenguas varias</language> + <language type="mk">macedonio</language> + <language type="mkh">mon-jemer (otras)</language> + <language type="ml">malayalam</language> + <language type="mn">mongol</language> + <language type="mnc">manchú</language> + <language type="mni">manipuri</language> + <language type="mno">lenguas manobo</language> + <language type="mo">moldavo</language> + <language type="moh">mohawk</language> + <language type="mos">mossi</language> + <language type="mr">marathi</language> + <language type="ms">malayo</language> + <language type="mt">maltés</language> + <language type="mul">lenguas múltiples</language> + <language type="mun">lenguas munda</language> + <language type="mus">creek</language> + <language type="mwl" references="RP1">mirandés</language> + <language type="mwr">marwari</language> + <language type="my">birmano</language> + <language type="myn">maya</language> + <language type="myv">erzya</language> + <language type="na">nauruano</language> + <language type="nah">náhuatl</language> + <language type="nai">indias norteamericanas (otras)</language> + <language type="nap">napolitano</language> + <language type="nb">bokmal noruego</language> + <language type="nd">ndebele septentrional</language> + <language type="nds">bajo alemán</language> + <language type="ne">nepalí</language> + <language type="new">newari</language> + <language type="ng">ndonga</language> + <language type="nia">nias</language> + <language type="nic">níger-kordofanianas (otras)</language> + <language type="niu">niueano</language> + <language type="nl" draft="provisional">neerlandés</language> + <language type="nn">nynorsk noruego</language> + <language type="no">noruego</language> + <language type="nog">nogai</language> + <language type="non">nórdico antiguo</language> + <language type="nr">ndebele meridional</language> + <language type="nso">sotho septentrional</language> + <language type="nub">lenguas nubias</language> + <language type="nv">navajo</language> + <language type="nwc" references="RP3">newari clásico</language> + <language type="ny">nyanja</language> + <language type="nym">nyamwezi</language> + <language type="nyn">nyankole</language> + <language type="nyo">nyoro</language> + <language type="nzi">nzima</language> + <language type="oc">occitano (después del 1500)</language> + <language type="oj">ojibwa</language> + <language type="om">oromo</language> + <language type="or">oriya</language> + <language type="os">osético</language> + <language type="osa">osage</language> + <language type="ota">turco otomano</language> + <language type="oto">lenguas otomanas</language> + <language type="pa">punjabí</language> + <language type="paa">papúes (otras)</language> + <language type="pag">pangasinán</language> + <language type="pal">pahlavi</language> + <language type="pam">pampanga</language> + <language type="pap">papiamento</language> + <language type="pau" references="RP1">palauano</language> + <language type="peo">persa antiguo</language> + <language type="phi">filipinas (otras)</language> + <language type="phn">fenicio</language> + <language type="pi">pali</language> + <language type="pl">polaco</language> + <language type="pon">pohnpeiano</language> + <language type="pra" references="RP1">lenguas prácritas</language> + <language type="pro">provenzal antiguo</language> + <language type="ps">pashto</language> + <language type="pt">portugués</language> + <language type="qu">quechua</language> + <language type="raj">rajasthani</language> + <language type="rap">rapanui</language> + <language type="rar">rarotongano</language> + <language type="rm">reto-romance</language> + <language type="rn">kiroundi</language> + <language type="ro">rumano</language> + <language type="roa">románicas (otras)</language> + <language type="rom">romaní</language> + <language type="root">raíz</language> + <language type="ru">ruso</language> + <language type="rup" references="RP1">arrumano</language> + <language type="rw">kinyarwanda</language> + <language type="sa">sánscrito</language> + <language type="sad">sandawe</language> + <language type="sah">yakut</language> + <language type="sai">indias sudamericanas (otras)</language> + <language type="sal">lenguas salish</language> + <language type="sam">arameo samaritano</language> + <language type="sas">sasak</language> + <language type="sat">santali</language> + <language type="sc">sardo</language> + <language type="scn" references="RP1">siciliano</language> + <language type="sco">escocés</language> + <language type="sd">sindhi</language> + <language type="se">sami septentrional</language> + <language type="sel">selkup</language> + <language type="sem">semíticas (otras)</language> + <language type="sg">sango</language> + <language type="sga">irlandés antiguo</language> + <language type="sgn">lenguajes de signos</language> + <language type="sh">serbocroata</language> + <language type="shn">shan</language> + <language type="si" references="RP3">cingalés</language> + <language type="sid">sidamo</language> + <language type="sio">lenguas sioux</language> + <language type="sit">sino-tibetanas (otras)</language> + <language type="sk">eslovaco</language> + <language type="sl">esloveno</language> + <language type="sla">eslavas (otras)</language> + <language type="sm">samoano</language> + <language type="sma">sami meridional</language> + <language type="smi">lenguas sami (otras)</language> + <language type="smj">sami lule</language> + <language type="smn">sami inari</language> + <language type="sms" references="RP3">sami skolt</language> + <language type="sn">shona</language> + <language type="snk">soninké</language> + <language type="so">somalí</language> + <language type="sog">sogdiano</language> + <language type="son">songhai</language> + <language type="sq">albanés</language> + <language type="sr">serbio</language> + <language type="srn" references="RP1">sranan tongo</language> + <language type="srr">serer</language> + <language type="ss">siswati</language> + <language type="ssa">nilosaharianas (otras)</language> + <language type="st">sesotho</language> + <language type="su">sundanés</language> + <language type="suk">sukuma</language> + <language type="sus">susu</language> + <language type="sux">sumerio</language> + <language type="sv">sueco</language> + <language type="sw">swahili</language> + <language type="syr">siriaco</language> + <language type="ta">tamil</language> + <language type="tai">tai (otras)</language> + <language type="te">telugu</language> + <language type="tem">temne</language> + <language type="ter">tereno</language> + <language type="tet">tetún</language> + <language type="tet" references="RP1" alt="proposed-u167-1" draft="provisional">tetun</language> + <language type="tg">tayiko</language> + <language type="th">tailandés</language> + <language type="ti" references="RP1">tigriña</language> + <language type="tig">tigré</language> + <language type="tk" references="RP1">turcomano</language> + <language type="tkl">tokelauano</language> + <language type="tl">tagalo</language> + <language type="tlh">klingon</language> + <language type="tli">tlingit</language> + <language type="tmh">tamashek</language> + <language type="tn">setchwana</language> + <language type="tn" references="RP3" alt="proposed-u167-1" draft="provisional">sechuanés</language> + <language type="to">tonga (Islas Tonga)</language> + <language type="tog">tonga (Niasa)</language> + <language type="tpi">tok pisin</language> + <language type="tr">turco</language> + <language type="ts">tsonga</language> + <language type="tsi">tsimshiano</language> + <language type="tt" references="RP1">tártaro</language> + <language type="tum">tumbuka</language> + <language type="tup">lenguas tupí</language> + <language type="tut">altaicas (otras)</language> + <language type="tvl">tuvaluano</language> + <language type="tw">twi</language> + <language type="ty">tahitiano</language> + <language type="tyv">tuviniano</language> + <language type="udm">udmurt</language> + <language type="ug">uigur</language> + <language type="uga">ugarítico</language> + <language type="uk">ucraniano</language> + <language type="umb">umbundu</language> + <language type="und">indeterminada</language> + <language type="ur">urdu</language> + <language type="uz">uzbeko</language> + <language type="ve">venda</language> + <language type="vi">vietnamita</language> + <language type="vo" references="RP1">volapük</language> + <language type="vot">vótico</language> + <language type="wa">valón</language> + <language type="wak">lenguas wakasha</language> + <language type="wal">walamo</language> + <language type="war">waray</language> + <language type="was">washo</language> + <language type="wen">lenguas sorbias</language> + <language type="wo">uolof</language> + <language type="wo" references="RP3" alt="proposed-u167-1" draft="provisional">wolof</language> + <language type="xal">kalmyk</language> + <language type="xh">xhosa</language> + <language type="yap">yapés</language> + <language type="yi" references="RP1">yídish</language> + <language type="yo">yoruba</language> + <language type="ypk">lenguas yupik</language> + <language type="za">zhuang</language> + <language type="zap">zapoteco</language> + <language type="zen">zenaga</language> + <language type="zh">chino</language> + <language type="znd">zande</language> + <language type="zu">zulú</language> + <language type="zun">zuni</language> + </languages> + <scripts> + <script type="Arab">árabe</script> + <script type="Armn">armenio</script> + <script type="Batk">batak</script> + <script type="Beng">bengalí</script> + <script type="Blis">símbolos blis</script> + <script type="Bopo">bopomofo</script> + <script type="Brah">brahmi</script> + <script type="Brai">braille</script> + <script type="Buhd">buhid</script> + <script type="Cans">símbolos aborígenes canadienses unificados</script> + <script type="Cher">cherokee</script> + <script type="Cirt">cirth</script> + <script type="Copt">copto</script> + <script type="Cprt">chipriota</script> + <script type="Cyrl">cirílico</script> + <script type="Deva">devanagari</script> + <script type="Dsrt">deseret</script> + <script type="Egyd">egipcio demótico</script> + <script type="Egyh">egipcio hierático</script> + <script type="Egyp" references="RP2">jeroglíficos egipcios</script> + <script type="Ethi" references="RP3">etiópico</script> + <script type="Geor">georgiano</script> + <script type="Goth">gótico</script> + <script type="Grek">griego</script> + <script type="Gujr">gujarati</script> + <script type="Guru">gurmuji</script> + <script type="Hang">hangul</script> + <script type="Hani">han</script> + <script type="Hano">hanunoo</script> + <script type="Hans">han simplificado</script> + <script type="Hant">han tradicional</script> + <script type="Hebr">hebreo</script> + <script type="Hira">hiragana</script> + <script type="Hmng">pahawh hmong</script> + <script type="Hrkt" references="RP1">katakana o hiragana</script> + <script type="Hung" references="RP3">húngaro antiguo</script> + <script type="Inds">Indio (harappan)</script> + <script type="Ital">antigua bastardilla</script> + <script type="Java" references="RP1">javanés</script> + <script type="Kana">katakana</script> + <script type="Khmr">jemer</script> + <script type="Knda">canarés</script> + <script type="Laoo">lao</script> + <script type="Latf">latín (variante fraktur)</script> + <script type="Latg">latín (variante gaélica)</script> + <script type="Latn">latín</script> + <script type="Limb">limbu</script> + <script type="Lina">lineal A</script> + <script type="Linb" references="RP3">lineal B</script> + <script type="Maya" references="RP2">jeroglíficos mayas</script> + <script type="Mero">meroítico</script> + <script type="Mlym">malayálam</script> + <script type="Mong" references="RP1">mongol</script> + <script type="Mymr" references="RP3">birmano</script> + <script type="Ogam">ogham</script> + <script type="Orya">oriya</script> + <script type="Osma">osmaniya</script> + <script type="Phnx" references="RP3">fenicio</script> + <script type="Qaai">heredado</script> + <script type="Runr">rúnico</script> + <script type="Shaw" references="RP1">shaviano</script> + <script type="Sinh">binhala</script> + <script type="Syrc">siriaco</script> + <script type="Tagb">tagbanúa</script> + <script type="Tale">tai le</script> + <script type="Taml">tamil</script> + <script type="Telu">telugu</script> + <script type="Tglg">tagalo</script> + <script type="Thaa">thaana</script> + <script type="Thai">tailandés</script> + <script type="Tibt">tibetano</script> + <script type="Ugar">ugarítico</script> + <script type="Yiii">yi</script> + <script type="Zyyy">común</script> + </scripts> + <territories> + <territory type="001">Mundo</territory> + <territory type="002">África</territory> + <territory type="005">Suramérica</territory> + <territory type="009">Oceanía</territory> + <territory type="011">África occidental</territory> + <territory type="013">Centroamérica</territory> + <territory type="014">África oriental</territory> + <territory type="015">África septentrional</territory> + <territory type="017">África central</territory> + <territory type="018">África meridional</territory> + <territory type="019">Américas</territory> + <territory type="021">Norteamérica</territory> + <territory type="029">Caribe</territory> + <territory type="030">Asia oriental</territory> + <territory type="034">Asia meridional</territory> + <territory type="035">Sudeste asiático</territory> + <territory type="039">Europa meridional</territory> + <territory type="053">Australia y Nueva Zelanda</territory> + <territory type="054">Melanesia</territory> + <territory type="057">Micronesia [057]</territory> + <territory type="061">Polinesia</territory> + <territory type="142">Asia</territory> + <territory type="143">Asia central</territory> + <territory type="145">Asia occidental</territory> + <territory type="150">Europa</territory> + <territory type="151">Europa oriental</territory> + <territory type="154">Europa septentrional</territory> + <territory type="155">Europa occidental</territory> + <territory type="172" draft="provisional">Commonwealth de Estados Independientes</territory> + <territory type="419">Latinoamérica y el Caribe</territory> + <territory type="AD">Andorra</territory> + <territory type="AE">Emiratos Árabes Unidos</territory> + <territory type="AF">Afganistán</territory> + <territory type="AG">Antigua y Barbuda</territory> + <territory type="AI">Anguila</territory> + <territory type="AL">Albania</territory> + <territory type="AM">Armenia</territory> + <territory type="AN">Antillas Neerlandesas</territory> + <territory type="AO">Angola</territory> + <territory type="AQ">Antártida</territory> + <territory type="AR">Argentina</territory> + <territory type="AS">Samoa Americana</territory> + <territory type="AT">Austria</territory> + <territory type="AU">Australia</territory> + <territory type="AW">Aruba</territory> + <territory type="AX">Islas Åland</territory> + <territory type="AZ">Azerbaiyán</territory> + <territory type="BA">Bosnia-Herzegovina</territory> + <territory type="BB">Barbados</territory> + <territory type="BD">Bangladesh</territory> + <territory type="BE">Bélgica</territory> + <territory type="BF">Burkina Faso</territory> + <territory type="BG">Bulgaria</territory> + <territory type="BH" references="RP4">Bahréin</territory> + <territory type="BI">Burundi</territory> + <territory type="BJ">Benín</territory> + <territory type="BM">Bermudas</territory> + <territory type="BN">Brunéi</territory> + <territory type="BO">Bolivia</territory> + <territory type="BR">Brasil</territory> + <territory type="BS">Bahamas</territory> + <territory type="BT">Bután</territory> + <territory type="BV">Isla Bouvet</territory> + <territory type="BW">Botsuana</territory> + <territory type="BY">Bielorrusia</territory> + <territory type="BZ">Belice</territory> + <territory type="CA">Canadá</territory> + <territory type="CC">Islas Cocos (Keeling)</territory> + <territory type="CD">República Democrática del Congo</territory> + <territory type="CF">República Centroafricana</territory> + <territory type="CG">Congo</territory> + <territory type="CH">Suiza</territory> + <territory type="CI">Costa de Marfil</territory> + <territory type="CK">Islas Cook</territory> + <territory type="CL">Chile</territory> + <territory type="CM">Camerún</territory> + <territory type="CN">China</territory> + <territory type="CO">Colombia</territory> + <territory type="CR">Costa Rica</territory> + <territory type="CS">Serbia y Montenegro</territory> + <territory type="CU">Cuba</territory> + <territory type="CV">Cabo Verde</territory> + <territory type="CX">Isla Navidad</territory> + <territory type="CX" references="RP4" alt="proposed-u167-1" draft="provisional">Isla Christmas</territory> + <territory type="CY">Chipre</territory> + <territory type="CZ">República Checa</territory> + <territory type="DE">Alemania</territory> + <territory type="DJ">Yibuti</territory> + <territory type="DK">Dinamarca</territory> + <territory type="DM">Dominica</territory> + <territory type="DO">República Dominicana</territory> + <territory type="DZ">Argelia</territory> + <territory type="EC">Ecuador</territory> + <territory type="EE">Estonia</territory> + <territory type="EG">Egipto</territory> + <territory type="EH">Sáhara Occidental</territory> + <territory type="ER">Eritrea</territory> + <territory type="ES">España</territory> + <territory type="ET">Etiopía</territory> + <territory type="FI">Finlandia</territory> + <territory type="FJ">Fiyi</territory> + <territory type="FK">Islas Falkland (Malvinas)</territory> + <territory type="FM">Micronesia</territory> + <territory type="FO">Islas Feroe</territory> + <territory type="FR">Francia</territory> + <territory type="GA">Gabón</territory> + <territory type="GB">Reino Unido</territory> + <territory type="GD">Granada</territory> + <territory type="GE">Georgia</territory> + <territory type="GF">Guayana Francesa</territory> + <territory type="GH">Ghana</territory> + <territory type="GI">Gibraltar</territory> + <territory type="GL">Groenlandia</territory> + <territory type="GM">Gambia</territory> + <territory type="GN">Guinea</territory> + <territory type="GP">Guadalupe</territory> + <territory type="GQ">Guinea Ecuatorial</territory> + <territory type="GR">Grecia</territory> + <territory type="GS">Islas Georgia del Sur y Sandwich del Sur</territory> + <territory type="GT">Guatemala</territory> + <territory type="GU">Guam</territory> + <territory type="GW">Guinea-Bissau</territory> + <territory type="GY">Guyana</territory> + <territory type="HK">Hong-Kong, Región administrativa especial de China</territory> + <territory type="HM">Islas Heard y McDonald</territory> + <territory type="HN">Honduras</territory> + <territory type="HR">Croacia</territory> + <territory type="HT">Haití</territory> + <territory type="HU">Hungría</territory> + <territory type="ID">Indonesia</territory> + <territory type="IE">Irlanda</territory> + <territory type="IL">Israel</territory> + <territory type="IN">India</territory> + <territory type="IO" references="RP4">Territorio Británico del Océano Índico</territory> + <territory type="IQ">Iraq</territory> + <territory type="IR">Irán</territory> + <territory type="IS">Islandia</territory> + <territory type="IT">Italia</territory> + <territory type="JM">Jamaica</territory> + <territory type="JO">Jordania</territory> + <territory type="JP">Japón</territory> + <territory type="KE">Kenia</territory> + <territory type="KG" references="RP4">Kirguistán</territory> + <territory type="KH">Camboya</territory> + <territory type="KI">Kiribati</territory> + <territory type="KM">Comoras</territory> + <territory type="KN">San Cristóbal y Nieves</territory> + <territory type="KP">Corea del Norte</territory> + <territory type="KR">Corea del Sur</territory> + <territory type="KW">Kuwait</territory> + <territory type="KY">Islas Caimán</territory> + <territory type="KZ">Kazajstán</territory> + <territory type="LA">Laos</territory> + <territory type="LB">Líbano</territory> + <territory type="LC">Saint Lucia</territory> + <territory type="LI">Liechtenstein</territory> + <territory type="LK">Sri Lanka</territory> + <territory type="LR">Liberia</territory> + <territory type="LS">Lesotho</territory> + <territory type="LT">Lituania</territory> + <territory type="LU">Luxemburgo</territory> + <territory type="LV">Letonia</territory> + <territory type="LY">Libia</territory> + <territory type="MA">Marruecos</territory> + <territory type="MC">Mónaco</territory> + <territory type="MD" references="RP1">Moldavia</territory> + <territory type="MG">Madagascar</territory> + <territory type="MH">Islas Marshall</territory> + <territory type="MK">Macedonia</territory> + <territory type="ML">Malí</territory> + <territory type="MM">Myanmar</territory> + <territory type="MN">Mongolia</territory> + <territory type="MO">Macao, Región administrativa especial de China</territory> + <territory type="MP">Islas Marianas del Norte</territory> + <territory type="MQ">Martinica</territory> + <territory type="MR">Mauritania</territory> + <territory type="MS">Montserrat</territory> + <territory type="MT">Malta</territory> + <territory type="MU">Mauricio</territory> + <territory type="MV">Maldivas</territory> + <territory type="MW">Malawi</territory> + <territory type="MX">México</territory> + <territory type="MY">Malasia</territory> + <territory type="MZ">Mozambique</territory> + <territory type="NA">Namibia</territory> + <territory type="NC">Nueva Caledonia</territory> + <territory type="NE">Níger</territory> + <territory type="NF">Isla Norfolk</territory> + <territory type="NG">Nigeria</territory> + <territory type="NI">Nicaragua</territory> + <territory type="NL">Países Bajos</territory> + <territory type="NO">Noruega</territory> + <territory type="NP">Nepal</territory> + <territory type="NR">Nauru</territory> + <territory type="NU">Isla Niue</territory> + <territory type="NZ">Nueva Zelanda</territory> + <territory type="OM">Omán</territory> + <territory type="PA">Panamá</territory> + <territory type="PE">Perú</territory> + <territory type="PF">Polinesia Francesa</territory> + <territory type="PG">Papúa Nueva Guinea</territory> + <territory type="PH">Filipinas</territory> + <territory type="PK">Pakistán</territory> + <territory type="PL">Polonia</territory> + <territory type="PM">San Pedro y Miquelón</territory> + <territory type="PN">Pitcairn</territory> + <territory type="PR">Puerto Rico</territory> + <territory type="PS">Territorios Palestinos</territory> + <territory type="PT">Portugal</territory> + <territory type="PW">Palau</territory> + <territory type="PY">Paraguay</territory> + <territory type="QA">Qatar</territory> + <territory type="QO">Territorios alejados de Oceanía</territory> + <territory type="RE">Reunión</territory> + <territory type="RO">Rumanía</territory> + <territory type="RU">Rusia</territory> + <territory type="RW">Ruanda</territory> + <territory type="SA">Arabia Saudí</territory> + <territory type="SB">Islas Salomón</territory> + <territory type="SC">Seychelles</territory> + <territory type="SD">Sudán</territory> + <territory type="SE">Suecia</territory> + <territory type="SG">Singapur</territory> + <territory type="SH">Santa Elena</territory> + <territory type="SI">Eslovenia</territory> + <territory type="SJ">Svalbard y Jan Mayen</territory> + <territory type="SK">Eslovaquia</territory> + <territory type="SL">Sierra Leona</territory> + <territory type="SM">San Marino</territory> + <territory type="SN">Senegal</territory> + <territory type="SO">Somalia</territory> + <territory type="SR" references="RP4">Surinam</territory> + <territory type="ST">Santo Tomé y Príncipe</territory> + <territory type="SV">El Salvador</territory> + <territory type="SY">Siria</territory> + <territory type="SZ">Suazilandia</territory> + <territory type="TC">Islas Turcas y Caicos</territory> + <territory type="TD">Chad</territory> + <territory type="TF">Territorios Australes Franceses</territory> + <territory type="TG">Togo</territory> + <territory type="TH">Tailandia</territory> + <territory type="TJ">Tayikistán</territory> + <territory type="TK">Islas Tokelau</territory> + <territory type="TL">Timor Oriental</territory> + <territory type="TM">Turkmenistán</territory> + <territory type="TN">Túnez</territory> + <territory type="TO">Tonga</territory> + <territory type="TR">Turquía</territory> + <territory type="TT">Trinidad y Tabago</territory> + <territory type="TV">Tuvalu</territory> + <territory type="TW">Taiwán</territory> + <territory type="TZ">Tanzania</territory> + <territory type="UA">Ucrania</territory> + <territory type="UG">Uganda</territory> + <territory type="UM">Islas menores alejadas de los Estados Unidos</territory> + <territory type="US">Estados Unidos</territory> + <territory type="UY">Uruguay</territory> + <territory type="UZ">Uzbekistán</territory> + <territory type="VA">Ciudad del Vaticano</territory> + <territory type="VC">San Vicente y las Granadinas</territory> + <territory type="VE">Venezuela</territory> + <territory type="VG">Islas Vírgenes Británicas</territory> + <territory type="VI">Islas Vírgenes de los Estados Unidos</territory> + <territory type="VN">Vietnam</territory> + <territory type="VU">Vanuatu</territory> + <territory type="WF">Wallis y Futuna</territory> + <territory type="WS">Samoa</territory> + <territory type="YE">Yemen</territory> + <territory type="YT">Mayotte</territory> + <territory type="ZA">Sudáfrica</territory> + <territory type="ZM">Zambia</territory> + <territory type="ZW">Zimbabue</territory> + </territories> + <variants> + <variant type="REVISED" references="RP3">Ortografía revisada</variant> + </variants> + <keys> + <key type="calendar">calendario</key> + <key type="collation">intercalación</key> + <key type="currency">moneda</key> + </keys> + <types> + <type type="buddhist" key="calendar">calendario budista</type> + <type type="chinese" key="calendar">calendario chino</type> + <type type="direct" key="collation">orden directo</type> + <type type="gregorian" key="calendar">calendario gregoriano</type> + <type type="hebrew" key="calendar">calendario hebreo</type> + <type type="islamic" key="calendar">calendario islámico</type> + <type type="islamic-civil" key="calendar">calendario civil islámico</type> + <type type="japanese" key="calendar">calendario japonés</type> + <type type="phonebook" key="collation">orden de listín telefónico</type> + <type type="pinyin" key="collation">orden pinyin</type> + <type type="stroke" key="collation" references="RP3">orden de los trazos</type> + <type type="traditional" key="collation">orden tradicional</type> + </types> + <measurementSystemNames> + <measurementSystemName type="US" references="RP3">estadounidense</measurementSystemName> + <measurementSystemName type="metric" references="RP3">métrico</measurementSystemName> + </measurementSystemNames> + </localeDisplayNames> + <characters> + <exemplarCharacters>[a á b-e é f-i í j-n ñ o ó p-u ú ü v-z]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[ü]</exemplarCharacters> + </characters> + <delimiters> + <quotationStart>‘</quotationStart> + <quotationEnd>’</quotationEnd> + <alternateQuotationStart>“</alternateQuotationStart> + <alternateQuotationEnd>”</alternateQuotationEnd> + </delimiters> + <dates> + <localizedPatternChars>GuMtkHmsSEDFwWahKzUeygAZvcL</localizedPatternChars> + <calendars> + <calendar type="gregorian"> + <months> + <monthContext type="format"> + <monthWidth type="abbreviated"> + <month type="1">ene</month> + <month type="2">feb</month> + <month type="3">mar</month> + <month type="4">abr</month> + <month type="5">may</month> + <month type="6">jun</month> + <month type="7">jul</month> + <month type="8">ago</month> + <month type="9">sep</month> + <month type="10">oct</month> + <month type="11">nov</month> + <month type="12">dic</month> + </monthWidth> + <monthWidth type="wide"> + <month type="1">enero</month> + <month type="2">febrero</month> + <month type="3">marzo</month> + <month type="4">abril</month> + <month type="5">mayo</month> + <month type="6">junio</month> + <month type="7">julio</month> + <month type="8">agosto</month> + <month type="9">septiembre</month> + <month type="10">octubre</month> + <month type="11">noviembre</month> + <month type="12">diciembre</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="1">E</month> + <month type="2">F</month> + <month type="3">M</month> + <month type="4">A</month> + <month type="5">M</month> + <month type="6">J</month> + <month type="7">J</month> + <month type="8">A</month> + <month type="9">S</month> + <month type="10">O</month> + <month type="11">N</month> + <month type="12">D</month> + </monthWidth> + </monthContext> + </months> + <days> + <dayContext type="format"> + <dayWidth type="abbreviated"> + <day type="sun">dom</day> + <day type="mon">lun</day> + <day type="tue">mar</day> + <day type="wed">mié</day> + <day type="thu">jue</day> + <day type="fri">vie</day> + <day type="sat">sáb</day> + </dayWidth> + <dayWidth type="wide"> + <day type="sun">domingo</day> + <day type="mon">lunes</day> + <day type="tue">martes</day> + <day type="wed">miércoles</day> + <day type="thu">jueves</day> + <day type="fri">viernes</day> + <day type="sat">sábado</day> + </dayWidth> + </dayContext> + <dayContext type="stand-alone"> + <dayWidth type="narrow"> + <day type="sun">D</day> + <day type="mon">L</day> + <day type="tue">M</day> + <day type="wed">M</day> + <day type="thu">J</day> + <day type="fri">V</day> + <day type="sat">S</day> + </dayWidth> + </dayContext> + </days> + <quarters> + <quarterContext type="format"> + <quarterWidth type="abbreviated"> + <quarter type="1">T1</quarter> + <quarter type="2">T2</quarter> + <quarter type="3">T3</quarter> + <quarter type="4">T4</quarter> + </quarterWidth> + <quarterWidth type="wide"> + <quarter type="1">1er trimestre</quarter> + <quarter type="2">2º trimestre</quarter> + <quarter type="3">3er trimestre</quarter> + <quarter type="4">4º trimestre</quarter> + </quarterWidth> + </quarterContext> + </quarters> + <am references="RP1">a.m.</am> + <pm references="RP1">p.m.</pm> + <eras> + <eraAbbr> + <era type="0">a.C.</era> + <era type="1">d.C.</era> + </eraAbbr> + </eras> + <dateFormats> + <dateFormatLength type="full"> + <dateFormat> + <pattern>EEEE d' de 'MMMM' de 'yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="long"> + <dateFormat> + <pattern>d' de 'MMMM' de 'yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="medium"> + <dateFormat> + <pattern>dd-MMM-yy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="short"> + <dateFormat> + <pattern>d/MM/yy</pattern> + </dateFormat> + </dateFormatLength> + </dateFormats> + <timeFormats> + <timeFormatLength type="full"> + <timeFormat> + <pattern>HH'H'mm''ss" z</pattern> + </timeFormat> + </timeFormatLength> + </timeFormats> + <dateTimeFormats> + <availableFormats> + <dateFormatItem id="HHmm" draft="provisional">HH:mm</dateFormatItem> + <dateFormatItem id="HHmmss" draft="provisional">HH:mm:ss</dateFormatItem> + <dateFormatItem id="MMMdd" draft="provisional">dd-MMM</dateFormatItem> + <dateFormatItem id="MMd" draft="provisional">d/MM</dateFormatItem> + <dateFormatItem id="hhmm" draft="provisional">hh:mm a</dateFormatItem> + <dateFormatItem id="hhmmss" draft="provisional">hh:mm:ss a</dateFormatItem> + <dateFormatItem id="yyMM" draft="provisional">MM/yy</dateFormatItem> + <dateFormatItem id="yyMMM" draft="provisional">MMM-yy</dateFormatItem> + <dateFormatItem id="yyQQQQ" draft="provisional">QQQQ yy</dateFormatItem> + </availableFormats> + </dateTimeFormats> + <fields> + <field type="era"> + <displayName>era</displayName> + </field> + <field type="year"> + <displayName>año</displayName> + </field> + <field type="month"> + <displayName>mes</displayName> + </field> + <field type="week"> + <displayName>semana</displayName> + </field> + <field type="day"> + <displayName>día</displayName> + </field> + <field type="weekday"> + <displayName>día de la semana</displayName> + </field> + <field type="dayperiod"> + <displayName>periodo del día</displayName> + </field> + <field type="hour"> + <displayName>hora</displayName> + </field> + <field type="minute"> + <displayName>minuto</displayName> + </field> + <field type="second"> + <displayName>segundo</displayName> + </field> + <field type="zone"> + <displayName>zona</displayName> + </field> + </fields> + </calendar> + </calendars> + <timeZoneNames> + <zone type="Antarctica/South_Pole"> + <exemplarCity>Polo Sur</exemplarCity> + </zone> + <zone type="America/Argentina/Rio_Gallegos"> + <exemplarCity references="RP3">Río Gallegos</exemplarCity> + </zone> + <zone type="America/Argentina/Tucuman"> + <exemplarCity references="RP3">Tucumán</exemplarCity> + </zone> + <zone type="America/Cordoba"> + <exemplarCity>Córdoba</exemplarCity> + </zone> + <zone type="America/Halifax"> + <long> + <standard>Hora estándar del Atlántico</standard> + <daylight>Hora de verano del Atlántico</daylight> + </long> + <short> + <standard>AST</standard> + <daylight>ADT</daylight> + </short> + </zone> + <zone type="America/St_Johns"> + <long> + <standard>Hora estándar de Newfoundland</standard> + <daylight>Hora de verano de Newfoundland</daylight> + </long> + <short> + <standard>CNT</standard> + </short> + <exemplarCity>St. Johns</exemplarCity> + </zone> + <!-- Chile --> + <zone type="Pacific/Easter"> + <exemplarCity>Pascua</exemplarCity> + </zone> + <zone type="Asia/Shanghai"> + <long> + <standard>Hora estándar de China</standard> + <daylight>Hora estándar de China</daylight> + </long> + <short> + <standard>CTT</standard> + </short> + </zone> + <zone type="Pacific/Galapagos"> + <exemplarCity references="RP3">Galápagos</exemplarCity> + </zone> + <!-- Spain --> + <zone type="Atlantic/Canary"> + <exemplarCity>Canarias</exemplarCity> + </zone> + <zone type="Europe/Paris"> + <long> + <standard>Hora estándar de Europa Central</standard> + <daylight>Hora de verano de Europa Central</daylight> + </long> + <short> + <standard>CET</standard> + <daylight>CEST</daylight> + </short> + <exemplarCity>París</exemplarCity> + </zone> + <zone type="Europe/London"> + <exemplarCity>Londres</exemplarCity> + </zone> + <zone type="Asia/Jerusalem"> + <long> + <standard>Hora estándar de Israel</standard> + <daylight>Hora de verano de Israel</daylight> + </long> + <short> + <standard>IST</standard> + <daylight>IDT</daylight> + </short> + <exemplarCity>Jerusalén</exemplarCity> + </zone> + <zone type="Asia/Tokyo"> + <long> + <standard>Hora estándar de Japón</standard> + <daylight>Hora estándar de Japón</daylight> + </long> + <short> + <standard>JST</standard> + <daylight>JST</daylight> + </short> + <exemplarCity>Tokio</exemplarCity> + </zone> + <zone type="Africa/Casablanca"> + <long> + <standard>Hora media de Greenwich</standard> + <daylight>Hora media de Greenwich</daylight> + </long> + <short> + <standard>GMT</standard> + <daylight>GMT</daylight> + </short> + <exemplarCity>Casablanca</exemplarCity> + </zone> + <zone type="America/Mexico_City"> + <exemplarCity>Ciudad de México</exemplarCity> + </zone> + <zone type="America/Merida"> + <exemplarCity>Mérida</exemplarCity> + </zone> + <zone type="America/Cancun"> + <exemplarCity>Cancún</exemplarCity> + </zone> + <!-- French Polynesia --> + <zone type="Pacific/Tahiti"> + <exemplarCity>Tahití</exemplarCity> + </zone> + <zone type="Europe/Lisbon"> + <exemplarCity>Lisboa</exemplarCity> + </zone> + <zone type="Europe/Bucharest"> + <long> + <standard>Hora estándar de Europa del Este</standard> + <daylight>Hora de verano de Europa del Este</daylight> + </long> + <short> + <standard>EET</standard> + <daylight>EEST</daylight> + </short> + <exemplarCity>Bucarest</exemplarCity> + </zone> + <!-- Russia --> + <zone type="Europe/Kaliningrad"> + <exemplarCity>Kaliningrado</exemplarCity> + </zone> + <zone type="Europe/Moscow"> + <exemplarCity>Moscú</exemplarCity> + </zone> + <zone type="Asia/Yekaterinburg"> + <exemplarCity>Yekaterinburgo</exemplarCity> + </zone> + <zone type="Pacific/Honolulu"> + <long> + <standard>Hora estándar de Hawai</standard> + <daylight>Hora estándar de Hawai</daylight> + </long> + <short> + <standard>HST</standard> + <daylight>HST</daylight> + </short> + </zone> + <zone type="America/Anchorage"> + <long> + <standard>Hora estándar de Alaska</standard> + <daylight>Hora de verano de Alaska</daylight> + </long> + <short> + <standard>AKST</standard> + <daylight>AKDT</daylight> + </short> + </zone> + <zone type="America/Los_Angeles"> + <long> + <standard>Hora estándar del Pacífico</standard> + <daylight>Hora de verano del Pacífico</daylight> + </long> + <short> + <standard>PST</standard> + <daylight>PDT</daylight> + </short> + <exemplarCity>Los Ángeles</exemplarCity> + </zone> + <zone type="America/Phoenix"> + <long> + <standard>Hora estándar de Montaña</standard> + <daylight>Hora estándar de Montaña</daylight> + </long> + <short> + <standard>MST</standard> + <daylight>MST</daylight> + </short> + </zone> + <zone type="America/Denver"> + <long> + <standard>Hora estándar de Montaña</standard> + <daylight>Hora de verano de Montaña</daylight> + </long> + <short> + <standard>MST</standard> + <daylight>MDT</daylight> + </short> + </zone> + <zone type="America/Chicago"> + <long> + <standard>Hora estándar central</standard> + <daylight>Hora de verano central</daylight> + </long> + <short> + <standard>CST</standard> + <daylight>CDT</daylight> + </short> + </zone> + <zone type="America/Indianapolis"> + <exemplarCity>Indianápolis</exemplarCity> + </zone> + <zone type="America/New_York"> + <long> + <standard>Hora estándar oriental</standard> + <daylight>Hora de verano oriental</daylight> + </long> + <short> + <standard>EST</standard> + <daylight>EDT</daylight> + </short> + <exemplarCity>Nueva York</exemplarCity> + </zone> + </timeZoneNames> + </dates> + <numbers> + <symbols> + <decimal>,</decimal> + <group>.</group> + </symbols> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>¤#,##0.00;(¤#,##0.00)</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + <currencies> + <currency type="ADP"> + <displayName>peseta andorrana</displayName> + </currency> + <currency type="AED"> + <displayName>dirham de los Emiratos Árabes Unidos</displayName> + </currency> + <currency type="AFA"> + <displayName>afgani (1927-2002)</displayName> + </currency> + <currency type="AFN"> + <displayName>afgani</displayName> + <symbol>Af</symbol> + </currency> + <currency type="ALL"> + <displayName>lek albanés</displayName> + <symbol>lek</symbol> + </currency> + <currency type="AMD"> + <displayName>dram armenio</displayName> + <symbol>dram</symbol> + </currency> + <currency type="ANG"> + <displayName>florín de las Antillas Neerlandesas</displayName> + <symbol>NA f.</symbol> + </currency> + <currency type="AOA"> + <displayName>kwanza angoleño</displayName> + </currency> + <currency type="AOK"> + <displayName>kwanza angoleño (1977-1990)</displayName> + </currency> + <currency type="AON"> + <displayName>nuevo kwanza angoleño (1990-2000)</displayName> + </currency> + <currency type="AOR"> + <displayName>kwanza reajustado angoleño (1995-1999)</displayName> + </currency> + <currency type="ARA"> + <displayName>austral argentino</displayName> + </currency> + <currency type="ARP"> + <displayName>peso argentino (1983-1985)</displayName> + </currency> + <currency type="ARS"> + <displayName>peso argentino</displayName> + <symbol>Arg$</symbol> + </currency> + <currency type="ATS"> + <displayName>chelín austriaco</displayName> + </currency> + <currency type="AUD"> + <displayName>dólar australiano</displayName> + <symbol>$A</symbol> + </currency> + <currency type="AWG"> + <displayName>florín de Aruba</displayName> + </currency> + <currency type="AZM"> + <displayName>manat azerí</displayName> + </currency> + <currency type="BAD"> + <displayName>dinar bosnio</displayName> + </currency> + <currency type="BAM"> + <displayName references="RP1">marco convertible de Bosnia-Herzegovina</displayName> + <symbol>KM</symbol> + </currency> + <currency type="BBD"> + <displayName>dólar de Barbados</displayName> + <symbol>BDS$</symbol> + </currency> + <currency type="BDT"> + <displayName>taka de Bangladesh</displayName> + <symbol>Tk</symbol> + </currency> + <currency type="BEC"> + <displayName>franco belga (convertible)</displayName> + </currency> + <currency type="BEF"> + <displayName>franco belga</displayName> + <symbol>BF</symbol> + </currency> + <currency type="BEL"> + <displayName>franco belga (financiero)</displayName> + </currency> + <currency type="BGL"> + <displayName>lev fuerte búlgaro</displayName> + <symbol>lev</symbol> + </currency> + <currency type="BGN"> + <displayName>nuevo lev búlgaro</displayName> + </currency> + <currency type="BHD"> + <displayName>dinar bahreiní</displayName> + <symbol>BD</symbol> + </currency> + <currency type="BIF"> + <displayName>franco de Burundi</displayName> + <symbol>Fbu</symbol> + </currency> + <currency type="BMD"> + <displayName>dólar de Bermudas</displayName> + <symbol>Ber$</symbol> + </currency> + <currency type="BND"> + <displayName>dólar de Brunéi</displayName> + </currency> + <currency type="BOB"> + <displayName>boliviano</displayName> + <symbol>Bs</symbol> + </currency> + <currency type="BOP"> + <displayName>peso boliviano</displayName> + </currency> + <currency type="BOV"> + <displayName>MVDOL boliviano</displayName> + </currency> + <currency type="BRB"> + <displayName>nuevo cruceiro brasileño (1967-1986)</displayName> + </currency> + <currency type="BRC"> + <displayName>cruzado brasileño</displayName> + </currency> + <currency type="BRE"> + <displayName>cruceiro brasileño (1990-1993)</displayName> + </currency> + <currency type="BRL"> + <displayName>real brasileño</displayName> + <symbol>R$</symbol> + </currency> + <currency type="BRN"> + <displayName>nuevo cruzado brasileño</displayName> + </currency> + <currency type="BRR"> + <displayName>cruceiro brasileño</displayName> + </currency> + <currency type="BSD"> + <displayName>dólar de las Bahamas</displayName> + </currency> + <currency type="BTN"> + <displayName>ngultrum butanés</displayName> + <symbol>Nu</symbol> + </currency> + <currency type="BUK"> + <displayName>kyat birmano</displayName> + </currency> + <currency type="BWP"> + <displayName>pula botsuano</displayName> + </currency> + <currency type="BYB"> + <displayName>nuevo rublo bielorruso (1994-1999)</displayName> + </currency> + <currency type="BYR"> + <displayName>rublo bielorruso</displayName> + <symbol>Rbl</symbol> + </currency> + <currency type="BZD"> + <displayName>dólar de Belice</displayName> + <symbol>BZ$</symbol> + </currency> + <currency type="CAD"> + <displayName>dólar canadiense</displayName> + <symbol>Can$</symbol> + </currency> + <currency type="CDF"> + <displayName>franco congoleño</displayName> + </currency> + <currency type="CHF"> + <displayName>franco suizo</displayName> + <symbol>SwF</symbol> + </currency> + <currency type="CHW"> + <displayName references="RP3" draft="provisional">WIR franc</displayName> + </currency> + <currency type="CLF"> + <displayName>unidad de fomento chilena</displayName> + </currency> + <currency type="CLP"> + <displayName>peso chileno</displayName> + <symbol>Ch$</symbol> + </currency> + <currency type="CNY"> + <displayName>yuan renminbi chino</displayName> + <symbol>Y</symbol> + </currency> + <currency type="COP"> + <displayName>peso colombiano</displayName> + <symbol>Col$</symbol> + </currency> + <currency type="COU"> + <displayName references="RP1">unidad de valor real colombiana</displayName> + </currency> + <currency type="CRC"> + <displayName>colón costarricense</displayName> + <symbol>C</symbol> + </currency> + <currency type="CSD"> + <displayName references="RP1">dinar serbio</displayName> + </currency> + <currency type="CSK"> + <displayName>corona fuerte checoslovaca</displayName> + </currency> + <currency type="CUP"> + <displayName>peso cubano</displayName> + </currency> + <currency type="CVE"> + <displayName>escudo de Cabo Verde</displayName> + <symbol>CVEsc</symbol> + </currency> + <currency type="CYP"> + <displayName>libra chipriota</displayName> + <symbol>£C</symbol> + </currency> + <currency type="CZK"> + <displayName>corona checa</displayName> + </currency> + <currency type="DDM"> + <displayName>ostmark de Alemania del Este</displayName> + </currency> + <currency type="DEM"> + <displayName>marco alemán</displayName> + </currency> + <currency type="DJF"> + <displayName>franco de Yibuti</displayName> + <symbol>DF</symbol> + </currency> + <currency type="DKK"> + <displayName>corona danesa</displayName> + <symbol>DKr</symbol> + </currency> + <currency type="DOP"> + <displayName>peso dominicano</displayName> + <symbol>RD$</symbol> + </currency> + <currency type="DZD"> + <displayName>dinar argelino</displayName> + <symbol>DA</symbol> + </currency> + <currency type="ECS"> + <displayName>sucre ecuatoriano</displayName> + </currency> + <currency type="ECV"> + <displayName>unidad de valor constante (UVC) ecuatoriana</displayName> + </currency> + <currency type="EEK"> + <displayName>corona estonia</displayName> + </currency> + <currency type="EGP"> + <displayName>libra egipcia</displayName> + </currency> + <currency type="EQE"> + <displayName draft="provisional">ekwele</displayName> + </currency> + <currency type="ERN"> + <displayName>nakfa eritreo</displayName> + </currency> + <currency type="ESA"> + <displayName>peseta española (cuenta A)</displayName> + </currency> + <currency type="ESB"> + <displayName>peseta española (cuenta convertible)</displayName> + </currency> + <currency type="ESP"> + <displayName>peseta española</displayName> + <symbol>₧</symbol> + </currency> + <currency type="ETB"> + <displayName>birr etíope</displayName> + <symbol>Br</symbol> + </currency> + <currency type="EUR"> + <displayName>euro</displayName> + </currency> + <currency type="FIM"> + <displayName>marco finlandés</displayName> + </currency> + <currency type="FJD"> + <displayName>dólar de las Islas Fiyi</displayName> + <symbol>F$</symbol> + </currency> + <currency type="FKP"> + <displayName>libra de las Islas Malvinas</displayName> + </currency> + <currency type="FRF"> + <displayName>franco francés</displayName> + </currency> + <currency type="GBP"> + <displayName>libra esterlina británica</displayName> + </currency> + <currency type="GEK"> + <displayName>kupon larit georgiano</displayName> + </currency> + <currency type="GEL"> + <displayName>lari georgiano</displayName> + <symbol>lari</symbol> + </currency> + <currency type="GHC"> + <displayName>cedi ghanés</displayName> + </currency> + <currency type="GIP"> + <displayName>libra de Gibraltar</displayName> + </currency> + <currency type="GMD"> + <displayName>dalasi gambiano</displayName> + </currency> + <currency type="GNF"> + <displayName references="RP1">franco guineano</displayName> + <symbol>GF</symbol> + </currency> + <currency type="GNS"> + <displayName>syli guineano</displayName> + </currency> + <currency type="GQE"> + <displayName>ekuele de Guinea Ecuatorial</displayName> + </currency> + <currency type="GRD"> + <displayName>dracma griego</displayName> + </currency> + <currency type="GTQ"> + <displayName>quetzal guatemalteco</displayName> + <symbol>Q</symbol> + </currency> + <currency type="GWE"> + <displayName>escudo de Guinea Portuguesa</displayName> + </currency> + <currency type="GWP"> + <displayName>peso de Guinea-Bissáu</displayName> + </currency> + <currency type="GYD"> + <displayName>dólar guyanés</displayName> + <symbol>G$</symbol> + </currency> + <currency type="HKD"> + <displayName>dólar de Hong Kong</displayName> + <symbol>HK$</symbol> + </currency> + <currency type="HNL"> + <displayName>lempira hondureño</displayName> + <symbol>L</symbol> + </currency> + <currency type="HRD"> + <displayName>dinar croata</displayName> + </currency> + <currency type="HRK"> + <displayName>kuna croata</displayName> + </currency> + <currency type="HTG"> + <displayName>gourde haitiano</displayName> + </currency> + <currency type="HUF"> + <displayName>florín húngaro</displayName> + <symbol>Ft</symbol> + </currency> + <currency type="IDR"> + <displayName>rupia indonesia</displayName> + <symbol>Rp</symbol> + </currency> + <currency type="IEP"> + <displayName>libra irlandesa</displayName> + <symbol>IR£</symbol> + </currency> + <currency type="ILP"> + <displayName>libra israelí</displayName> + </currency> + <currency type="ILS"> + <displayName>nuevo sheqel israelí</displayName> + </currency> + <currency type="INR"> + <displayName>rupia india</displayName> + </currency> + <currency type="IQD"> + <displayName>dinar iraquí</displayName> + <symbol>ID</symbol> + </currency> + <currency type="IRR"> + <displayName>rial iraní</displayName> + <symbol>RI</symbol> + </currency> + <currency type="ISK"> + <displayName>corona islandesa</displayName> + </currency> + <currency type="ITL"> + <displayName>lira italiana</displayName> + </currency> + <currency type="JMD"> + <displayName>dólar de Jamaica</displayName> + <symbol>J$</symbol> + </currency> + <currency type="JOD"> + <displayName>dinar jordano</displayName> + <symbol>JD</symbol> + </currency> + <currency type="JPY"> + <displayName>yen japonés</displayName> + </currency> + <currency type="KES"> + <displayName>chelín keniata</displayName> + <symbol>K Sh</symbol> + </currency> + <currency type="KGS"> + <displayName>som kirguís</displayName> + <symbol>som</symbol> + </currency> + <currency type="KHR"> + <displayName>riel camboyano</displayName> + <symbol>CR</symbol> + </currency> + <currency type="KMF"> + <displayName>franco comorense</displayName> + <symbol>CF</symbol> + </currency> + <currency type="KPW"> + <displayName>won norcoreano</displayName> + </currency> + <currency type="KRW"> + <displayName>won surcoreano</displayName> + </currency> + <currency type="KWD"> + <displayName>dinar kuwaití</displayName> + <symbol>KD</symbol> + </currency> + <currency type="KYD"> + <displayName>dólar de las Islas Caimán</displayName> + </currency> + <currency type="KZT"> + <displayName>tenge kazako</displayName> + <symbol>T</symbol> + </currency> + <currency type="LAK"> + <displayName>kip laosiano</displayName> + </currency> + <currency type="LBP"> + <displayName>libra libanesa</displayName> + <symbol>LL</symbol> + </currency> + <currency type="LKR"> + <displayName>rupia de Sri Lanka</displayName> + <symbol>SL Re</symbol> + </currency> + <currency type="LRD"> + <displayName>dólar liberiano</displayName> + </currency> + <currency type="LSL"> + <displayName>loti lesothense</displayName> + <symbol>M</symbol> + </currency> + <currency type="LSM"> + <displayName references="RP1" draft="provisional">maloti lesothense</displayName> + </currency> + <currency type="LTL"> + <displayName>litas lituano</displayName> + </currency> + <currency type="LTT"> + <displayName>talonas lituano</displayName> + </currency> + <currency type="LUC"> + <displayName>franco convertible luxemburgués</displayName> + </currency> + <currency type="LUF"> + <displayName>franco luxemburgués</displayName> + </currency> + <currency type="LUL"> + <displayName>franco financiero luxemburgués</displayName> + </currency> + <currency type="LVL"> + <displayName>lats letón</displayName> + </currency> + <currency type="LVR"> + <displayName>rublo letón</displayName> + </currency> + <currency type="LYD"> + <displayName>dinar libio</displayName> + <symbol>LD</symbol> + </currency> + <currency type="MAD"> + <displayName>dirham marroquí</displayName> + </currency> + <currency type="MAF"> + <displayName>franco marroquí</displayName> + </currency> + <currency type="MDL"> + <displayName>leu moldavo</displayName> + </currency> + <currency type="MGA"> + <displayName>ariary malgache</displayName> + </currency> + <currency type="MGF"> + <displayName>franco malgache</displayName> + </currency> + <currency type="MKD"> + <displayName>dinar macedonio</displayName> + <symbol>MDen</symbol> + </currency> + <currency type="MLF"> + <displayName>franco malí</displayName> + </currency> + <currency type="MMK"> + <displayName>kyat de Myanmar</displayName> + </currency> + <currency type="MNT"> + <displayName>tugrik mongol</displayName> + <symbol>Tug</symbol> + </currency> + <currency type="MOP"> + <displayName>pataca de Macao</displayName> + </currency> + <currency type="MRO"> + <displayName>ouguiya mauritano</displayName> + <symbol>UM</symbol> + </currency> + <currency type="MTL"> + <displayName>lira maltesa</displayName> + <symbol>Lm</symbol> + </currency> + <currency type="MTP"> + <displayName>libra maltesa</displayName> + </currency> + <currency type="MUR"> + <displayName>rupia mauriciana</displayName> + </currency> + <currency type="MVR"> + <displayName>rufiyaa de Maldivas</displayName> + </currency> + <currency type="MWK"> + <displayName>kwacha de Malawi</displayName> + <symbol>MK</symbol> + </currency> + <currency type="MXN"> + <displayName>peso mexicano</displayName> + <symbol>MEX$</symbol> + </currency> + <currency type="MXP"> + <displayName>peso de plata mexicano (1861-1992)</displayName> + </currency> + <currency type="MXV"> + <displayName>unidad de inversión (UDI) mexicana</displayName> + </currency> + <currency type="MYR"> + <displayName>ringgit malasio</displayName> + <symbol>RM</symbol> + </currency> + <currency type="MZE"> + <displayName>escudo mozambiqueño</displayName> + </currency> + <currency type="MZM"> + <displayName>metical mozambiqueño</displayName> + <symbol>Mt</symbol> + </currency> + <currency type="NAD"> + <displayName>dólar de Namibia</displayName> + <symbol>N$</symbol> + </currency> + <currency type="NGN"> + <displayName>naira nigeriano</displayName> + </currency> + <currency type="NIC"> + <displayName>córdoba nicaragüense</displayName> + </currency> + <currency type="NIO"> + <displayName>córdoba oro nicaragüense</displayName> + <symbol references="R1">C$</symbol> + </currency> + <currency type="NLG"> + <displayName>florín neerlandés</displayName> + </currency> + <currency type="NOK"> + <displayName>corona noruega</displayName> + <symbol>NKr</symbol> + </currency> + <currency type="NPR"> + <displayName>rupia nepalesa</displayName> + <symbol>Nrs</symbol> + </currency> + <currency type="NZD"> + <displayName>dólar neozelandés</displayName> + <symbol>$NZ</symbol> + </currency> + <currency type="OMR"> + <displayName>rial omaní</displayName> + <symbol>RO</symbol> + </currency> + <currency type="PAB"> + <displayName>balboa panameño</displayName> + <symbol draft="unconfirmed">B</symbol> + </currency> + <currency type="PEI"> + <displayName>inti peruano</displayName> + </currency> + <currency type="PEN"> + <displayName>nuevo sol peruano</displayName> + <symbol draft="unconfirmed">S/</symbol> + </currency> + <currency type="PES"> + <displayName>sol peruano</displayName> + </currency> + <currency type="PGK"> + <displayName>kina de Papúa Nueva Guinea</displayName> + </currency> + <currency type="PHP"> + <displayName>peso filipino</displayName> + </currency> + <currency type="PKR"> + <displayName>rupia pakistaní</displayName> + <symbol>Pra</symbol> + </currency> + <currency type="PLN"> + <displayName>zloty polaco</displayName> + <symbol>Zl</symbol> + </currency> + <currency type="PLZ"> + <displayName>zloty polaco (1950-1995)</displayName> + </currency> + <currency type="PTE"> + <displayName>escudo portugués</displayName> + </currency> + <currency type="PYG"> + <displayName>guaraní paraguayo</displayName> + <symbol draft="unconfirmed">G</symbol> + <symbol references="R2" alt="variant" draft="unconfirmed">₲</symbol> + </currency> + <currency type="QAR"> + <displayName>riyal de Qatar</displayName> + <symbol>QR</symbol> + </currency> + <currency type="RHD"> + <displayName references="RP3">dólar rodesiano</displayName> + </currency> + <currency type="ROL"> + <displayName references="RP3">antiguo leu rumano</displayName> + <symbol>leu</symbol> + </currency> + <currency type="RON"> + <displayName references="RP1">leu rumano</displayName> + </currency> + <currency type="RUB"> + <displayName>rublo ruso</displayName> + </currency> + <currency type="RUR"> + <displayName>rublo ruso (1991-1998)</displayName> + </currency> + <currency type="RWF"> + <displayName>franco ruandés</displayName> + </currency> + <currency type="SAR"> + <displayName>riyal saudí</displayName> + <symbol>SRl</symbol> + </currency> + <currency type="SBD"> + <displayName>dólar de las Islas Salomón</displayName> + <symbol>SI$</symbol> + </currency> + <currency type="SCR"> + <displayName>rupia de Seychelles</displayName> + <symbol>SR</symbol> + </currency> + <currency type="SDD"> + <displayName>dinar sudanés</displayName> + </currency> + <currency type="SDP"> + <displayName>libra sudanesa</displayName> + </currency> + <currency type="SEK"> + <displayName>corona sueca</displayName> + <symbol>SKr</symbol> + </currency> + <currency type="SGD"> + <displayName>dólar singapurense</displayName> + <symbol>S$</symbol> + </currency> + <currency type="SHP"> + <displayName>libra de Santa Elena</displayName> + </currency> + <currency type="SIT"> + <displayName>tólar esloveno</displayName> + </currency> + <currency type="SKK"> + <displayName>corona eslovaca</displayName> + <symbol>Sk</symbol> + </currency> + <currency type="SLL"> + <displayName>leone de Sierra Leona</displayName> + </currency> + <currency type="SOS"> + <displayName>chelín somalí</displayName> + <symbol>So. Sh.</symbol> + </currency> + <currency type="SRD"> + <displayName references="RP1">dólar surinamés</displayName> + </currency> + <currency type="SRG"> + <displayName>florín surinamés</displayName> + <symbol>Sf</symbol> + </currency> + <currency type="STD"> + <displayName>dobra de Santo Tomé y Príncipe</displayName> + <symbol>Db</symbol> + </currency> + <currency type="SUR"> + <displayName>rublo soviético</displayName> + </currency> + <currency type="SVC"> + <displayName>colón salvadoreño</displayName> + </currency> + <currency type="SYP"> + <displayName>libra siria</displayName> + <symbol>LS</symbol> + </currency> + <currency type="SZL"> + <displayName>lilangeni suazi</displayName> + <symbol>E</symbol> + </currency> + <currency type="THB"> + <displayName>baht tailandés</displayName> + </currency> + <currency type="TJR"> + <displayName>rublo tayiko</displayName> + </currency> + <currency type="TJS"> + <displayName>somoni tayiko</displayName> + </currency> + <currency type="TMM"> + <displayName>manat turcomano</displayName> + </currency> + <currency type="TND"> + <displayName>dinar tunecino</displayName> + </currency> + <currency type="TOP"> + <displayName>paʻanga tongano</displayName> + <symbol>T$</symbol> + </currency> + <currency type="TPE"> + <displayName>escudo timorense</displayName> + </currency> + <currency type="TRL"> + <displayName>lira turca</displayName> + <symbol>TL</symbol> + </currency> + <currency type="TRY"> + <displayName references="RP1">nueva lira turca</displayName> + </currency> + <currency type="TTD"> + <displayName>dólar de Trinidad y Tobago</displayName> + <symbol>TT$</symbol> + </currency> + <currency type="TWD"> + <displayName>nuevo dólar taiwanés</displayName> + <symbol>NT$</symbol> + </currency> + <currency type="TZS"> + <displayName>chelín tanzano</displayName> + <symbol>T Sh</symbol> + </currency> + <currency type="UAH"> + <displayName>grivna ucraniana</displayName> + </currency> + <currency type="UAK"> + <displayName>karbovanet ucraniano</displayName> + </currency> + <currency type="UGS"> + <displayName>chelín ugandés (1966-1987)</displayName> + </currency> + <currency type="UGX"> + <displayName>chelín ugandés</displayName> + <symbol>U Sh</symbol> + </currency> + <currency type="USD"> + <displayName>dólar estadounidense</displayName> + <symbol>US$</symbol> + </currency> + <currency type="USN"> + <displayName>dólar estadounidense (día siguiente)</displayName> + </currency> + <currency type="USS"> + <displayName>dólar estadounidense (mismo día)</displayName> + </currency> + <currency type="UYP"> + <displayName>peso uruguayo (1975-1993)</displayName> + </currency> + <currency type="UYU"> + <displayName>peso uruguayo</displayName> + <symbol>Ur$</symbol> + </currency> + <currency type="UZS"> + <displayName>sum uzbeko</displayName> + </currency> + <currency type="VEB"> + <displayName>bolívar venezolano</displayName> + <symbol>Be</symbol> + </currency> + <currency type="VND"> + <displayName>dong vietnamita</displayName> + </currency> + <currency type="VUV"> + <displayName>vatu vanuatuense</displayName> + <symbol>VT</symbol> + </currency> + <currency type="WST"> + <displayName>tala samoano</displayName> + </currency> + <currency type="XAF"> + <displayName>franco CFA BEAC</displayName> + </currency> + <currency type="XAG"> + <displayName references="RP1">plata</displayName> + </currency> + <currency type="XAU"> + <displayName>oro</displayName> + </currency> + <currency type="XBA"> + <displayName>unidad compuesta europea</displayName> + </currency> + <currency type="XBB"> + <displayName>unidad monetaria europea</displayName> + </currency> + <currency type="XBC"> + <displayName>unidad de cuenta europea (XBC)</displayName> + </currency> + <currency type="XBD"> + <displayName>unidad de cuenta europea (XBD)</displayName> + </currency> + <currency type="XCD"> + <displayName>dólar del Caribe Oriental</displayName> + <symbol>EC$</symbol> + </currency> + <currency type="XDR"> + <displayName>derechos especiales de giro</displayName> + </currency> + <currency type="XEU"> + <displayName>unidad de moneda europea</displayName> + </currency> + <currency type="XFO"> + <displayName>franco oro francés</displayName> + </currency> + <currency type="XFU"> + <displayName>franco UIC francés</displayName> + </currency> + <currency type="XOF"> + <displayName>franco CFA BCEAO</displayName> + </currency> + <currency type="XPD"> + <displayName references="RP1">paladio</displayName> + </currency> + <currency type="XPF"> + <displayName>franco CFP</displayName> + <symbol>CFPF</symbol> + </currency> + <currency type="XPT"> + <displayName references="RP1">platino</displayName> + </currency> + <currency type="XRE"> + <displayName references="RP3">fondos RINET</displayName> + </currency> + <currency type="XTS"> + <displayName references="RP1">código reservado para pruebas</displayName> + </currency> + <currency type="XXX"> + <displayName>Sin divisa</displayName> + </currency> + <currency type="YDD"> + <displayName>dinar yemení</displayName> + </currency> + <currency type="YER"> + <displayName>rial yemení</displayName> + <symbol>YRl</symbol> + </currency> + <currency type="YUD"> + <displayName>dinar fuerte yugoslavo</displayName> + </currency> + <currency type="YUM"> + <displayName>super dinar yugoslavo</displayName> + </currency> + <currency type="YUN"> + <displayName>dinar convertible yugoslavo</displayName> + </currency> + <currency type="ZAL"> + <displayName>rand sudafricano (financiero)</displayName> + </currency> + <currency type="ZAR"> + <displayName>rand sudafricano</displayName> + <symbol>R</symbol> + </currency> + <currency type="ZMK"> + <displayName>kwacha zambiano</displayName> + </currency> + <currency type="ZRN"> + <displayName>nuevo zaire zaireño</displayName> + </currency> + <currency type="ZRZ"> + <displayName>zaire zaireño</displayName> + </currency> + <currency type="ZWD"> + <displayName>dólar de Zimbabue</displayName> + <symbol>Z$</symbol> + </currency> + </currencies> + </numbers> + <posix> + <messages> + <yesstr>sí:si:s</yesstr> + </messages> + </posix> + <references> + <reference type="R1" uri="http://www.bcn.gob.ni/">Banco Central de Nicaragua</reference> + <reference type="R2" uri="http://www.unicode.org/charts/PDF/U20A0.pdf">Unicode</reference> + <reference type="RP1" uri="http://es.wikipedia.org/wiki/Portada">Wikipedia (Spanish version)</reference> + <reference type="RP2" uri="http://www.rae.es/">Dictionary of the Real Academia Española</reference> + <reference type="RP3" uri="http://www.google.es/">Google search results</reference> + <reference type="RP4" uri="http://publications.eu.int/code/es/es-5000600.htm">Order of country codes (European Union Style Guide)</reference> + </references> +</ldml> +<!-- Old Comments. See root.xml for more info. +URL: http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/es.txt?only_with_tag=final-update-LDML + + "a.C.", // Said to be a.C. for antes de Cristo + "d.C.", // Said to be d.C. for despu\u00E9s de Cristo +CZ { "Chequia" } // Old value + FK { "Islas Falkland (Malvinas)" } // alternate name { "Islas Malvinas" } +FM { "Micronesia, Estados Federados de" } + KP { "Corea del Norte" } // alternate name { "Corea, Rep\u00FAblica Popular Democr\u00E1tica de" } + KR { "Corea del Sur" } // alternate name { "Corea, Rep\u00FAblica de " } +LA { "Rep\u00FAblica Democr\u00E1tica Popular Lao" } // From translation center +LC { "Santa Lucia" } +MD { "Moldavia, Rep\u00FAblica de" } +MK { "Macedonia, Antigua Rep\u00FAblica Yugoslava de" } // alternate name { "Macedonia, Rep\u00FAblica de" } +PH { "Islas Filipinas" } // Original value +RE { "Reuni\u00F3n" } +RU { "Federaci\u00F3n Rusa" } // From translation center + SH { "Santa Elena" } // From translation center +SR { "Surinam" } +UM { "Islas Perif\u00E9ricas Menores de los Estados Unidos" } // Old value +VA { "Santa Sede (Ciudad del Vaticano)" } +Currency display names +You may find this source useful too: http://publications.eu.int/code/es/es-5000500.htm +XPS { "XPS", "libra esterlina" } +XSS { "XSS", "chel\u00EDn esterlino" } +Spanish does not capitalize the language names like English + root{"ra\u00EDz" } // The only exception to ISO-639 + gu { "gujarati" } // If this changes, then change Gujr in Scripts too. + km { "jemer" } // If this changes, then change Khmr in Scripts too. + kn { "canar\u00e9s" } // If this changes, then change Knda in Scripts too. +lv { "let\u00F3n" } // Old value + "Latn", // ISO 15924 Name +u umlaut \u00fc is a rare character. +It can be found in words like multilig\u00fce, ag\u00fcita and Itag\u00fc\u00ed + Cprt { "chipriota" } // grecochipriota? + Hans { "han simplificado" } // Not a formal part of ISO-15924 yet + Hant { "han tradicional" } // Not a formal part of ISO-15924 yet +? Qaai { "inherited" } // PUA Difficult to translate + Zyyy { "com\u00FAn" } // This may need to become "undetermined script" +The following should probably be all lowercase. + +Comments without bases + + Kiribati - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Enderbury"] + Marshall Islands - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Kwajalein"] + Mali - was on: /ldml/dates/timeZoneNames/zone[@type="Africa/Bamako"] + Ecuador - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Galapagos"] + Indonesia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Jakarta"] + United States - was on: /ldml/dates/timeZoneNames/zone[@type="America/Adak"] + Kazakhstan - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Aqtau"] + Ukraine - was on: /ldml/dates/timeZoneNames/zone[@type="Europe/Uzhgorod"] + Portugal - was on: /ldml/dates/timeZoneNames/zone[@type="Atlantic/Azores"] + Brazil - was on: /ldml/dates/timeZoneNames/zone[@type="America/Eirunepe"] + Antarctica - was on: /ldml/dates/timeZoneNames/zone[@type="Antarctica/Rothera"] + Malaysia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Kuala_Lumpur"] + Canada - was on: /ldml/dates/timeZoneNames/zone[@type="America/Dawson"] + Micronesia - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Yap"] + Argentina - was on: /ldml/dates/timeZoneNames/zone[@type="America/Argentina/Rio_Gallegos"] + United States Minor Outlying Islands - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Midway"] + Mexico - was on: /ldml/dates/timeZoneNames/zone[@type="America/Tijuana"] + Democratic Republic of the Congo - was on: /ldml/dates/timeZoneNames/zone[@type="Africa/Kinshasa"] + United Kingdom - was on: /ldml/dates/timeZoneNames/zone[@type="Europe/Belfast"] + New Zealand - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Chatham"] + Greenland - was on: /ldml/dates/timeZoneNames/zone[@type="America/Thule"] + Mongolia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Hovd"] + Uzbekistan - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Samarkand"] + Svalbard and Jan Mayen - was on: /ldml/dates/timeZoneNames/zone[@type="Atlantic/Jan_Mayen"] + Australia - was on: /ldml/dates/timeZoneNames/zone[@type="Australia/Perth"] + China - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Kashgar"] +--> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/es_ES.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/es_ES.xml new file mode 100644 index 0000000000..cbb37f358a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/es_ES.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.41 $"/> + <generation date="$Date: 2006/12/08 16:29:36 $"/> + <language type="es"/> + <territory type="ES"/> + </identity> + <localeDisplayNames> + <languages> + <language type="chg" draft="provisional">chagatai</language> + </languages> + <scripts> + <script type="Egyp" draft="provisional">gerogríficos egipcios</script> + <script type="Ethi">etíope</script> + <script type="Hung" draft="provisional">Húngaro antiguo</script> + <script type="Ital" draft="provisional">antigua itálica</script> + <script type="Latg" draft="provisional">Latín (variante gaélico)</script> + <script type="Lina" draft="provisional">linear A</script> + <script type="Maya" draft="provisional">gerogríficos mayas</script> + <script type="Mong" draft="provisional">mongol</script> + <script type="Phnx" draft="provisional">Fenicio</script> + </scripts> + </localeDisplayNames> + <dates> + <calendars> + <calendar type="gregorian"> + <dateFormats> + <dateFormatLength type="medium"> + <dateFormat> + <pattern>dd/MM/yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="short"> + <dateFormat> + <pattern>dd/MM/yy</pattern> + </dateFormat> + </dateFormatLength> + </dateFormats> + <timeFormats> + <timeFormatLength type="medium"> + <timeFormat> + <pattern>H:mm:ss</pattern> + </timeFormat> + </timeFormatLength> + <timeFormatLength type="short"> + <timeFormat> + <pattern>H:mm</pattern> + </timeFormat> + </timeFormatLength> + </timeFormats> + <dateTimeFormats> + <availableFormats> + <dateFormatItem id="MMdd" draft="provisional">dd/MM</dateFormatItem> + <dateFormatItem id="mmss" draft="provisional">mm:ss</dateFormatItem> + <dateFormatItem id="yyyyMM" draft="provisional">MM/yyyy</dateFormatItem> + </availableFormats> + </dateTimeFormats> + </calendar> + </calendars> + </dates> + <numbers> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>#,##0.00 ¤</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + <currencies> + <currency type="ESP"> + <pattern>#,##0 ¤;-#,##0 ¤</pattern> + <decimal>,</decimal> + <group>.</group> + </currency> + </currencies> + </numbers> +</ldml> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/fr.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/fr.xml new file mode 100644 index 0000000000..86c8ba2f5e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/fr.xml @@ -0,0 +1,2562 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.86 $"/> + <generation date="$Date: 2006/12/08 16:29:37 $"/> + <language type="fr"/> + </identity> + <localeDisplayNames> + <languages> + <language type="aa">afar</language> + <language type="ab">abkhaze</language> + <language type="ace">aceh</language> + <language type="ach">acoli</language> + <language type="ada">adangme</language> + <language type="ady">adyghéen</language> + <language type="ae">avestique</language> + <language type="af">afrikaans</language> + <language type="afa">afro-asiatiques, autres langues</language> + <language type="afa" alt="proposed-u148-1" draft="unconfirmed">langues afro-asiatiques (autres)</language> + <language type="afh">afrihili</language> + <language type="ain">aïnou</language> + <language type="ak">akan</language> + <language type="akk">akkadien</language> + <language type="ale">aléoute</language> + <language type="alg" references="RP1">algonquines, langues</language> + <language type="alg" references="RP1" alt="proposed-u148-1" draft="unconfirmed">langues algonquines</language> + <language type="alt">altaï du Sud</language> + <language type="alt" alt="proposed-u148-1" draft="unconfirmed">altaï méridional</language> + <language type="am">amharique</language> + <language type="an">aragonais</language> + <language type="ang" references="RP1">anglo-saxon (vers 450-1100)</language> + <language type="apa" draft="unconfirmed">apaches, langues</language> + <language type="ar">arabe</language> + <language type="arc">araméen</language> + <language type="arn">araukan</language> + <language type="arp">arapaho</language> + <language type="art">artificielles, autres langues</language> + <language type="art" alt="proposed-u148-1" draft="unconfirmed">langues artificielles (autres)</language> + <language type="arw">arawak</language> + <language type="as">assamais</language> + <language type="ast">asturien</language> + <language type="ath" references="RP1" draft="unconfirmed">athapascanes, langues</language> + <language type="aus" references="RP1" draft="unconfirmed">australiennes, langues</language> + <language type="av">avar</language> + <language type="awa">awadhi</language> + <language type="ay">aymara</language> + <language type="az">azéri</language> + <language type="ba">bachkir</language> + <language type="bad">banda</language> + <language type="bai">bamilékés, langues</language> + <language type="bai" alt="proposed-u148-1" draft="unconfirmed">langues bamilékées</language> + <language type="bal">baloutchi</language> + <language type="ban">balinais</language> + <language type="bas">bassa</language> + <language type="bat">baltiques, autres langues</language> + <language type="bat" alt="proposed-u148-1" draft="unconfirmed">langues baltes (autres)</language> + <language type="be">biélorusse</language> + <language type="bej">bedja</language> + <language type="bem">bemba</language> + <language type="ber">berbère</language> + <language type="bg">bulgare</language> + <language type="bh">bihari</language> + <language type="bho">bhojpuri</language> + <language type="bho" alt="proposed-u148-1" draft="unconfirmed">bhojpurî</language> + <language type="bi">bichlamar</language> + <language type="bi" alt="proposed-u148-1" draft="unconfirmed">bichelamar, bislama</language> + <language type="bik">bikol</language> + <language type="bin">bini</language> + <language type="bla">pieds-noirs</language> + <language type="bla" references="RP1" alt="proposed-u169-1" draft="provisional">blackfoot</language> + <language type="bm">bambara</language> + <language type="bn">bengali</language> + <language type="bnt">bantou</language> + <language type="bo">tibétain</language> + <language type="br">breton</language> + <language type="bra">braj</language> + <language type="bs">bosniaque</language> + <language type="btk">batak</language> + <language type="bua" draft="provisional">bouriate</language> + <language type="bug">bugi</language> + <language type="bug" alt="proposed-u148-1" draft="unconfirmed">bouguis</language> + <language type="byn">blin</language> + <language type="byn" alt="proposed-u148-1" draft="unconfirmed">blin, bilen</language> + <language type="ca">catalan</language> + <language type="cad">caddo</language> + <language type="cai">indiennes d'Amérique centrale, autres langues</language> + <language type="cai" alt="proposed-u148-1" draft="unconfirmed">langues amérindiennes centrales (autres)</language> + <language type="car">caribe</language> + <language type="cau">caucasiennes, autres langues</language> + <language type="cau" alt="proposed-u148-1" draft="unconfirmed">langues caucasiennes (autres)</language> + <language type="ce">tchétchène</language> + <language type="ceb">cebuano</language> + <language type="cel">celtiques, autres langues</language> + <language type="cel" alt="proposed-u148-1" draft="unconfirmed">langues celtiques (autres)</language> + <language type="ch">chamorro</language> + <language type="chb">chibcha</language> + <language type="chg">jagataic</language> + <language type="chg" alt="proposed-u148-1" draft="unconfirmed">tchaghataï, djaghataï</language> + <language type="chg" alt="proposed-u169-1" draft="provisional">djaghataï</language> + <language type="chk">chuuk</language> + <language type="chm">mari</language> + <language type="chm" alt="proposed-u148-2" draft="unconfirmed">tchérémisse, mari</language> + <language type="chn">jargon chinook</language> + <language type="chn" references="RP1" alt="proposed-u169-1" draft="provisional">chinook, jargon</language> + <language type="cho">choctaw</language> + <language type="chp" draft="provisional">chipewyan</language> + <language type="chr">cherokee</language> + <language type="chy">cheyenne</language> + <language type="cmc">langues chames</language> + <language type="cmc" references="RP1" alt="proposed-u169-1" draft="provisional">chames, langues</language> + <language type="co">corse</language> + <language type="cop">copte</language> + <language type="cpe">pidgin anglais (autre)</language> + <language type="cpe" alt="proposed-u148-1" draft="unconfirmed">langues créoles et pidgins anglais (autres)</language> + <language type="cpe" alt="proposed-u169-1" draft="provisional">créoles et pidgins anglais, autres</language> + <language type="cpf">pidgin français (autre)</language> + <language type="cpf" alt="proposed-u148-1" draft="unconfirmed">langues créoles et pidgins français (autres)</language> + <language type="cpf" alt="proposed-u169-1" draft="provisional">créoles et pidgins français, autres</language> + <language type="cpp">pidgin portugais (autre)</language> + <language type="cpp" alt="proposed-u148-1" draft="unconfirmed">langues créoles et pidgins portugais (autres)</language> + <language type="cpp" alt="proposed-u169-1" draft="provisional">créoles et pidgins portugais, autres</language> + <language type="cr">cree</language> + <language type="crh">turc de Crimée; tatar de Crimée</language> + <language type="crh" alt="proposed-u148-1" draft="unconfirmed">turc de Crimée, tatar de Crimée</language> + <language type="crh" alt="proposed-u169-1" draft="provisional">tatar de Crimée</language> + <language type="crp">pidgins et langues créoles (autre)</language> + <language type="crp" alt="proposed-u148-1" draft="unconfirmed">langues créoles et pidgins (autres)</language> + <language type="crp" alt="proposed-u169-1" draft="provisional">créoles et pidgins divers, autres</language> + <language type="cs">tchèque</language> + <language type="csb">cashubian</language> + <language type="csb" alt="proposed-u148-1" draft="provisional">kachoube</language> + <language type="cu">slavon d’église</language> + <language type="cus">couchitiques, autres langues</language> + <language type="cus" alt="proposed-u148-1" draft="unconfirmed">langues couchitiques (autres)</language> + <language type="cv">tchouvache</language> + <language type="cy">gallois</language> + <language type="da">danois</language> + <language type="dak">dakota</language> + <language type="dar">dargwa</language> + <language type="day">dayak</language> + <language type="de">allemand</language> + <language type="del">delaware</language> + <language type="den">slave (athapascan)</language> + <language type="den" alt="proposed-u169-1" draft="provisional">esclave (athapascan)</language> + <language type="dgr">dogrib</language> + <language type="dgr" alt="proposed-u148-1" draft="unconfirmed">dogrib, tlicho</language> + <language type="din">dinka</language> + <language type="doi">dogra</language> + <language type="doi" references="RP3" alt="proposed-u169-1" draft="provisional">dogri</language> + <language type="dra">dravidiennes, autres langues</language> + <language type="dra" alt="proposed-u148-1" draft="unconfirmed">langues dravidiennes (autres)</language> + <language type="dsb">bas-sorabe</language> + <language type="dua">douala</language> + <language type="dum">néerlandais moyen (vers 1050-1350)</language> + <language type="dv">maldivien</language> + <language type="dv" alt="proposed-u148-1" draft="unconfirmed">divehi, maldivien</language> + <language type="dyu" draft="provisional">dioula</language> + <language type="dz">dzongkha</language> + <language type="ee">éwé</language> + <language type="efi">efik</language> + <language type="egy">égyptien (ancien)</language> + <language type="eka">ekajuk</language> + <language type="el">grec</language> + <language type="elx">élamite</language> + <language type="en">anglais</language> + <language type="enm">anglais moyen (1100-1500)</language> + <language type="eo">espéranto</language> + <language type="es">espagnol</language> + <language type="et">estonien</language> + <language type="eu">basque</language> + <language type="ewo" draft="provisional">éwondo</language> + <language type="fa">persan</language> + <language type="fan">fang</language> + <language type="fat">fanti</language> + <language type="ff">peul</language> + <language type="fi">finnois</language> + <language type="fil">filipino</language> + <language type="fil" alt="proposed-u148-1" draft="unconfirmed">pilipino</language> + <language type="fiu">finno-ougriennes, autres langues</language> + <language type="fiu" alt="proposed-u148-1" draft="unconfirmed">langues finno-ougriennes (autres)</language> + <language type="fj">fidjien</language> + <language type="fo">féroïen</language> + <language type="fo" alt="proposed-u148-1" draft="unconfirmed">féringien</language> + <language type="fr">français</language> + <language type="frm">français moyen (ca.1400-1600)</language> + <language type="frm" alt="proposed-u169-1" draft="provisional">français moyen (1400-1600)</language> + <language type="fro">français ancien (842-vers 1400)</language> + <language type="fur">frioulan</language> + <language type="fy">frison</language> + <language type="ga">irlandais</language> + <language type="gaa">ga</language> + <language type="gay">gayo</language> + <language type="gba">gbaya</language> + <language type="gd">gaélique écossais</language> + <language type="gem">germaniques, autres langues</language> + <language type="gem" alt="proposed-u148-1" draft="unconfirmed">langues germaniques (autres)</language> + <language type="gez">guèze</language> + <language type="gil">gilbertais</language> + <language type="gil" alt="proposed-u148-1" draft="provisional">gilbertin</language> + <language type="gl">galicien</language> + <language type="gmh">allemand, moyen haut (vers 1050-1500)</language> + <language type="gn">guarani</language> + <language type="goh">allemand, vieux haut (ca. 750-1050)</language> + <language type="goh" alt="proposed-u148-2" draft="unconfirmed">allemand ancien haut (vers 750-1050)</language> + <language type="goh" alt="proposed-u169-1" draft="provisional">allemand, vieux haut (vers 750-1050)</language> + <language type="gon">gondi</language> + <language type="gon" alt="proposed-u148-1" draft="unconfirmed">gondî</language> + <language type="gor">gorontalo</language> + <language type="got">gotique</language> + <language type="grb">grebo</language> + <language type="grb" alt="proposed-u148-1" draft="unconfirmed">grébo</language> + <language type="grc" references="RP1">grec ancien (jusqu'à 1453)</language> + <language type="gu">goudjrati</language> + <language type="gu" alt="proposed-u148-1" draft="unconfirmed">goudjarâtî, gujarâtî</language> + <language type="gv">manx</language> + <language type="gv" references="RP3" alt="proposed-u169-1" draft="provisional">mannois</language> + <language type="gwi">gwichʼin</language> + <language type="ha">haoussa</language> + <language type="hai">haida</language> + <language type="hai" alt="proposed-u148-1" draft="unconfirmed">haïda</language> + <language type="haw">hawaïen</language> + <language type="he">hébreu</language> + <language type="hi">hindi</language> + <language type="hi" alt="proposed-u148-1" draft="unconfirmed">hindî</language> + <language type="hil">hiligaynon</language> + <language type="hil" alt="proposed-u148-2" draft="unconfirmed">ilonggo, hiligaynon</language> + <language type="him">himachali</language> + <language type="hit">hittite</language> + <language type="hmn">hmong</language> + <language type="ho">hiri motu</language> + <language type="hr">croate</language> + <language type="hsb">haut-sorabe</language> + <language type="ht">haïtien</language> + <language type="hu">hongrois</language> + <language type="hup">hupa</language> + <language type="hy">arménien</language> + <language type="hz">héréro</language> + <language type="hz" references="RP1" alt="proposed-u169-1" draft="provisional">herero</language> + <language type="ia">interlingua</language> + <language type="iba">iban</language> + <language type="id">indonésien</language> + <language type="ie">interlingue</language> + <language type="ig">igbo</language> + <language type="ii">yi de Sichuan</language> + <language type="ik">inupiaq</language> + <language type="ilo" draft="unconfirmed">ilokano</language> + <language type="inc">langue indo-aryenne (autre)</language> + <language type="inc" alt="proposed-u148-1" draft="unconfirmed">langues indo-aryennes (autres)</language> + <language type="inc" alt="proposed-u169-1" draft="provisional">indo-aryennes, autres langues</language> + <language type="ine">langue indo-européenne (autre)</language> + <language type="ine" alt="proposed-u148-1" draft="unconfirmed">langues indo-européennes (autres)</language> + <language type="ine" alt="proposed-u169-1" draft="provisional">indo-européennes, autres langues</language> + <language type="inh">ingouche</language> + <language type="io">ido</language> + <language type="ira">iranien</language> + <language type="iro">langues iroquoiennes</language> + <language type="iro" alt="proposed-u148-1" draft="unconfirmed">langues iroquoises</language> + <language type="iro" references="RP3" alt="proposed-u169-1" draft="provisional">iroquoises, langues</language> + <language type="is">islandais</language> + <language type="it">italien</language> + <language type="iu">inuktitut</language> + <language type="ja">japonais</language> + <language type="jbo">lojban</language> + <language type="jpr">judéo-persan</language> + <language type="jrb">judéo-arabe</language> + <language type="jv">javanais</language> + <language type="ka">géorgien</language> + <language type="kaa" draft="provisional">karakalpak</language> + <language type="kab">kabyle</language> + <language type="kac">kachin</language> + <language type="kac" alt="proposed-u148-1" draft="unconfirmed">jinghpo</language> + <language type="kam">kamba</language> + <language type="kar">karen</language> + <language type="kar" alt="proposed-u148-1" draft="unconfirmed">karène</language> + <language type="kaw">kawi</language> + <language type="kaw" alt="proposed-u148-1" draft="unconfirmed">kavi</language> + <language type="kbd">kabardine</language> + <language type="kbd" alt="proposed-u148-1" draft="provisional">kabardien</language> + <language type="kg">kongo</language> + <language type="kha">khasi</language> + <language type="kha" alt="proposed-u148-1" draft="unconfirmed">khasî</language> + <language type="khi">khoisan (autre)</language> + <language type="khi" alt="proposed-u148-1" draft="unconfirmed">langues khoïsans (autres)</language> + <language type="khi" alt="proposed-u169-1" draft="provisional">khoïsan, autres langues</language> + <language type="kho">khotanais</language> + <language type="ki">kikuyu</language> + <language type="ki" alt="proposed-u148-1" draft="unconfirmed">kikouyou, gikuyu</language> + <language type="kj">kuanyama</language> + <language type="kk">kazakh</language> + <language type="kl">groenlandais</language> + <language type="kl" alt="proposed-u148-1" draft="unconfirmed">kalaallisut, groenlandais</language> + <language type="km">khmer</language> + <language type="kmb">kiMboundou</language> + <language type="kmb" alt="proposed-u148-1" draft="unconfirmed">kimboundou</language> + <language type="kmb" alt="proposed-u169-1" draft="provisional">kimbundu</language> + <language type="kn">kannada</language> + <language type="kn" alt="proposed-u148-1" draft="unconfirmed">kannara, kannada</language> + <language type="ko">coréen</language> + <language type="kok">konkani</language> + <language type="kok" alt="proposed-u148-1" draft="unconfirmed">konkânî</language> + <language type="kos">kusaien</language> + <language type="kos" alt="proposed-u148-1" draft="unconfirmed">kosraéen</language> + <language type="kos" alt="proposed-u169-1" draft="provisional">kosrae</language> + <language type="kpe">kpellé</language> + <language type="kr">kanouri</language> + <language type="krc" draft="provisional">karatchaï balkar</language> + <language type="kro" draft="provisional">krou</language> + <language type="kru">kurukh</language> + <language type="ks">kashmiri</language> + <language type="ks" alt="proposed-u148-1" draft="unconfirmed">kâshmîrî</language> + <language type="ku">kurde</language> + <language type="kum">koumyk</language> + <language type="kut">kutenai</language> + <language type="kut" alt="proposed-u148-1" draft="unconfirmed">kutenaï</language> + <language type="kv">komi</language> + <language type="kw">cornique</language> + <language type="ky">kirghize</language> + <language type="la">latin</language> + <language type="lad">ladino</language> + <language type="lad" alt="proposed-u148-1" draft="unconfirmed">judéo-espagnol, ladino</language> + <language type="lad" references="RP1" alt="proposed-u169-1" draft="provisional">judéo-espagnol</language> + <language type="lah">lahnda</language> + <language type="lam">lamba</language> + <language type="lb">luxembourgeois</language> + <language type="lez">lezghien</language> + <language type="lg">ganda</language> + <language type="li">limbourgeois</language> + <language type="ln">lingala</language> + <language type="lo">lao</language> + <language type="lol">mongo</language> + <language type="loz">lozi</language> + <language type="lt">lituanien</language> + <language type="lu">luba-katanga</language> + <language type="lua">luba-lulua</language> + <language type="lui">luiseno</language> + <language type="lun">lunda</language> + <language type="lus">lushai</language> + <language type="lus" alt="proposed-u148-1" draft="unconfirmed">lushaï</language> + <language type="lv">letton</language> + <language type="mad">madurais</language> + <language type="mad" references="RP1" alt="proposed-u169-1" draft="provisional">madourais</language> + <language type="mag">magahi</language> + <language type="mag" alt="proposed-u148-1" draft="unconfirmed">magahî</language> + <language type="mai">maithili</language> + <language type="mai" alt="proposed-u148-1" draft="unconfirmed">maïthilî</language> + <language type="mak" draft="provisional">makassar</language> + <language type="man" references="RP1">mandingue</language> + <language type="map">malayo-polynésien</language> + <language type="mas">masai</language> + <language type="mas" references="RP1" alt="proposed-u169-1" draft="provisional">massaï</language> + <language type="mdf">moksa</language> + <language type="mdf" alt="proposed-u148-1" draft="unconfirmed">moksha</language> + <language type="mdr">mandar</language> + <language type="men">mendé</language> + <language type="mg">malgache</language> + <language type="mga">irlandais moyen (900-1200)</language> + <language type="mh">marshall</language> + <language type="mh" alt="proposed-u148-1" draft="unconfirmed">marshallais</language> + <language type="mi">maori</language> + <language type="mic">micmac</language> + <language type="min">minangkabau</language> + <language type="mis">langues diverses</language> + <language type="mis" references="RP1" alt="proposed-u169-1" draft="provisional">diverses, langues</language> + <language type="mk">macédonien</language> + <language type="mkh">mon-khmer (autre)</language> + <language type="mkh" alt="proposed-u148-1" draft="unconfirmed">langues mon-khmères (autres)</language> + <language type="mkh" alt="proposed-u169-1" draft="provisional">môn-khmer, autres langues</language> + <language type="ml">malayalam</language> + <language type="ml" alt="proposed-u148-1" draft="unconfirmed">malayâlam, malayî</language> + <language type="mn">mongol</language> + <language type="mnc">mandchou</language> + <language type="mni">manipuri</language> + <language type="mni" alt="proposed-u148-1" draft="unconfirmed">meitei, manipourî</language> + <language type="mni" alt="proposed-u169-1" draft="provisional">meitei</language> + <language type="mno">langues manobo</language> + <language type="mno" alt="proposed-u148-1" draft="unconfirmed">langues manobos</language> + <language type="mno" alt="proposed-u169-1" draft="provisional">manobo, langues</language> + <language type="mo">moldave</language> + <language type="moh">mohawk</language> + <language type="mos" draft="provisional">moré</language> + <language type="mr">marathe</language> + <language type="mr" alt="proposed-u148-1" draft="unconfirmed">marâthî, marathe</language> + <language type="mr" alt="proposed-u169-1" draft="provisional">marathi</language> + <language type="ms">malais</language> + <language type="mt">maltais</language> + <language type="mul">langues multiples</language> + <language type="mul" references="RP1" alt="proposed-u169-1" draft="provisional">multilingue</language> + <language type="mun">langues mounda</language> + <language type="mun" alt="proposed-u148-1" draft="unconfirmed">langues moundas</language> + <language type="mun" alt="proposed-u169-1" draft="provisional">mounda, langues</language> + <language type="mus">creek</language> + <language type="mus" alt="proposed-u148-1" draft="unconfirmed">muskogee, creek</language> + <language type="mus" references="RP1" alt="proposed-u169-1" draft="provisional">muskogee</language> + <language type="mwl">mirandais</language> + <language type="mwr" draft="unconfirmed">marwarî</language> + <language type="my">birman</language> + <language type="myn">maya, langues</language> + <language type="myn" alt="proposed-u148-1" draft="unconfirmed">langues mayas</language> + <language type="myv">erzya</language> + <language type="myv" alt="proposed-u169-1" draft="provisional">erza</language> + <language type="na">nauruan</language> + <language type="nah">nahuatl</language> + <language type="nai">indiennes d'Amérique du nord, autres langues</language> + <language type="nai" alt="proposed-u148-1" draft="unconfirmed">langues amérindiennes du Nord (autres)</language> + <language type="nap">napolitain</language> + <language type="nb">bokmål norvégien</language> + <language type="nb" alt="proposed-u148-1" draft="unconfirmed">norvégien littéraire</language> + <language type="nb" alt="proposed-u169-1" draft="provisional">norvégien bokmal</language> + <language type="nd">ndébélé du Nord</language> + <language type="nds">bas allemand, bas saxon</language> + <language type="nds" alt="proposed-u169-1" draft="provisional">bas allemand ; bas saxon</language> + <language type="ne">népalais</language> + <language type="new">newari</language> + <language type="new" alt="proposed-u148-1" draft="unconfirmed">néware, nepâlbhâsa</language> + <language type="ng">ndonga</language> + <language type="nia">nias</language> + <language type="nic">nigéro-congolaise (autre)</language> + <language type="nic" alt="proposed-u148-1" draft="unconfirmed">langues nigéro-congolaises (autres)</language> + <language type="nic" alt="proposed-u169-1" draft="provisional">nigéro-congolaises, autres langues</language> + <language type="niu">niué</language> + <language type="niu" alt="proposed-u148-1" draft="unconfirmed">niouéen</language> + <language type="nl">néerlandais</language> + <language type="nn">nynorsk norvégien</language> + <language type="nn" alt="proposed-u148-1" draft="unconfirmed">néo-norvégien</language> + <language type="nn" alt="proposed-u169-1" draft="provisional">norvégien nynorsk</language> + <language type="no">norvégien</language> + <language type="nog">nogaï, nogay</language> + <language type="nog" references="RP3" alt="proposed-u169-1" draft="provisional">nogaï</language> + <language type="non">vieux norrois</language> + <language type="nr">ndébélé du Sud</language> + <language type="nr" alt="proposed-u148-1" draft="unconfirmed">ndébélé méridional</language> + <language type="nso" draft="provisional">sotho du Nord</language> + <language type="nub">langues nubiennes</language> + <language type="nub" alt="proposed-u169-1" draft="provisional">nubiennes, langues</language> + <language type="nv">navaho</language> + <language type="nwc">newari classique</language> + <language type="nwc" alt="proposed-u148-1" draft="unconfirmed">newarî classique</language> + <language type="ny">nyanja</language> + <language type="ny" alt="proposed-u148-2" draft="unconfirmed">nyanja, chichewa, chewa</language> + <language type="ny" alt="proposed-u169-1" draft="provisional">nyanja ; chichewa ; chewa</language> + <language type="nym">nyamwezi</language> + <language type="nyn">nyankolé</language> + <language type="nyo">nyoro</language> + <language type="nzi">nzema</language> + <language type="oc">occitan (après 1500)</language> + <language type="oc" alt="proposed-u148-1" draft="unconfirmed">occitan (après 1500), provençal</language> + <language type="oc" alt="proposed-u169-1" draft="provisional">occitan (après 1500) ; provençal</language> + <language type="oj">ojibwa</language> + <language type="om">galla</language> + <language type="om" alt="proposed-u148-1" draft="unconfirmed">oromo, galla</language> + <language type="om" alt="proposed-u169-1" draft="provisional">oromo</language> + <language type="or">oriya</language> + <language type="os">ossète</language> + <language type="osa">osage</language> + <language type="ota">turc ottoman (1500-1928)</language> + <language type="oto">langues otomangues</language> + <language type="pa">pendjabi</language> + <language type="pa" alt="proposed-u148-1" draft="unconfirmed">panjâbî</language> + <language type="paa">papoues (autre)</language> + <language type="paa" alt="proposed-u148-1" draft="unconfirmed">langues papoues (autres)</language> + <language type="paa" alt="proposed-u169-1" draft="provisional">papoues, autres langues</language> + <language type="pag">pangasinan</language> + <language type="pal">pahlavi</language> + <language type="pam" draft="provisional">pampangan</language> + <language type="pap">papiamento</language> + <language type="pau">palau</language> + <language type="pau" alt="proposed-u148-1" draft="unconfirmed">paluan, palaosien</language> + <language type="pau" alt="proposed-u169-1" draft="provisional">paluan</language> + <language type="peo">vieux perser (ca. 600-400 av. J.-C.)</language> + <language type="peo" alt="proposed-u148-2" draft="unconfirmed">persan ancien (vers 600-400 av. J.-C.)</language> + <language type="peo" alt="proposed-u169-1" draft="provisional">perse, vieux (vers 600-400 av. J.-C.)</language> + <language type="phi">philippines (autre)</language> + <language type="phi" alt="proposed-u148-1" draft="unconfirmed">langues philippines (autres)</language> + <language type="phi" alt="proposed-u169-1" draft="provisional">philippines, autres langues</language> + <language type="phn">phénicien</language> + <language type="pi">pali</language> + <language type="pi" alt="proposed-u148-1" draft="unconfirmed">pâli</language> + <language type="pl">polonais</language> + <language type="pon">pohnpei</language> + <language type="pra">langues prâkrit</language> + <language type="pra" alt="proposed-u148-1" draft="unconfirmed">langues prâkrits</language> + <language type="pra" alt="proposed-u169-1" draft="provisional">prâkrit</language> + <language type="pro">vieux provençal (jusqu’à 1500)</language> + <language type="pro" references="RP1" alt="proposed-u169-1" draft="provisional">provençal ancien (jusqu'à 1500)</language> + <language type="ps">pachto</language> + <language type="pt">portugais</language> + <language type="qu">quechua</language> + <language type="qu" alt="proposed-u148-1" draft="unconfirmed">langues quechuas</language> + <language type="raj">rajasthani</language> + <language type="raj" alt="proposed-u148-2" draft="unconfirmed">langues râjasthânîes</language> + <language type="rap">rapanui</language> + <language type="rar">Rarotonga</language> + <language type="rar" alt="proposed-u148-1" draft="unconfirmed">rarotongien, maori des Îles Cook</language> + <language type="rar" references="RP1" alt="proposed-u169-1" draft="provisional">rarotonga</language> + <language type="rm">rhéto-roman</language> + <language type="rn">roundi</language> + <language type="ro">roumain</language> + <language type="roa" references="RP1">romanes, autres langues</language> + <language type="roa" references="RP1" alt="proposed-u148-1" draft="unconfirmed">langues romanes (autres)</language> + <language type="rom">tzigane</language> + <language type="rom" references="RP1" alt="proposed-u169-1" draft="provisional">tsigane</language> + <language type="root">racine</language> + <language type="root" alt="proposed-u148-1" draft="provisional">(racine)</language> + <language type="ru">russe</language> + <language type="rup" references="RP1">aroumain ; macédo-roumain</language> + <language type="rup" references="RP1" alt="proposed-u148-2" draft="unconfirmed">aroumain, valaque, macédo-roumain</language> + <language type="rw">rwanda</language> + <language type="sa">sanskrit</language> + <language type="sad">sandawe</language> + <language type="sah">iakoute</language> + <language type="sai" references="RP1">indiennes d'Amérique du Sud, autres langues</language> + <language type="sai" references="RP1" alt="proposed-u148-2" draft="unconfirmed">langues amérindiennes du Sud (autres)</language> + <language type="sal">langues salisha</language> + <language type="sal" alt="proposed-u148-1" draft="unconfirmed">langues salishas</language> + <language type="sal" references="RP1" alt="proposed-u169-1" draft="provisional">salish, langues</language> + <language type="sam">samaritain</language> + <language type="sam" alt="proposed-u148-1" draft="unconfirmed">araméen samaritain</language> + <language type="sas">sasak</language> + <language type="sat">santal</language> + <language type="sat" alt="proposed-u148-1" draft="unconfirmed">santâlî</language> + <language type="sc">sarde</language> + <language type="scn">sicilien</language> + <language type="sco">écossais</language> + <language type="sd">sindhi</language> + <language type="sd" alt="proposed-u148-1" draft="unconfirmed">sindhî</language> + <language type="se">sami du Nord</language> + <language type="sel">selkoupe</language> + <language type="sem" references="RP1">sémitiques, autres langues</language> + <language type="sem" references="RP1" alt="proposed-u148-1" draft="unconfirmed">langues sémitiques (autres)</language> + <language type="sg">sango</language> + <language type="sga">irlandais ancien (jusqu’à 900)</language> + <language type="sgn">langues des signes</language> + <language type="sh">serbo-croate</language> + <language type="shn">chan</language> + <language type="shn" alt="proposed-u148-1" draft="unconfirmed">taï shan</language> + <language type="si">singhalais</language> + <language type="sid">sidamo</language> + <language type="sio" references="RP1" draft="unconfirmed">sioux, langues</language> + <language type="sit" references="RP1">sino-tibétaines, autres langues</language> + <language type="sit" references="RP1" alt="proposed-u148-1" draft="unconfirmed">langues sino-tibétaines (autres)</language> + <language type="sk">slovaque</language> + <language type="sl">slovène</language> + <language type="sla" references="RP1">slaves, autres langues</language> + <language type="sla" references="RP1" alt="proposed-u148-1" draft="unconfirmed">langues slaves (autres)</language> + <language type="sm">samoan</language> + <language type="sma">sami du Sud</language> + <language type="sma" alt="proposed-u148-1" draft="unconfirmed">sami méridional</language> + <language type="smi">sami (autre)</language> + <language type="smi" alt="proposed-u148-1" draft="unconfirmed">langues samies (autres)</language> + <language type="smi" references="RP1" alt="proposed-u169-1" draft="provisional">sami, autres langues</language> + <language type="smj">sami de Lule</language> + <language type="smn">sami d’Inari</language> + <language type="sms">sami skolt</language> + <language type="sn">shona</language> + <language type="snk">soninké</language> + <language type="so">somali</language> + <language type="sog">sogdien</language> + <language type="son">songhai</language> + <language type="son" alt="proposed-u148-1" draft="unconfirmed">sonrhaï</language> + <language type="sq">albanais</language> + <language type="sr">serbe</language> + <language type="srn" references="RP1" draft="provisional">sranan tongo</language> + <language type="srr">sérère</language> + <language type="ss">swati</language> + <language type="ss" alt="proposed-u148-1" draft="unconfirmed">siswati, swati</language> + <language type="ssa">nilo-sahariennes (autre)</language> + <language type="ssa" alt="proposed-u148-1" draft="unconfirmed">langues nilo-sahariennes (autres)</language> + <language type="ssa" references="RP1" alt="proposed-u169-1" draft="provisional">nilo-sahariennes, autres langues</language> + <language type="st">sotho du Sud</language> + <language type="st" alt="proposed-u148-1" draft="unconfirmed">sotho méridional</language> + <language type="su">soundanais</language> + <language type="suk">sukuma</language> + <language type="sus">soussou</language> + <language type="sux">sumérien</language> + <language type="sv">suédois</language> + <language type="sw">swahili</language> + <language type="syr">syriaque</language> + <language type="ta">tamoul</language> + <language type="tai">thaïes, autres langues</language> + <language type="tai" alt="proposed-u148-2" draft="unconfirmed">langues thaïes (autres)</language> + <language type="te">télougou</language> + <language type="tem">temne</language> + <language type="ter">tereno</language> + <language type="tet">tetum</language> + <language type="tg">tadjik</language> + <language type="th">thaï</language> + <language type="ti">tigrigna</language> + <language type="tig">tigré</language> + <language type="tk">turkmène</language> + <language type="tkl" draft="provisional">tokelauan</language> + <language type="tl">tagalog</language> + <language type="tlh">klingon</language> + <language type="tli">tlingit</language> + <language type="tmh">tamacheq</language> + <language type="tn">setswana</language> + <language type="tn" references="RP3" alt="proposed-u169-1" draft="provisional">tswana</language> + <language type="to">tongan (Îles Tonga)</language> + <language type="tog">tonga (Nyasa)</language> + <language type="tog" alt="proposed-u148-1" draft="unconfirmed">tongan (Nyasa)</language> + <language type="tpi">tok pisin</language> + <language type="tr">turc</language> + <language type="ts">tsonga</language> + <language type="tsi">tsimshian</language> + <language type="tt">tatar</language> + <language type="tum">tumbuka</language> + <language type="tup">langues tupi</language> + <language type="tup" alt="proposed-u148-1" draft="unconfirmed">langues tupis</language> + <language type="tup" references="RP1" alt="proposed-u169-1" draft="provisional">tupi, langues</language> + <language type="tut" references="RP1">altaïques, autres langues</language> + <language type="tut" references="RP1" alt="proposed-u148-2" draft="unconfirmed">langues altaïques (autres)</language> + <language type="tvl" references="RP3" draft="provisional">tuvaluan</language> + <language type="tw">twi</language> + <language type="ty">tahitien</language> + <language type="tyv">touva</language> + <language type="udm">oudmourte</language> + <language type="ug">ouïgour</language> + <language type="uga">ougaritique</language> + <language type="uk">ukrainien</language> + <language type="umb">umbundu</language> + <language type="und">indéterminé</language> + <language type="ur">ourdou</language> + <language type="uz">ouzbek</language> + <language type="vai">vaï</language> + <language type="ve">venda</language> + <language type="vi">vietnamien</language> + <language type="vo">volapük</language> + <language type="vot">vote</language> + <language type="wa">wallon</language> + <language type="wak">langues wakashennes</language> + <language type="wak" references="RP1" alt="proposed-u169-1" draft="provisional">wakashennes, langues</language> + <language type="wal">walamo</language> + <language type="war">waray</language> + <language type="was">washo</language> + <language type="wen">langues sorabes</language> + <language type="wen" references="RP1" alt="proposed-u169-1" draft="provisional">sorabes, langues</language> + <language type="wo">wolof</language> + <language type="xal">kalmouk</language> + <language type="xh">xhosa</language> + <language type="yap">yapois</language> + <language type="yi">yiddish</language> + <language type="yo">yoruba</language> + <language type="ypk">langues yupik</language> + <language type="ypk" alt="proposed-u148-1" draft="unconfirmed">langues yupiks</language> + <language type="ypk" references="RP1" alt="proposed-u169-1" draft="provisional">yupik, langues</language> + <language type="za">zhuang</language> + <language type="zap">zapotèque</language> + <language type="zen">zenaga</language> + <language type="zh">chinois</language> + <language type="znd" references="RP1" draft="provisional">zandé</language> + <language type="zu">zoulou</language> + <language type="zun">zuni</language> + </languages> + <scripts> + <script type="Arab">arabe</script> + <script type="Armn">arménien</script> + <script type="Bali" draft="provisional">balinais</script> + <script type="Batk" draft="provisional">batak</script> + <script type="Beng">bengâglî</script> + <script type="Beng" alt="proposed-u148-1" draft="provisional">bengalî</script> + <script type="Blis" references="RP5">symboles Bliss</script> + <script type="Bopo">bopomofo</script> + <script type="Brah" draft="provisional">brâhmî</script> + <script type="Brai">braille</script> + <script type="Bugi" references="RP5" draft="provisional">bouguis</script> + <script type="Buhd">bouhide</script> + <script type="Cans">syllabaire autochthone canadien unifié</script> + <script type="Cans" references="RP5" alt="proposed-u169-1" draft="provisional">syllabaire autochtone canadien unifié</script> + <script type="Cham" draft="provisional">cham</script> + <script type="Cher">tchérokî</script> + <script type="Cirt" draft="provisional">cirth</script> + <script type="Copt">copte</script> + <script type="Cprt" references="RP5">syllabaire chypriote</script> + <script type="Cyrl">cyrillique</script> + <script type="Cyrs" references="RP5">cyrillique (variante slavonne)</script> + <script type="Deva">dévanâgarî</script> + <script type="Dsrt">déséret</script> + <script type="Egyd">démotique égyptien</script> + <script type="Egyh">hiératique égyptien</script> + <script type="Egyp">hiéroglyphes égyptiens</script> + <script type="Ethi">éthiopique</script> + <script type="Ethi" references="RP5" alt="proposed-u169-1" draft="provisional">éthiopien</script> + <script type="Geok" draft="unconfirmed">khoutsouri (assomtavrouli et nuskhuri)</script> + <script type="Geor">géorgien</script> + <script type="Glag">glagolitique</script> + <script type="Goth">gotique</script> + <script type="Grek">grec</script> + <script type="Gujr">goudjarâtî</script> + <script type="Guru">gourmoukhî</script> + <script type="Hang">hangûl</script> + <script type="Hani" references="RP5">idéogrammes han</script> + <script type="Hano">hanounóo</script> + <script type="Hano" alt="proposed-u148-2" draft="unconfirmed">hanounoo</script> + <script type="Hans" references="RP5">idéogrammes han (variante simplifiée)</script> + <script type="Hant" references="RP5">idéogrammes han (variante traditionnelle)</script> + <script type="Hebr">hébreu</script> + <script type="Hira">hiragana</script> + <script type="Hmng" draft="provisional">pahawh hmong</script> + <script type="Hrkt">katakana ou hiragana</script> + <script type="Hung" references="RP5" draft="provisional">ancien hongrois</script> + <script type="Inds" draft="unconfirmed">indus (harappan)</script> + <script type="Ital">ancien italique</script> + <script type="Java" draft="provisional">javanais</script> + <script type="Kali" references="RP5" draft="provisional">kayah li</script> + <script type="Kana">katakana</script> + <script type="Khar" references="RP5" draft="provisional">kharochthî</script> + <script type="Khmr">khmer</script> + <script type="Knda">kannara</script> + <script type="Laoo" draft="provisional">lao</script> + <script type="Latf" references="RP5">latin (variante brisée)</script> + <script type="Latg">latin (variante gaélique)</script> + <script type="Latn">latin</script> + <script type="Lepc" draft="unconfirmed">lepcha (rong)</script> + <script type="Limb">limbou</script> + <script type="Lina">linéaire A</script> + <script type="Linb">linéaire B</script> + <script type="Mand" draft="provisional">mandéen</script> + <script type="Maya">hiéroglyphes mayas</script> + <script type="Mero" draft="provisional">méroïtique</script> + <script type="Mlym">malayâlam</script> + <script type="Mong">mongol</script> + <script type="Mymr">birman</script> + <script type="Nkoo" draft="provisional">n’ko</script> + <script type="Ogam">ogam</script> + <script type="Orkh" draft="provisional">orkhon</script> + <script type="Orya">oriyâ</script> + <script type="Osma">osmanais</script> + <script type="Perm" draft="provisional">ancien permien</script> + <script type="Phag" references="RP5" draft="provisional">phags pa</script> + <script type="Phnx" draft="provisional">phénicien</script> + <script type="Plrd" draft="provisional">phonétique de Pollard</script> + <script type="Qaai">hérité</script> + <script type="Qaai" alt="proposed-u148-1" draft="unconfirmed">(hérité)</script> + <script type="Roro" draft="provisional">rongorongo</script> + <script type="Runr">runique</script> + <script type="Sara" references="RP5" draft="provisional">sarati</script> + <script type="Shaw">shavien</script> + <script type="Sinh">singhalais</script> + <script type="Sylo" references="RP5" draft="provisional">sylotî nâgrî</script> + <script type="Syrc">syriaque</script> + <script type="Syre" references="RP5" draft="provisional">syriaque (variante estranghélo)</script> + <script type="Syrj" draft="provisional">syriaque (variante occidentale)</script> + <script type="Syrn" draft="provisional">syriaque (variante orientale)</script> + <script type="Tagb">tagbanoua</script> + <script type="Tale">taï-le</script> + <script type="Talu" references="RP5" draft="provisional">nouveau taï-lue</script> + <script type="Taml">tamoul</script> + <script type="Telu">télougou</script> + <script type="Teng" draft="provisional">tengwar</script> + <script type="Tfng" draft="provisional">tifinagh (berbère)</script> + <script type="Tglg">tagal</script> + <script type="Thaa">thâna</script> + <script type="Thai">thaï</script> + <script type="Tibt">tibétain</script> + <script type="Ugar">ougaritique</script> + <script type="Vaii" draft="provisional">vaï</script> + <script type="Visp" references="RP5" draft="provisional">parole visible</script> + <script type="Xpeo" references="RP5">cunéiforme persépolitain</script> + <script type="Xsux" references="RP5">cunéiforme suméro-akkadien</script> + <script type="Yiii">yi</script> + <script type="Zxxx" draft="unconfirmed">(codet pour les langues non écrites)</script> + <script type="Zyyy" draft="unconfirmed">(commun)</script> + <script type="Zzzz" references="RP5" draft="provisional">codet pour écriture non codée</script> + </scripts> + <territories> + <territory type="001">Monde</territory> + <territory type="002">Afrique</territory> + <territory type="003">Amérique du Nord continentale</territory> + <territory type="005">Amérique du Sud</territory> + <territory type="009">Océanie</territory> + <territory type="011">Afrique occidentale</territory> + <territory type="013">Amérique centrale</territory> + <territory type="014">Afrique orientale</territory> + <territory type="015">Afrique septentrionale</territory> + <territory type="017">Afrique centrale</territory> + <territory type="018">Afrique australe</territory> + <territory type="019">Amériques</territory> + <territory type="021">Amérique du Nord</territory> + <territory type="029">Caraïbes</territory> + <territory type="030">Asie orientale</territory> + <territory type="034">Asie du Sud</territory> + <territory type="035">Asie du Sud-Est</territory> + <territory type="039">Europe méridionale</territory> + <territory type="053">Australie et Nouvelle-Zélande</territory> + <territory type="054">Mélanésie</territory> + <territory type="057">région micronésienne</territory> + <territory type="061">Polynésie</territory> + <territory type="062">Asie centrale et du Sud</territory> + <territory type="142">Asie</territory> + <territory type="143">Asie centrale</territory> + <territory type="145">Asie occidentale</territory> + <territory type="150">Europe</territory> + <territory type="151">Europe orientale</territory> + <territory type="154">Europe septentrionale</territory> + <territory type="155">Europe occidentale</territory> + <territory type="172">Communauté des États indépendants</territory> + <territory type="419">Amérique latine et Caraïbes</territory> + <territory type="830">anglo-normandes, îles</territory> + <territory type="830" alt="proposed-u148-1" draft="unconfirmed">Iles anglo-normandes</territory> + <territory type="IM">Île de Man</territory> + <territory type="IM" alt="proposed-u148-1" draft="unconfirmed">Ile de Man</territory> + <territory type="AD">Andorre</territory> + <territory type="AE">Émirats arabes unis</territory> + <territory type="AF">Afghanistan</territory> + <territory type="AG">Antigua-et-Barbuda</territory> + <territory type="AI">Anguilla</territory> + <territory type="AL">Albanie</territory> + <territory type="AM">Arménie</territory> + <territory type="AN">Antilles néerlandaises</territory> + <territory type="AO">Angola</territory> + <territory type="AQ">Antarctique</territory> + <territory type="AR">Argentine</territory> + <territory type="AS">Samoa américaines</territory> + <territory type="AT">Autriche</territory> + <territory type="AU">Australie</territory> + <territory type="AW">Aruba</territory> + <territory type="AX" references="RP7">Åland, îles</territory> + <territory type="AX" references="RP7" alt="proposed-u148-1" draft="unconfirmed">Iles Åland</territory> + <territory type="AZ">Azerbaïdjan</territory> + <territory type="BA">Bosnie-Herzégovine</territory> + <territory type="BB">Barbade</territory> + <territory type="BD">Bangladesh</territory> + <territory type="BE">Belgique</territory> + <territory type="BF">Burkina Faso</territory> + <territory type="BG">Bulgarie</territory> + <territory type="BH">Bahreïn</territory> + <territory type="BI">Burundi</territory> + <territory type="BJ">Bénin</territory> + <territory type="BM">Bermudes</territory> + <territory type="BN" references="RP6">Brunéi Darussalam</territory> + <territory type="BO">Bolivie</territory> + <territory type="BR">Brésil</territory> + <territory type="BS">Bahamas</territory> + <territory type="BT">Bhoutan</territory> + <territory type="BV" references="RP7">Bouvet, île</territory> + <territory type="BV" references="RP7" alt="proposed-u148-1" draft="unconfirmed">Ile Bouvet</territory> + <territory type="BW">Botswana</territory> + <territory type="BY">Bélarus</territory> + <territory type="BZ">Belize</territory> + <territory type="CA">Canada</territory> + <territory type="CC" references="RP7">Cocos (Keeling), îles</territory> + <territory type="CC" references="RP7" alt="proposed-u148-1" draft="unconfirmed">Iles Cocos (Keeling)</territory> + <territory type="CD" references="RP6" draft="unconfirmed">Congo, la république démocratique du</territory> + <territory type="CF" references="RP6" draft="unconfirmed">Centrafricaine, république</territory> + <territory type="CG">Congo</territory> + <territory type="CH">Suisse</territory> + <territory type="CI">Côte d’Ivoire</territory> + <territory type="CK" references="RP6">Cook, îles</territory> + <territory type="CK" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Iles Cook</territory> + <territory type="CL">Chili</territory> + <territory type="CM">Cameroun</territory> + <territory type="CN">Chine</territory> + <territory type="CO">Colombie</territory> + <territory type="CR">Costa Rica</territory> + <territory type="CS">Serbie-et-Monténégro</territory> + <territory type="CU">Cuba</territory> + <territory type="CV">Cap Vert</territory> + <territory type="CX" references="RP6">Christmas, île</territory> + <territory type="CX" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Ile Christmas</territory> + <territory type="CY">Chypre</territory> + <territory type="CZ" references="RP6" draft="unconfirmed">Tchèque, république</territory> + <territory type="DE">Allemagne</territory> + <territory type="DJ">Djibouti</territory> + <territory type="DK">Danemark</territory> + <territory type="DM">Dominique</territory> + <territory type="DO" references="RP6" draft="unconfirmed">Dominicaine, république</territory> + <territory type="DZ">Algérie</territory> + <territory type="EC">Équateur</territory> + <territory type="EE">Estonie</territory> + <territory type="EG">Égypte</territory> + <territory type="EH">Sahara occidental</territory> + <territory type="ER">Érythrée</territory> + <territory type="ES">Espagne</territory> + <territory type="ET">Éthiopie</territory> + <territory type="FI">Finlande</territory> + <territory type="FJ">Fidji</territory> + <territory type="FK" references="RP6">Falkland, îles (Malvinas)</territory> + <territory type="FK" references="RP6" alt="proposed-u148-2" draft="unconfirmed">Iles Falkland (Malouines)</territory> + <territory type="FM" references="RP6">Micronésie, états fédérés de</territory> + <territory type="FM" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Micronésie, États fédérés de</territory> + <territory type="FO" references="RP6">Féroé, îles</territory> + <territory type="FO" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Iles Féroé</territory> + <territory type="FR">France</territory> + <territory type="GA">Gabon</territory> + <territory type="GB">Royaume-Uni</territory> + <territory type="GD">Grenade</territory> + <territory type="GE">Géorgie</territory> + <territory type="GF">Guyane française</territory> + <territory type="GH">Ghana</territory> + <territory type="GI">Gibraltar</territory> + <territory type="GL">Groenland</territory> + <territory type="GM">Gambie</territory> + <territory type="GN">Guinée</territory> + <territory type="GP">Guadeloupe</territory> + <territory type="GQ">Guinée équatoriale</territory> + <territory type="GR">Grèce</territory> + <territory type="GS" references="RP6">Géorgie du Sud et les îles Sandwich du Sud</territory> + <territory type="GS" references="RP6" alt="proposed-u148-3" draft="unconfirmed">Géorgie du Sud et les iles Sandwich du Sud</territory> + <territory type="GT">Guatemala</territory> + <territory type="GU">Guam</territory> + <territory type="GW">Guinée-Bissau</territory> + <territory type="GY">Guyana</territory> + <territory type="HK" references="RP6" draft="unconfirmed">Hong-Kong</territory> + <territory type="HM" references="RP6">Heard, île et McDonald, îles</territory> + <territory type="HM" references="RP6" alt="proposed-u148-2" draft="unconfirmed">Iles Heard et McDonald</territory> + <territory type="HN">Honduras</territory> + <territory type="HR">Croatie</territory> + <territory type="HT">Haïti</territory> + <territory type="HU">Hongrie</territory> + <territory type="ID">Indonésie</territory> + <territory type="IE">Irlande</territory> + <territory type="IL">Israël</territory> + <territory type="IN">Inde</territory> + <territory type="IO" references="RP6" draft="unconfirmed">Océan indien, territoire britannique de l'</territory> + <territory type="IQ">Iraq</territory> + <territory type="IR">Iran</territory> + <territory type="IS">Islande</territory> + <territory type="IT">Italie</territory> + <territory type="JM">Jamaïque</territory> + <territory type="JO">Jordanie</territory> + <territory type="JP">Japon</territory> + <territory type="KE">Kenya</territory> + <territory type="KG">Kirghizistan</territory> + <territory type="KH">Cambodge</territory> + <territory type="KI">Kiribati</territory> + <territory type="KM">Comores</territory> + <territory type="KN" references="RP6">Saint-Kitts-et-Nevis</territory> + <territory type="KN" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Saint-Christophe-et-Niévès</territory> + <territory type="KP">Corée du Nord</territory> + <territory type="KR">Corée du Sud</territory> + <territory type="KW">Koweït</territory> + <territory type="KY">Caïmanes, îles</territory> + <territory type="KY" alt="proposed-u148-1" draft="unconfirmed">Iles Caïmanes</territory> + <territory type="KZ">Kazakhstan</territory> + <territory type="LA">Laos</territory> + <territory type="LB">Liban</territory> + <territory type="LC">Sainte-Lucie</territory> + <territory type="LI">Liechtenstein</territory> + <territory type="LK">Sri Lanka</territory> + <territory type="LR">Libéria</territory> + <territory type="LS">Lesotho</territory> + <territory type="LT" references="RP6">Lituanie</territory> + <territory type="LU">Luxembourg</territory> + <territory type="LV">Lettonie</territory> + <territory type="LY">Libye</territory> + <territory type="MA">Maroc</territory> + <territory type="MC">Monaco</territory> + <territory type="MD" references="RP7">Moldavie</territory> + <territory type="MG">Madagascar</territory> + <territory type="MH" references="RP6">Marshall, îles</territory> + <territory type="MH" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Iles Marshall</territory> + <territory type="MK">Macédoine</territory> + <territory type="ML">Mali</territory> + <territory type="MM">Myanmar</territory> + <territory type="MN">Mongolie</territory> + <territory type="MO" references="RP6" draft="unconfirmed">Macao</territory> + <territory type="MP" references="RP6">Mariannes du Nord, îles</territory> + <territory type="MP" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Iles Mariannes du Nord</territory> + <territory type="MQ">Martinique</territory> + <territory type="MR">Mauritanie</territory> + <territory type="MS">Montserrat</territory> + <territory type="MT">Malte</territory> + <territory type="MU">Maurice</territory> + <territory type="MV">Maldives</territory> + <territory type="MW">Malawi</territory> + <territory type="MX">Mexique</territory> + <territory type="MY">Malaisie</territory> + <territory type="MZ">Mozambique</territory> + <territory type="NA">Namibie</territory> + <territory type="NC">Nouvelle-Calédonie</territory> + <territory type="NE">Niger</territory> + <territory type="NF" references="RP6">Norfolk, île</territory> + <territory type="NF" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Ile Norfolk</territory> + <territory type="NG">Nigéria</territory> + <territory type="NI">Nicaragua</territory> + <territory type="NL">Pays-Bas</territory> + <territory type="NO">Norvège</territory> + <territory type="NP">Népal</territory> + <territory type="NR">Nauru</territory> + <territory type="NU">Nioué</territory> + <territory type="NZ">Nouvelle-Zélande</territory> + <territory type="OM">Oman</territory> + <territory type="PA">Panama</territory> + <territory type="PE">Pérou</territory> + <territory type="PF">Polynésie française</territory> + <territory type="PG">Papouasie-Nouvelle-Guinée</territory> + <territory type="PH">Philippines</territory> + <territory type="PK">Pakistan</territory> + <territory type="PL">Pologne</territory> + <territory type="PM">Saint-Pierre-et-Miquelon</territory> + <territory type="PN">Pitcairn</territory> + <territory type="PR">Porto Rico</territory> + <territory type="PS">Territoire palestinien</territory> + <territory type="PT">Portugal</territory> + <territory type="PW">Palaos</territory> + <territory type="PY">Paraguay</territory> + <territory type="QA">Qatar</territory> + <territory type="QO" draft="provisional">régions éloignées de l’Océanie</territory> + <territory type="RE">Réunion</territory> + <territory type="RO">Roumanie</territory> + <territory type="RU">Russie</territory> + <territory type="RW">Rwanda</territory> + <territory type="SA">Arabie saoudite</territory> + <territory type="SB">Salomon, îles</territory> + <territory type="SB" alt="proposed-u148-1" draft="unconfirmed">Iles Salomon</territory> + <territory type="SC">Seychelles</territory> + <territory type="SD">Soudan</territory> + <territory type="SE">Suède</territory> + <territory type="SG">Singapour</territory> + <territory type="SH">Sainte-Hélène</territory> + <territory type="SI">Slovénie</territory> + <territory type="SJ">Svalbard et Île Jan Mayen</territory> + <territory type="SJ" alt="proposed-u148-1" draft="unconfirmed">Svalbard et Ile Jan Mayen</territory> + <territory type="SK">Slovaquie</territory> + <territory type="SL">Sierra Leone</territory> + <territory type="SM">Saint-Marin</territory> + <territory type="SN">Sénégal</territory> + <territory type="SO">Somalie</territory> + <territory type="SR">Suriname</territory> + <territory type="ST">Sao Tomé-et-Principe</territory> + <territory type="SV">El Salvador</territory> + <territory type="SY">Syrie</territory> + <territory type="SZ">Swaziland</territory> + <territory type="TC" references="RP6">Turks et Caïques, îles</territory> + <territory type="TC" references="RP6" alt="proposed-u148-1" draft="unconfirmed">Iles Turks et Caïques</territory> + <territory type="TD">Tchad</territory> + <territory type="TF">Terres australes françaises</territory> + <territory type="TG">Togo</territory> + <territory type="TH">Thaïlande</territory> + <territory type="TJ">Tadjikistan</territory> + <territory type="TK">Tokelau</territory> + <territory type="TL">Timor-Leste</territory> + <territory type="TM">Turkménistan</territory> + <territory type="TN">Tunisie</territory> + <territory type="TO">Tonga</territory> + <territory type="TR">Turquie</territory> + <territory type="TT">Trinité-et-Tobago</territory> + <territory type="TV">Tuvalu</territory> + <territory type="TW">Taïwan</territory> + <territory type="TZ">Tanzanie</territory> + <territory type="UA">Ukraine</territory> + <territory type="UG">Ouganda</territory> + <territory type="UM">Îles Mineures Éloignées des États-Unis</territory> + <territory type="UM" alt="proposed-u148-1" draft="unconfirmed">Iles mineures éloignées des États-Unis</territory> + <territory type="UM" references="RP6" alt="proposed-u169-1" draft="provisional">Îles mineures éloignées des États-Unis</territory> + <territory type="US">États-Unis</territory> + <territory type="UY">Uruguay</territory> + <territory type="UZ">Ouzbékistan</territory> + <territory type="VA">Saint-Siège (Etat de la Cité du Vatican)</territory> + <territory type="VA" alt="proposed-u148-1" draft="provisional">Saint-Siège (État de la Cité du Vatican)</territory> + <territory type="VC">Saint-Vincent-et-les Grenadines</territory> + <territory type="VE" draft="provisional">Venezuela</territory> + <territory type="VG">Îles Vierges britanniques</territory> + <territory type="VG" alt="proposed-u148-1" draft="unconfirmed">Iles Vierges britanniques</territory> + <territory type="VI">Îles Vierges des États-Unis</territory> + <territory type="VI" alt="proposed-u148-1" draft="unconfirmed">Iles Vierges des États-Unis</territory> + <territory type="VN">Viêt Nam</territory> + <territory type="VU">Vanuatu</territory> + <territory type="WF">Wallis-et-Futuna</territory> + <territory type="WS">Samoa</territory> + <territory type="YE">Yémen</territory> + <territory type="YT">Mayotte</territory> + <territory type="ZA">Afrique du Sud</territory> + <territory type="ZM">Zambie</territory> + <territory type="ZW">Zimbabwe</territory> + </territories> + <variants> + <variant type="1901">orthographe allemande traditionnelle</variant> + <variant type="1996">orthographe allemande de 1996</variant> + <variant type="NEDIS">dialecte de Natisone</variant> + <variant type="POLYTONI">polytonique</variant> + <variant type="REVISED">orthographe révisée</variant> + <variant type="ROZAJ">dialecte de Resia</variant> + <variant type="SAAHO" draft="provisional">sialecte saho</variant> + </variants> + <keys> + <key type="calendar">Calendrier</key> + <key type="collation">Ordonnancement</key> + <key type="currency">Devise</key> + </keys> + <types> + <type type="big5han" key="collation">chinois traditionnel (Big5)</type> + <type type="buddhist" key="calendar">Calendrier bouddhiste</type> + <type type="chinese" key="calendar">Calendrier chinois</type> + <type type="direct" key="collation">Ordre direct</type> + <type type="gb2312han" key="collation">chinois simplifié (GB2312)</type> + <type type="gregorian" key="calendar">Calendrier grégorien</type> + <type type="hebrew" key="calendar">Calendrier hébraïque</type> + <type type="islamic" key="calendar">Calendrier musulman</type> + <type type="islamic-civil" key="calendar">Calendrier civil musulman</type> + <type type="japanese" key="calendar">Calendrier japonais</type> + <type type="phonebook" key="collation">Ordre de l’annuaire</type> + <type type="pinyin" key="collation">Ordre pinyin</type> + <type type="stroke" key="collation">Ordre des traits</type> + <type type="traditional" key="collation">Ordre traditionnel</type> + </types> + <measurementSystemNames> + <measurementSystemName type="US">américain</measurementSystemName> + <measurementSystemName type="metric">métrique</measurementSystemName> + </measurementSystemNames> + </localeDisplayNames> + <characters> + <exemplarCharacters>[a à â æ b c ç d e é è ê ë f-i î ï j-o ô œ p-u ù û ü v-y ÿ z]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[å ñ ó]</exemplarCharacters> + </characters> + <delimiters> + <quotationStart>«</quotationStart> + <quotationEnd>»</quotationEnd> + <alternateQuotationStart>“</alternateQuotationStart> + <alternateQuotationEnd>”</alternateQuotationEnd> + </delimiters> + <dates> + <localizedPatternChars>GaMjkHmsSEDFwWxhKzAeugXZvcL</localizedPatternChars> + <calendars> + <calendar type="gregorian"> + <months> + <monthContext type="format"> + <monthWidth type="abbreviated"> + <month type="1">janv.</month> + <month type="2">févr.</month> + <month type="3">mars</month> + <month type="4">avr.</month> + <month type="5">mai</month> + <month type="6">juin</month> + <month type="7">juil.</month> + <month type="8">août</month> + <month type="9">sept.</month> + <month type="10">oct.</month> + <month type="11">nov.</month> + <month type="12">déc.</month> + </monthWidth> + <monthWidth type="wide"> + <month type="1">janvier</month> + <month type="2">février</month> + <month type="3">mars</month> + <month type="4">avril</month> + <month type="5">mai</month> + <month type="6">juin</month> + <month type="7">juillet</month> + <month type="8">août</month> + <month type="9">septembre</month> + <month type="10">octobre</month> + <month type="11">novembre</month> + <month type="12">décembre</month> + </monthWidth> + </monthContext> + <monthContext type="stand-alone"> + <monthWidth type="narrow"> + <month type="1">J</month> + <month type="2">F</month> + <month type="3">M</month> + <month type="4">A</month> + <month type="5">M</month> + <month type="6">J</month> + <month type="7">J</month> + <month type="8">A</month> + <month type="9">S</month> + <month type="10">O</month> + <month type="11">N</month> + <month type="12">D</month> + </monthWidth> + </monthContext> + </months> + <days> + <dayContext type="format"> + <dayWidth type="abbreviated"> + <day type="sun">dim.</day> + <day type="mon">lun.</day> + <day type="tue">mar.</day> + <day type="wed">mer.</day> + <day type="thu">jeu.</day> + <day type="fri">ven.</day> + <day type="sat">sam.</day> + </dayWidth> + <dayWidth type="wide"> + <day type="sun">dimanche</day> + <day type="mon">lundi</day> + <day type="tue">mardi</day> + <day type="wed">mercredi</day> + <day type="thu">jeudi</day> + <day type="fri">vendredi</day> + <day type="sat">samedi</day> + </dayWidth> + </dayContext> + <dayContext type="stand-alone"> + <dayWidth type="narrow"> + <day type="sun">D</day> + <day type="mon">L</day> + <day type="tue">M</day> + <day type="wed">M</day> + <day type="thu">J</day> + <day type="fri">V</day> + <day type="sat">S</day> + </dayWidth> + </dayContext> + </days> + <quarters> + <quarterContext type="format"> + <quarterWidth type="abbreviated"> + <quarter type="1">T1</quarter> + <quarter type="2">T2</quarter> + <quarter type="3">T3</quarter> + <quarter type="4">T4</quarter> + </quarterWidth> + <quarterWidth type="wide"> + <quarter type="1">1er trimestre</quarter> + <quarter type="2">2e trimestre</quarter> + <quarter type="3">3e trimestre</quarter> + <quarter type="4">4e trimestre</quarter> + </quarterWidth> + </quarterContext> + </quarters> + <eras> + <eraNames> + <era type="0">av. J.-C.</era> + <era type="1">ap. J.-C.</era> + </eraNames> + <eraAbbr> + <era type="0">av. J.-C.</era> + <era type="1">apr. J.-C.</era> + </eraAbbr> + </eras> + <dateFormats> + <dateFormatLength type="full"> + <dateFormat> + <pattern>EEEE d MMMM yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="long"> + <dateFormat> + <pattern>d MMMM yyyy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="medium"> + <dateFormat> + <pattern>d MMM yy</pattern> + </dateFormat> + </dateFormatLength> + <dateFormatLength type="short"> + <dateFormat> + <pattern>dd/MM/yy</pattern> + </dateFormat> + </dateFormatLength> + </dateFormats> + <timeFormats> + <timeFormatLength type="full"> + <timeFormat> + <pattern>HH' h 'mm z</pattern> + </timeFormat> + </timeFormatLength> + </timeFormats> + <dateTimeFormats> + <availableFormats> + <dateFormatItem id="HHmm" draft="provisional">HH:mm</dateFormatItem> + <dateFormatItem id="HHmmss" draft="provisional">HH:mm:ss</dateFormatItem> + <dateFormatItem id="MMMMd" draft="provisional">d MMMM</dateFormatItem> + <dateFormatItem id="MMdd" draft="provisional">dd/MM</dateFormatItem> + <dateFormatItem id="hhmm" draft="provisional">hh:mm a</dateFormatItem> + <dateFormatItem id="hhmmss" draft="provisional">hh:mm:ss a</dateFormatItem> + <dateFormatItem id="yyMM" draft="provisional">MM/yy</dateFormatItem> + <dateFormatItem id="yyQQQQ" draft="provisional">QQQQ yy</dateFormatItem> + <dateFormatItem id="yyyyMMMM" draft="provisional">MMMM yyyy</dateFormatItem> + </availableFormats> + </dateTimeFormats> + </calendar> + <calendar type="hebrew"> + <months> + <monthContext type="format"> + <monthWidth type="wide"> + <month type="1">Tisseri</month> + <month type="2">Hesvan</month> + <month type="4">Tébeth</month> + <month type="5">Schébat</month> + <month type="6">Adar</month> + <month type="7">Adar II</month> + <month type="8">Nissan</month> + <month type="11">Tamouz</month> + <month type="12">Ab</month> + <month type="13">Elloul</month> + </monthWidth> + </monthContext> + </months> + </calendar> + <calendar type="islamic"> + <months> + <monthContext type="format"> + <monthWidth type="wide"> + <month type="1">Mouharram</month> + <month type="3">Rabiʻ-oul-Aououal</month> + <month type="4">Rabiʻ-out-Tani</month> + <month type="5">Djoumada-l-Oula</month> + <month type="6">Djoumada-t-Tania</month> + <month type="7">Radjab</month> + <month type="8">Chaʻban</month> + <month type="10">Chaououal</month> + <month type="11">Dou-l-Qaʻda</month> + <month type="12">Dou-l-Hidjja</month> + </monthWidth> + </monthContext> + </months> + </calendar> + </calendars> + <timeZoneNames> + <gmtFormat draft="unconfirmed">HMG{0}</gmtFormat> + <zone type="Africa/Timbuktu"> + <exemplarCity>Tombouctou</exemplarCity> + </zone> + <zone type="America/Argentina/ComodRivadavia"> + <exemplarCity>Comodoro Rivadavia</exemplarCity> + </zone> + <zone type="Antarctica/South_Pole"> + <exemplarCity>Pôle Sud</exemplarCity> + </zone> + <zone type="Antarctica/DumontDUrville"> + <exemplarCity>Dumont d'Urville</exemplarCity> + </zone> + <zone type="Antarctica/McMurdo"> + <exemplarCity>Mac Murdo</exemplarCity> + </zone> + <zone type="Australia/Adelaide"> + <exemplarCity>Adélaïde</exemplarCity> + </zone> + <zone type="America/Manaus"> + <exemplarCity>Manaos</exemplarCity> + </zone> + <zone type="America/Vancouver"> + <long> + <generic>Heure du Pacifique</generic> + <standard>Heure normale du Pacifique</standard> + <daylight>Heure avancée du Pacifique</daylight> + </long> + <short> + <generic>HP</generic> + <standard>HNP</standard> + <daylight>HAP</daylight> + </short> + </zone> + <zone type="America/Edmonton"> + <long> + <generic>Heure des Rocheuses</generic> + <standard>Heure normale des Rocheuses</standard> + <daylight>Heure avancée des Rocheuses</daylight> + </long> + <short> + <generic>HR</generic> + <standard>HNR</standard> + <daylight>HAR</daylight> + </short> + </zone> + <zone type="America/Winnipeg"> + <long> + <generic>Heure du Centre</generic> + <standard>Heure normale du Centre</standard> + <daylight>Heure avancée du Centre</daylight> + </long> + <short> + <generic>HC</generic> + </short> + </zone> + <zone type="America/Montreal"> + <long> + <generic>Heure de l’Est</generic> + <standard>Heure normale de l’Est</standard> + <daylight>Heure avancée de l’Est</daylight> + </long> + <short> + <generic>HE</generic> + <standard>HNE</standard> + <daylight>HAE</daylight> + </short> + <exemplarCity>Montréal</exemplarCity> + </zone> + <zone type="America/Halifax"> + <long> + <generic>Heure de l’Atlantique</generic> + <standard>Heure normale de l’Atlantique</standard> + <daylight>Heure avancée de l’Atlantique</daylight> + </long> + <short> + <generic>HA</generic> + <standard>HNA</standard> + <daylight>HAA</daylight> + </short> + </zone> + <zone type="America/St_Johns"> + <long> + <generic>Heure de Terre-Neuve</generic> + <standard>Heure normale de Terre-Neuve</standard> + <daylight>Heure avancée de Terre-Neuve</daylight> + </long> + <short> + <generic>HT</generic> + <standard>HNT</standard> + <daylight>HAT</daylight> + </short> + <exemplarCity>Saint-Jean de Terre-Neuve</exemplarCity> + </zone> + <!-- Chile --> + <zone type="Pacific/Easter"> + <exemplarCity>Île de Pâques</exemplarCity> + </zone> + <!-- China --> + <zone type="Asia/Kashgar"> + <exemplarCity>Kachgar</exemplarCity> + </zone> + <zone type="Asia/Shanghai"> + <long> + <standard>Heure normale de Chine</standard> + <daylight>Heure avancée de Chine</daylight> + </long> + <short> + <standard>HNC</standard> + <daylight>HAC</daylight> + </short> + </zone> + <!-- Spain --> + <zone type="Atlantic/Canary"> + <exemplarCity>Îles Canaries</exemplarCity> + </zone> + <zone type="Europe/Paris"> + <long> + <generic>Heure de l’Europe centrale</generic> + <standard>Heure normale de l’Europe centrale</standard> + <daylight>Heure avancée de l’Europe centrale</daylight> + </long> + <short> + <generic>HEC</generic> + <standard>HNEC</standard> + <daylight>HAEC</daylight> + </short> + <exemplarCity>Paris</exemplarCity> + </zone> + <zone type="Europe/London"> + <exemplarCity>Londres</exemplarCity> + </zone> + <zone type="Asia/Jerusalem"> + <long> + <standard>Heure normale d’Israël</standard> + <daylight>Heure avancée d’Israël</daylight> + </long> + <short> + <standard>HNI</standard> + <daylight>HAI</daylight> + </short> + <exemplarCity>Jérusalem</exemplarCity> + </zone> + <zone type="Asia/Tokyo"> + <long> + <standard>Heure normale du Japon</standard> + <daylight>Heure avancée du Japon</daylight> + </long> + <short> + <standard>HNJ</standard> + <daylight>HAJ</daylight> + </short> + <exemplarCity>Tokyo</exemplarCity> + </zone> + <!-- Kazakhstan --> + <zone type="Asia/Aqtau"> + <exemplarCity>Chevtchenko</exemplarCity> + </zone> + <zone type="Asia/Oral"> + <exemplarCity>Ouralsk</exemplarCity> + </zone> + <zone type="Asia/Aqtobe"> + <exemplarCity>Aktioubinsk</exemplarCity> + </zone> + <zone type="Asia/Qyzylorda"> + <exemplarCity>Kzyl Orda</exemplarCity> + </zone> + <zone type="Asia/Almaty"> + <exemplarCity>Alma Ata</exemplarCity> + </zone> + <zone type="Asia/Ulaanbaatar"> + <exemplarCity>Oulan-Bator</exemplarCity> + </zone> + <zone type="Asia/Choibalsan"> + <exemplarCity>Tchoïbalsan</exemplarCity> + </zone> + <zone type="America/Mexico_City"> + <exemplarCity>Mexico</exemplarCity> + </zone> + <zone type="Pacific/Marquesas"> + <exemplarCity>Marquises</exemplarCity> + </zone> + <!-- Portugal --> + <zone type="Atlantic/Azores"> + <exemplarCity>Açores</exemplarCity> + </zone> + <zone type="Atlantic/Madeira"> + <exemplarCity>Madère</exemplarCity> + </zone> + <zone type="Europe/Lisbon"> + <exemplarCity>Lisbonne</exemplarCity> + </zone> + <zone type="Europe/Bucharest"> + <long> + <standard>Heure normale de l’Europe de l’Est</standard> + <daylight>Heure avancée de l’Europe de l’Est</daylight> + </long> + <short> + <standard>HEE</standard> + <daylight>HAEE</daylight> + </short> + <exemplarCity>Bucarest</exemplarCity> + </zone> + <zone type="Europe/Moscow"> + <exemplarCity>Moscou</exemplarCity> + </zone> + <zone type="Asia/Yekaterinburg"> + <exemplarCity>Ekaterinbourg</exemplarCity> + </zone> + <zone type="Asia/Novosibirsk"> + <exemplarCity>Novossibirsk</exemplarCity> + </zone> + <zone type="Asia/Krasnoyarsk"> + <exemplarCity>Krasnoïarsk</exemplarCity> + </zone> + <zone type="Asia/Irkutsk"> + <exemplarCity>Irkoutsk</exemplarCity> + </zone> + <zone type="Asia/Yakutsk"> + <exemplarCity>Iakoutsk</exemplarCity> + </zone> + <zone type="Asia/Sakhalin"> + <exemplarCity>Sakhaline</exemplarCity> + </zone> + <zone type="Asia/Kamchatka"> + <exemplarCity>Kamtchatka</exemplarCity> + </zone> + <!-- Ukraine --> + <zone type="Europe/Uzhgorod"> + <exemplarCity>Oujgorod</exemplarCity> + </zone> + <zone type="Europe/Zaporozhye"> + <exemplarCity>Zaporojie</exemplarCity> + </zone> + <zone type="Pacific/Honolulu"> + <long> + <generic>Heure d’Hawaï</generic> + <standard>Heure normale d’Hawaï</standard> + <daylight>Heure avancée d’Hawaï</daylight> + </long> + <short> + <standard>HST</standard> + <daylight>HDT</daylight> + </short> + </zone> + <zone type="America/Anchorage"> + <long> + <generic>Heure de l’Alaska</generic> + <standard>Heure normale de l’Alaska</standard> + <daylight>Heure avancée de l’Alaska</daylight> + </long> + <short> + <generic>HAK</generic> + <standard>HNAK</standard> + <daylight>HAAK</daylight> + </short> + </zone> + <zone type="America/Los_Angeles"> + <long> + <generic>Heure du Pacifique (ÉUA)</generic> + <standard>Heure normale du Pacifique (ÉUA)</standard> + <daylight>Heure avancée du Pacifique (ÉUA)</daylight> + </long> + <short> + <generic>HP (ÉUA)</generic> + <standard>HNP (ÉUA)</standard> + <daylight>HAP (ÉUA)</daylight> + </short> + </zone> + <zone type="America/Denver"> + <long> + <generic>Heure des Rocheuses (ÉUA)</generic> + <standard>Heure normale des Rocheuses (ÉUA)</standard> + <daylight>Heure avancée des Rocheuses (ÉUA)</daylight> + </long> + <short> + <generic>HR (ÉUA)</generic> + <standard>HNR (ÉUA)</standard> + <daylight>HAR (ÉUA)</daylight> + </short> + </zone> + <zone type="America/Chicago"> + <long> + <generic>Heure du Centre (ÉUA)</generic> + <standard>Heure normale du Centre (ÉUA)</standard> + <daylight>Heure avancée du Centre (ÉUA)</daylight> + </long> + <short> + <generic>HC (ÉUA)</generic> + <standard>HNC (ÉUA)</standard> + <daylight>HAC (ÉUA)</daylight> + </short> + </zone> + <zone type="America/Detroit"> + <exemplarCity>Détroit</exemplarCity> + </zone> + <zone type="America/New_York"> + <long> + <generic>Heure de l’Est (ÉUA)</generic> + <standard>Heure normale de l’Est (ÉUA)</standard> + <daylight>Heure avancée de l’Est (ÉUA)</daylight> + </long> + <short> + <generic>HE (ÉUA)</generic> + <standard>HNE (ÉUA)</standard> + <daylight>HAE (ÉUA)</daylight> + </short> + </zone> + </timeZoneNames> + </dates> + <numbers> + <symbols> + <decimal>,</decimal> + <group> </group> + </symbols> + <percentFormats> + <percentFormatLength> + <percentFormat> + <pattern>#,##0 %</pattern> + </percentFormat> + </percentFormatLength> + </percentFormats> + <currencyFormats> + <currencyFormatLength> + <currencyFormat> + <pattern>#,##0.00 ¤</pattern> + </currencyFormat> + </currencyFormatLength> + </currencyFormats> + <currencies> + <currency type="ADP"> + <displayName>peseta andorrane</displayName> + </currency> + <currency type="AED"> + <displayName>dirham des Émirats arabes unis</displayName> + </currency> + <currency type="AFA"> + <displayName>afghani [AFA]</displayName> + </currency> + <currency type="AFN"> + <displayName>afghani</displayName> + <symbol>Af</symbol> + </currency> + <currency type="ALL"> + <displayName references="RP8">lek</displayName> + <symbol>lek</symbol> + </currency> + <currency type="AMD"> + <displayName>dram arménien</displayName> + <symbol>dram</symbol> + </currency> + <currency type="ANG"> + <displayName references="RP8">florin des Antilles</displayName> + </currency> + <currency type="AOA"> + <displayName>kwanza angolais</displayName> + </currency> + <currency type="AOK"> + <displayName>kwanza angolais (1977-1990)</displayName> + </currency> + <currency type="AON"> + <displayName>nouveau kwanza angolais (1990-2000)</displayName> + </currency> + <currency type="AOR"> + <displayName>kwanza angolais réajusté (1995-1999)</displayName> + </currency> + <currency type="ARA"> + <displayName references="RP2">austral argentin</displayName> + </currency> + <currency type="ARP"> + <displayName>peso argentin (1983-1985)</displayName> + </currency> + <currency type="ARS"> + <displayName>peso argentin</displayName> + <symbol>Arg$</symbol> + </currency> + <currency type="ATS"> + <displayName>schilling autrichien</displayName> + </currency> + <currency type="AUD"> + <displayName>dollar australien</displayName> + </currency> + <currency type="AWG"> + <displayName>florin d’Aruba</displayName> + </currency> + <currency type="AZM"> + <displayName>manat azéri</displayName> + </currency> + <currency type="BAD"> + <displayName>dinar de Bosnie-Herzegovine</displayName> + </currency> + <currency type="BAM"> + <displayName references="RP9">mark bosniaque convertible</displayName> + <symbol>KM</symbol> + </currency> + <currency type="BBD"> + <displayName>dollar de Barbade</displayName> + </currency> + <currency type="BDT"> + <displayName>taka</displayName> + </currency> + <currency type="BEC"> + <displayName>franc belge (convertible)</displayName> + </currency> + <currency type="BEF"> + <displayName>franc belge</displayName> + <symbol>FB</symbol> + </currency> + <currency type="BEL"> + <displayName>franc belge (financier)</displayName> + </currency> + <currency type="BGL"> + <displayName>lev</displayName> + </currency> + <currency type="BGN"> + <displayName references="RP2">nouveau lev</displayName> + </currency> + <currency type="BHD"> + <displayName references="RP8">dinar de Bahreïn</displayName> + </currency> + <currency type="BIF"> + <displayName>franc du Burundi</displayName> + </currency> + <currency type="BMD"> + <displayName>dollar des Bermudes</displayName> + </currency> + <currency type="BND"> + <displayName>dollar de Brunei</displayName> + </currency> + <currency type="BOB"> + <displayName>boliviano</displayName> + <symbol>Bs</symbol> + </currency> + <currency type="BOP"> + <displayName>peso bolivien</displayName> + </currency> + <currency type="BOV"> + <displayName references="RP9">mvdol</displayName> + </currency> + <currency type="BRB"> + <displayName>nouveau cruzeiro (1967-1986)</displayName> + </currency> + <currency type="BRC"> + <displayName>cruzado</displayName> + </currency> + <currency type="BRE"> + <displayName>cruzeiro (1990-1993)</displayName> + </currency> + <currency type="BRL"> + <displayName>réal</displayName> + <symbol>R$</symbol> + </currency> + <currency type="BRN"> + <displayName>nouveau cruzado</displayName> + </currency> + <currency type="BRR"> + <displayName>cruzeiro</displayName> + </currency> + <currency type="BSD"> + <displayName>dollar des Bahamas</displayName> + </currency> + <currency type="BTN"> + <displayName>ngultrum</displayName> + <symbol>Nu</symbol> + </currency> + <currency type="BUK"> + <displayName>kyat [BUK]</displayName> + </currency> + <currency type="BWP"> + <displayName>pula</displayName> + </currency> + <currency type="BYB"> + <displayName>nouveau rouble biélorusse (1994-1999)</displayName> + </currency> + <currency type="BYR"> + <displayName>rouble biélorusse</displayName> + <symbol>Rbl</symbol> + </currency> + <currency type="BZD"> + <displayName>dollar de Belize</displayName> + </currency> + <currency type="CAD"> + <displayName>dollar canadien</displayName> + </currency> + <currency type="CDF"> + <displayName>franc congolais</displayName> + </currency> + <currency type="CHE"> + <displayName>euro WIR</displayName> + </currency> + <currency type="CHF"> + <displayName>franc suisse</displayName> + <symbol>sFr.</symbol> + </currency> + <currency type="CHW"> + <displayName>franc WIR</displayName> + </currency> + <currency type="CLF"> + <displayName>unité d’investissement chilienne</displayName> + </currency> + <currency type="CLP"> + <displayName>peso chilien</displayName> + </currency> + <currency type="CNY"> + <displayName>Yuan Ren-min-bi</displayName> + </currency> + <currency type="COP"> + <displayName>peso colombien</displayName> + </currency> + <currency type="COU"> + <displayName draft="unconfirmed">Unité de valeur réelle colombienne</displayName> + </currency> + <currency type="CRC"> + <displayName>colon de Costa Rica</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">colon costaricain</displayName> + </currency> + <currency type="CSD"> + <displayName>dinar serbe</displayName> + </currency> + <currency type="CSK"> + <displayName>couronne tchèque [CSK]</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">couronne forte tchécoslovaque</displayName> + <displayName alt="proposed-u169-1" draft="provisional">couronne forte tchèque</displayName> + </currency> + <currency type="CUP"> + <displayName>peso cubain</displayName> + </currency> + <currency type="CVE"> + <displayName>escudo du Cap-Vert</displayName> + </currency> + <currency type="CYP"> + <displayName>livre cypriote</displayName> + </currency> + <currency type="CZK"> + <displayName>couronne tchèque</displayName> + </currency> + <currency type="DDM"> + <displayName>mark est-allemand</displayName> + </currency> + <currency type="DEM"> + <displayName>deutsche mark</displayName> + </currency> + <currency type="DJF"> + <displayName>franc de Djibouti</displayName> + <symbol>DF</symbol> + </currency> + <currency type="DKK"> + <displayName>couronne danoise</displayName> + </currency> + <currency type="DOP"> + <displayName>peso dominicain</displayName> + </currency> + <currency type="DZD"> + <displayName>dinar algérien</displayName> + </currency> + <currency type="ECS"> + <displayName>sucre</displayName> + </currency> + <currency type="ECV"> + <displayName>unité de valeur constante équatoriale (UVC)</displayName> + </currency> + <currency type="EEK"> + <displayName>couronne estonienne</displayName> + </currency> + <currency type="EGP"> + <displayName>livre égyptienne</displayName> + </currency> + <currency type="EQE"> + <displayName references="RP2" draft="provisional">ekwele</displayName> + </currency> + <currency type="ERN"> + <displayName>Eritrean Nakfa</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">nafka</displayName> + </currency> + <currency type="ESA"> + <displayName>peseta espagnole (compte A)</displayName> + </currency> + <currency type="ESB"> + <displayName>peseta espagnole (compte convertible)</displayName> + </currency> + <currency type="ESP"> + <displayName>peseta espagnole</displayName> + </currency> + <currency type="ETB"> + <displayName>birr</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">birr éthiopien</displayName> + </currency> + <currency type="EUR"> + <displayName>euro</displayName> + </currency> + <currency type="FIM"> + <displayName>mark finlandais</displayName> + </currency> + <currency type="FJD"> + <displayName>dollar de Fidji</displayName> + </currency> + <currency type="FKP"> + <displayName>livre des Falkland (Malvinas)</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">livre des Falkland</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">livre de Falkland</displayName> + </currency> + <currency type="FRF"> + <displayName>franc français</displayName> + <symbol>F</symbol> + </currency> + <currency type="GBP"> + <displayName>livre sterling</displayName> + </currency> + <currency type="GEK"> + <displayName>Georgian Kupon Larit</displayName> + <displayName alt="proposed-u148-1" draft="provisional">coupon de larit géorgien</displayName> + </currency> + <currency type="GEL"> + <displayName>lari</displayName> + <symbol>lari</symbol> + </currency> + <currency type="GHC"> + <displayName>cédi</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">cedi</displayName> + </currency> + <currency type="GIP"> + <displayName>livre de Gibraltar</displayName> + </currency> + <currency type="GMD"> + <displayName>dalasie</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">dalasi</displayName> + </currency> + <currency type="GNF"> + <displayName>franc guinéen</displayName> + <symbol>GF</symbol> + </currency> + <currency type="GNS"> + <displayName>syli</displayName> + </currency> + <currency type="GQE"> + <displayName>ekwélé</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">ekwélé de Guinée équatoriale</displayName> + <displayName references="RP2" alt="proposed-u169-1" draft="provisional">ekwele de Guinée équatoriale</displayName> + </currency> + <currency type="GRD"> + <displayName>drachme</displayName> + </currency> + <currency type="GTQ"> + <displayName>quetzal</displayName> + </currency> + <currency type="GWE"> + <displayName references="RP2">escudo de Guinée portugaise</displayName> + </currency> + <currency type="GWP"> + <displayName>peso de Guinée-Bissau</displayName> + </currency> + <currency type="GYD"> + <displayName>dollar du Guyana</displayName> + <symbol>G$</symbol> + </currency> + <currency type="HKD"> + <displayName>dollar de Hong Kong</displayName> + </currency> + <currency type="HNL"> + <displayName>lempira</displayName> + </currency> + <currency type="HRD"> + <displayName>dinar croate</displayName> + </currency> + <currency type="HRK"> + <displayName>kuna</displayName> + </currency> + <currency type="HTG"> + <displayName>gourde</displayName> + </currency> + <currency type="HUF"> + <displayName>forint</displayName> + </currency> + <currency type="IDR"> + <displayName>rupiah</displayName> + </currency> + <currency type="IEP"> + <displayName>livre irlandaise</displayName> + </currency> + <currency type="ILP"> + <displayName>livre israélienne</displayName> + </currency> + <currency type="ILS"> + <displayName references="RP10" draft="provisional">shekel</displayName> + </currency> + <currency type="INR"> + <displayName>roupie indienne</displayName> + </currency> + <currency type="IQD"> + <displayName references="RP8" draft="provisional">dinar iraquien</displayName> + </currency> + <currency type="IRR"> + <displayName>rial iranien</displayName> + </currency> + <currency type="ISK"> + <displayName>couronne islandaise</displayName> + </currency> + <currency type="ITL"> + <displayName>lire italienne</displayName> + </currency> + <currency type="JMD"> + <displayName>dollar jamaïcain</displayName> + </currency> + <currency type="JOD"> + <displayName>dinar jordanien</displayName> + </currency> + <currency type="JPY"> + <displayName>yen</displayName> + </currency> + <currency type="KES"> + <displayName>shilling du Kenya</displayName> + </currency> + <currency type="KGS"> + <displayName references="RP8">som</displayName> + <symbol>som</symbol> + </currency> + <currency type="KHR"> + <displayName>riel</displayName> + </currency> + <currency type="KMF"> + <displayName>franc des Comores</displayName> + </currency> + <currency type="KPW"> + <displayName>won nord-coréen</displayName> + </currency> + <currency type="KRW"> + <displayName>won sud-coréen</displayName> + </currency> + <currency type="KWD"> + <displayName references="RP8" draft="provisional">dinar koweïtien</displayName> + </currency> + <currency type="KYD"> + <displayName>dollar des îles Caïmanes</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">dollar des iles Caïmanes</displayName> + </currency> + <currency type="KZT"> + <displayName>tenge du Kazakhstan</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">tengé kazakh</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">tenge</displayName> + <symbol>T</symbol> + </currency> + <currency type="LAK"> + <displayName>kip</displayName> + </currency> + <currency type="LBP"> + <displayName>livre libanaise</displayName> + </currency> + <currency type="LKR"> + <displayName>roupie de Sri Lanka</displayName> + </currency> + <currency type="LRD"> + <displayName>dollar libérien</displayName> + </currency> + <currency type="LSL"> + <displayName references="RP8">loti</displayName> + <symbol>M</symbol> + </currency> + <currency type="LSM"> + <displayName references="RP2" draft="provisional">maloti</displayName> + </currency> + <currency type="LTL"> + <displayName references="RP8">litas lituanien</displayName> + <displayName references="RP8" alt="proposed-u148-1" draft="unconfirmed">litas</displayName> + </currency> + <currency type="LTT"> + <displayName references="RP2">talonas</displayName> + </currency> + <currency type="LUC"> + <displayName>franc luxembourgeois convertible</displayName> + </currency> + <currency type="LUF"> + <displayName>franc luxembourgeois</displayName> + </currency> + <currency type="LUL"> + <displayName>franc luxembourgeois financier</displayName> + </currency> + <currency type="LVL"> + <displayName>lats letton</displayName> + </currency> + <currency type="LVR"> + <displayName>rouble letton</displayName> + </currency> + <currency type="LYD"> + <displayName references="RP8">dinar lybien</displayName> + <symbol>LD</symbol> + </currency> + <currency type="MAD"> + <displayName>dirham marocain</displayName> + </currency> + <currency type="MAF"> + <displayName>franc marocain</displayName> + </currency> + <currency type="MDL"> + <displayName>leu moldave</displayName> + </currency> + <currency type="MGA"> + <displayName references="RP10">ariary</displayName> + </currency> + <currency type="MGF"> + <displayName>franc malgache</displayName> + </currency> + <currency type="MKD"> + <displayName references="RP8">denar</displayName> + <symbol>MDen</symbol> + </currency> + <currency type="MLF"> + <displayName>franc malien</displayName> + </currency> + <currency type="MMK"> + <displayName>Myanmar Kyat</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">kyat de Myanmar</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">kyat</displayName> + </currency> + <currency type="MNT"> + <displayName>tugrik</displayName> + </currency> + <currency type="MOP"> + <displayName>pataca</displayName> + </currency> + <currency type="MRO"> + <displayName>ouguija</displayName> + </currency> + <currency type="MTL"> + <displayName>lire maltaise</displayName> + <symbol>Lm</symbol> + </currency> + <currency type="MTP"> + <displayName>livre maltaise</displayName> + </currency> + <currency type="MUR"> + <displayName references="RP2">roupie mauricienne</displayName> + </currency> + <currency type="MVR"> + <displayName>roupie des Maldives</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">rufiyaa</displayName> + </currency> + <currency type="MWK"> + <displayName>kwacha [MWK]</displayName> + <displayName references="RP9" alt="proposed-u169-1" draft="provisional">kwacha du Malawi</displayName> + </currency> + <currency type="MXN"> + <displayName references="RP8">peso mexicain</displayName> + </currency> + <currency type="MXP"> + <displayName>peso d’argent mexicain (1861-1992)</displayName> + </currency> + <currency type="MXV"> + <displayName>unité de conversion mexicaine (UDI)</displayName> + <displayName references="RP2" alt="proposed-u169-1" draft="provisional">unidad de inversion</displayName> + </currency> + <currency type="MYR"> + <displayName>ringgit</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">ringgit malais</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">ringgit de Malaisie</displayName> + </currency> + <currency type="MZE"> + <displayName>escudo du Mozambique</displayName> + </currency> + <currency type="MZM"> + <displayName>métical</displayName> + <displayName references="RP3" alt="proposed-u169-1" draft="provisional">metical</displayName> + </currency> + <currency type="NAD"> + <displayName references="RP8">dollar namibien</displayName> + <symbol>N$</symbol> + </currency> + <currency type="NGN"> + <displayName>naira</displayName> + </currency> + <currency type="NIC"> + <displayName>cordoba</displayName> + </currency> + <currency type="NIO"> + <displayName>cordoba d’or</displayName> + </currency> + <currency type="NLG"> + <displayName>florin néerlandais</displayName> + </currency> + <currency type="NOK"> + <displayName>couronne norvégienne</displayName> + </currency> + <currency type="NPR"> + <displayName>roupie du Népal</displayName> + </currency> + <currency type="NZD"> + <displayName>dollar néo-zélandais</displayName> + </currency> + <currency type="OMR"> + <displayName>rial omani</displayName> + </currency> + <currency type="PAB"> + <displayName>balboa</displayName> + </currency> + <currency type="PEI"> + <displayName references="RP2">inti péruvien</displayName> + </currency> + <currency type="PEN"> + <displayName>nouveau sol péruvien</displayName> + </currency> + <currency type="PES"> + <displayName>sol péruvien</displayName> + </currency> + <currency type="PGK"> + <displayName>kina</displayName> + </currency> + <currency type="PHP"> + <displayName>peso philippin</displayName> + </currency> + <currency type="PKR"> + <displayName>roupie du Pakistan</displayName> + </currency> + <currency type="PLN"> + <displayName>zloty</displayName> + </currency> + <currency type="PLZ"> + <displayName>zloty (1950-1995)</displayName> + </currency> + <currency type="PTE"> + <displayName>escudo portugais</displayName> + </currency> + <currency type="PYG"> + <displayName>guarani</displayName> + </currency> + <currency type="QAR"> + <displayName>rial du Qatar</displayName> + </currency> + <currency type="RHD"> + <displayName references="RP2">dollar rhodésien</displayName> + </currency> + <currency type="ROL"> + <displayName references="RP9">ancien leu roumain</displayName> + <displayName references="RP9" alt="proposed-u148-1" draft="unconfirmed">ancien leu</displayName> + </currency> + <currency type="RON"> + <displayName references="RP9">nouveau leu roumain</displayName> + <displayName references="RP9" alt="proposed-u148-1" draft="unconfirmed">nouveau leu</displayName> + </currency> + <currency type="RUB"> + <displayName>rouble</displayName> + </currency> + <currency type="RUR"> + <displayName>rouble de Russie (1991-1998)</displayName> + </currency> + <currency type="RWF"> + <displayName references="RP9">franc rwandais</displayName> + </currency> + <currency type="SAR"> + <displayName references="RP2">rial saoudien</displayName> + </currency> + <currency type="SBD"> + <displayName references="RP9">dollar des Îles Salomon</displayName> + </currency> + <currency type="SCR"> + <displayName>roupie des Seychelles</displayName> + </currency> + <currency type="SDD"> + <displayName>dinar soudanais</displayName> + </currency> + <currency type="SDP"> + <displayName>livre soudanaise</displayName> + </currency> + <currency type="SEK"> + <displayName>couronne suédoise</displayName> + </currency> + <currency type="SGD"> + <displayName>dollar de Singapour</displayName> + </currency> + <currency type="SHP"> + <displayName>livre de Sainte-Hélène</displayName> + </currency> + <currency type="SIT"> + <displayName references="RP8">tolar</displayName> + </currency> + <currency type="SKK"> + <displayName>couronne slovaque</displayName> + </currency> + <currency type="SLL"> + <displayName>léone</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">leone</displayName> + </currency> + <currency type="SOS"> + <displayName>shilling de Somalie</displayName> + </currency> + <currency type="SRD"> + <displayName references="RP9">dollar surinamais</displayName> + </currency> + <currency type="SRG"> + <displayName>florin du Surinam</displayName> + </currency> + <currency type="STD"> + <displayName>dobra</displayName> + </currency> + <currency type="SUR"> + <displayName>rouble de C.E.I.</displayName> + </currency> + <currency type="SVC"> + <displayName references="RP9">colon salvadorien</displayName> + </currency> + <currency type="SYP"> + <displayName>livre syrienne</displayName> + </currency> + <currency type="SZL"> + <displayName>lilangeni</displayName> + </currency> + <currency type="THB"> + <displayName>baht</displayName> + </currency> + <currency type="TJR"> + <displayName>rouble du Tadjikistan</displayName> + <displayName references="RP2" alt="proposed-u169-1" draft="provisional">rouble tadjik</displayName> + </currency> + <currency type="TJS"> + <displayName>somoni du Tadjikistan</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">somoni tadjik</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">somoni</displayName> + </currency> + <currency type="TMM"> + <displayName>Turkmenistan Manat</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">manat turkmène</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">manat</displayName> + </currency> + <currency type="TND"> + <displayName>dinar tunisien</displayName> + </currency> + <currency type="TOP"> + <displayName>paʻanga</displayName> + </currency> + <currency type="TPE"> + <displayName>escudo de Timor</displayName> + </currency> + <currency type="TRL"> + <displayName>livre turque</displayName> + <symbol>TL</symbol> + </currency> + <currency type="TRY"> + <displayName references="RP9">nouvelle livre turque</displayName> + </currency> + <currency type="TTD"> + <displayName>dollar de la Trinité</displayName> + <displayName references="RP9" alt="proposed-u169-1" draft="provisional">dollar de Trinité-et-Tobago</displayName> + </currency> + <currency type="TWD"> + <displayName>dollar taïwanais</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">nouveau dollar taïwanais</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">nouveau dollar de Taïwan</displayName> + </currency> + <currency type="TZS"> + <displayName>shilling de Tanzanie</displayName> + </currency> + <currency type="UAH"> + <displayName>hryvnia</displayName> + </currency> + <currency type="UAK"> + <displayName>karbovanetz</displayName> + </currency> + <currency type="UGS"> + <displayName>shilling ougandais (1966-1987)</displayName> + </currency> + <currency type="UGX"> + <displayName>shilling ougandais</displayName> + <symbol>U Sh</symbol> + </currency> + <currency type="USD"> + <displayName>dollar des États-Unis</displayName> + </currency> + <currency type="USN"> + <displayName>dollar des Etats-Unis (jour suivant)</displayName> + </currency> + <currency type="USS"> + <displayName>dollar des Etats-Unis (jour même)</displayName> + </currency> + <currency type="UYP"> + <displayName>peso uruguayen (1975-1993)</displayName> + </currency> + <currency type="UYU"> + <displayName>peso uruguayen</displayName> + <symbol>Ur$</symbol> + </currency> + <currency type="UZS"> + <displayName>sum</displayName> + </currency> + <currency type="VEB"> + <displayName>bolivar</displayName> + </currency> + <currency type="VND"> + <displayName>dong</displayName> + </currency> + <currency type="VUV"> + <displayName>vatu</displayName> + </currency> + <currency type="WST"> + <displayName>tala</displayName> + </currency> + <currency type="XAF"> + <displayName>franc CFA (BEAC)</displayName> + </currency> + <currency type="XAG"> + <displayName references="RP8">argent</displayName> + </currency> + <currency type="XAU"> + <displayName>or</displayName> + </currency> + <currency type="XBA"> + <displayName references="RP8">unité européenne composée</displayName> + </currency> + <currency type="XBB"> + <displayName>unité monétaire européenne</displayName> + </currency> + <currency type="XBC"> + <displayName>unité de compte européenne (XBC)</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">unité de compte 9</displayName> + </currency> + <currency type="XBD"> + <displayName>unité de compte européenne (XBD)</displayName> + <displayName references="RP8" alt="proposed-u169-1" draft="provisional">unité de compte 17</displayName> + </currency> + <currency type="XCD"> + <displayName references="RP8">dollar des Caraïbes orientales</displayName> + </currency> + <currency type="XDR"> + <displayName references="RP8">droit de tirage spécial</displayName> + </currency> + <currency type="XEU"> + <displayName>unité de compte européenne (ECU)</displayName> + </currency> + <currency type="XFO"> + <displayName>franc or</displayName> + </currency> + <currency type="XFU"> + <displayName>franc UIC</displayName> + </currency> + <currency type="XOF"> + <displayName>franc CFA (BCEAO)</displayName> + </currency> + <currency type="XPD"> + <displayName references="RP8">palladium</displayName> + </currency> + <currency type="XPF"> + <displayName>franc CFP</displayName> + </currency> + <currency type="XPT"> + <displayName>platine</displayName> + </currency> + <currency type="XRE"> + <displayName references="RP2">type de fonds RINET</displayName> + </currency> + <currency type="YDD"> + <displayName>dinar du Yémen</displayName> + </currency> + <currency type="YER"> + <displayName>riyal du Yémen</displayName> + </currency> + <currency type="YUD"> + <displayName>nouveau dinar yougoslave</displayName> + </currency> + <currency type="YUM"> + <displayName>dinar yougoslave Noviy</displayName> + </currency> + <currency type="YUN"> + <displayName>dinar yougoslave convertible</displayName> + </currency> + <currency type="ZAL"> + <displayName>rand sud-africain (financier)</displayName> + </currency> + <currency type="ZAR"> + <displayName>rand</displayName> + </currency> + <currency type="ZMK"> + <displayName>kwacha</displayName> + <displayName alt="proposed-u148-1" draft="unconfirmed">kwacha zambien</displayName> + <displayName references="RP2" alt="proposed-u169-1" draft="provisional">kwacha de Zambie</displayName> + </currency> + <currency type="ZRN"> + <displayName>nouveau zaïre</displayName> + </currency> + <currency type="ZRZ"> + <displayName>zaïre</displayName> + </currency> + <currency type="ZWD"> + <displayName>dollar du Zimbabwe</displayName> + <symbol>Z$</symbol> + </currency> + </currencies> + </numbers> + <posix> + <messages> + <yesstr>oui:o</yesstr> + <nostr>non:n</nostr> + </messages> + </posix> + <references> + <reference type="RP1" uri="http://www.loc.gov/standards/iso639-2/englangn.html">ISO 639.2 Standard</reference> + <reference type="RP1" alt="proposed-u148-1" draft="unconfirmed">ISO 639.2 - Codes pour la représentation des noms de langues</reference> + <reference type="RP10" uri="http://fr.wikipedia.org/wiki/Codes_des_monnaies">Codes des monnaies (ISO 4217) - Wikipedia</reference> + <reference type="RP11" uri="http://atlas.gc.ca/site/francais/maps/reference/national/timezones/map.pdf">Canadian Timezones</reference> + <reference type="RP11" alt="proposed-u148-1" draft="unconfirmed">Fuseaux horaires canadiens (sur atlas.gc.ca)</reference> + <reference type="RP12" uri="http://meta.wikimedia.org/wiki/List_of_Wikipedias">List of Wikipedias on Meta (Wikimedia.org)</reference> + <reference type="RP13" uri="http://www.tlfi.fr/">Le Trésor de la langue française informatisé (CDROM)</reference> + <reference type="RP2" uri="http://www.google.fr">Results of Google searches</reference> + <reference type="RP2" alt="proposed-u148-1" draft="unconfirmed">Résultats des recherches sur Google (édition française)</reference> + <reference type="RP3" uri="http://fr.wikipedia.org/wiki/Accueil">Entries/articles on Wikipedia (French version)</reference> + <reference type="RP3" alt="proposed-u148-2" draft="unconfirmed">Articles de Wikipédia (édition francophone)</reference> + <reference type="RP4" uri="CD-Rom">Le Robert & Collins (bilingual dictionary French-English)</reference> + <reference type="RP5" uri="http://www.unicode.org/iso15924/iso15924-fr.html">ISO 15924 Strandard for Scripts names</reference> + <reference type="RP5" alt="proposed-u148-1" draft="unconfirmed">ISO 15924 - Liste alphabétique des noms d’écriture en français</reference> + <reference type="RP6" uri="http://www.iso.org/iso/fr/prods-services/iso3166ma/02iso-3166-code-lists/list-fr1.html">ISO 3166 Standard for Territories</reference> + <reference type="RP6" alt="proposed-u148-1" draft="unconfirmed">ISO 3166 - Listes de codes et noms de pays (French country names and code elements)</reference> + <reference type="RP7" uri="http://fr.wikipedia.org/wiki/ISO_3166-1">ISO 3166-1 Standard for Territories (from Wikipedia)</reference> + <reference type="RP7" alt="proposed-u148-1" draft="unconfirmed">ISO 3166-1 (article de Wikipédia, édition francophone)</reference> + <reference type="RP8" uri="http://www.iso.org/iso/fr/prods-services/popstds/currencycodeslist.html">ISO 4217 Standard for Currencies</reference> + <reference type="RP8" alt="proposed-u148-1" draft="unconfirmed">ISO 4217 - Liste des codes des monnaies et des types de fonds</reference> + <reference type="RP9" uri="http://www.geocities.com/jusjih/iso3166-fr.html">ISO 4217 Standard for Currencies (from Geocities)</reference> + </references> +</ldml> +<!-- Old Comments. See root.xml for more info. +URL: http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/fr.txt?only_with_tag=final-update-LDML + +AH = Anno Hijri (in root) +http://www.iso.org/iso/en/prods-services/iso3166ma/index.html + KP { "Cor\u00E9e du Nord" } // alternate name { "Cor\u00E9e, R\u00E9publique populaire d\u00E9mocratique de" } + KR { "Cor\u00E9e du Sud" } // alternate name { "Cor\u00E9e, R\u00E9publique de" } +MD { "Moldavie" } +TL { "Timor" } +DIF { "DIF", "franc de Djibouti" } ( unconfirmed ) +XPS { "XPS", "livre sterling" } +XSS { "XSS", "shilling sterling" } +http://lcweb.loc.gov/standards/iso639-2/frenchlangn.html +Fallback { "en" } + Qaai { "h\u00E9rit\u00E9" } // PUA +Zyyy { "commun" } // This could be "\u00E9criture ind\u00E9termin\u00E9e" + +Comments without bases + + Kiribati - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Enderbury"] + Marshall Islands - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Kwajalein"] + Mali - was on: /ldml/dates/timeZoneNames/zone[@type="Africa/Bamako"] + Ecuador - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Galapagos"] + Indonesia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Jakarta"] + Russia - was on: /ldml/dates/timeZoneNames/zone[@type="Europe/Kaliningrad"] + United States - was on: /ldml/dates/timeZoneNames/zone[@type="America/Adak"] + Brazil - was on: /ldml/dates/timeZoneNames/zone[@type="America/Eirunepe"] + Antarctica - was on: /ldml/dates/timeZoneNames/zone[@type="Antarctica/Rothera"] + Malaysia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Kuala_Lumpur"] + Canada - was on: /ldml/dates/timeZoneNames/zone[@type="America/Dawson"] + Micronesia - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Yap"] + Argentina - was on: /ldml/dates/timeZoneNames/zone[@type="America/Argentina/Rio_Gallegos"] + United States Minor Outlying Islands - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Midway"] + Mexico - was on: /ldml/dates/timeZoneNames/zone[@type="America/Tijuana"] + Democratic Republic of the Congo - was on: /ldml/dates/timeZoneNames/zone[@type="Africa/Kinshasa"] + United Kingdom - was on: /ldml/dates/timeZoneNames/zone[@type="Europe/Belfast"] + French Polynesia - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Tahiti"] + New Zealand - was on: /ldml/dates/timeZoneNames/zone[@type="Pacific/Chatham"] + Greenland - was on: /ldml/dates/timeZoneNames/zone[@type="America/Thule"] + Mongolia - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Hovd"] + Uzbekistan - was on: /ldml/dates/timeZoneNames/zone[@type="Asia/Samarkand"] + Svalbard and Jan Mayen - was on: /ldml/dates/timeZoneNames/zone[@type="Atlantic/Jan_Mayen"] + Australia - was on: /ldml/dates/timeZoneNames/zone[@type="Australia/Perth"] +--> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/fr_FR.xml b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/fr_FR.xml new file mode 100644 index 0000000000..3500f24e88 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/locale/fr_FR.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/data/dtd/ldml.dtd"> +<ldml> + <identity> + <version number="$Revision: 1.37 $"/> + <generation date="$Date: 2006/12/08 16:29:37 $"/> + <language type="fr"/> + <territory type="FR"/> + </identity> +</ldml> + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/help-contents.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/help-contents.png Binary files differnew file mode 100644 index 0000000000..467f3cf1fa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/help-contents.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/help-faq.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/help-faq.png Binary files differnew file mode 100644 index 0000000000..c767aaffaa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/help-faq.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/system-search.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/system-search.png Binary files differnew file mode 100644 index 0000000000..617779324f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/actions/system-search.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-alarm.png Binary files differnew file mode 100644 index 0000000000..2c38dd978c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-archiver.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-archiver.png Binary files differnew file mode 100644 index 0000000000..9b1bc8b778 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-archiver.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-character-map.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-character-map.png Binary files differnew file mode 100644 index 0000000000..50744c1997 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-character-map.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-clipboard.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-clipboard.png Binary files differnew file mode 100644 index 0000000000..879530d969 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-clipboard.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-clock.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-clock.png Binary files differnew file mode 100644 index 0000000000..a4794d8a74 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-clock.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-date.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-date.png Binary files differnew file mode 100644 index 0000000000..532d4d3643 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-date.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-dictionary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-dictionary.png Binary files differnew file mode 100644 index 0000000000..60a698d36c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-dictionary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-disk-usage.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-disk-usage.png Binary files differnew file mode 100644 index 0000000000..0835177762 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-disk-usage.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-floppy.png Binary files differnew file mode 100644 index 0000000000..f9ca3ea94f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-magnifier.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-magnifier.png Binary files differnew file mode 100644 index 0000000000..75c7c7245b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-magnifier.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-notes.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-notes.png Binary files differnew file mode 100644 index 0000000000..31e01eb9be --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-notes.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-terminal.png Binary files differnew file mode 100644 index 0000000000..0741bed19c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-text-editor.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-text-editor.png Binary files differnew file mode 100644 index 0000000000..3ccd9054e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-text-editor.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-time-tracking.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-time-tracking.png Binary files differnew file mode 100644 index 0000000000..4efad1b700 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-time-tracking.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-timer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-timer.png Binary files differnew file mode 100644 index 0000000000..9c0ac3ac28 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-timer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-tip.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-tip.png Binary files differnew file mode 100644 index 0000000000..24c527069e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/accessories-tip.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/graphics-image-viewer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/graphics-image-viewer.png Binary files differnew file mode 100644 index 0000000000..86a385a461 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/graphics-image-viewer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/graphics-snapshot.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/graphics-snapshot.png Binary files differnew file mode 100644 index 0000000000..4f19721de4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/graphics-snapshot.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/help-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/help-browser.png Binary files differnew file mode 100644 index 0000000000..c767aaffaa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/help-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-download-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-download-manager.png Binary files differnew file mode 100644 index 0000000000..b3fbdec3d1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-download-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-email-client.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-email-client.png Binary files differnew file mode 100644 index 0000000000..7bca49ae0e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-email-client.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-web-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-web-browser.png Binary files differnew file mode 100644 index 0000000000..99d1fed73a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/internet-web-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/multimedia-movie-player.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/multimedia-movie-player.png Binary files differnew file mode 100644 index 0000000000..7db093afb7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/multimedia-movie-player.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/multimedia-volume-control.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/multimedia-volume-control.png Binary files differnew file mode 100644 index 0000000000..c0992b75aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/multimedia-volume-control.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-adobe-reader.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-adobe-reader.png Binary files differnew file mode 100644 index 0000000000..f67c5d67fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-adobe-reader.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-organizer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-organizer.png Binary files differnew file mode 100644 index 0000000000..36de4af7e2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-organizer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-pim.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-pim.png Binary files differnew file mode 100644 index 0000000000..b74f354ebd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/office-pim.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-accessibility.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-accessibility.png Binary files differnew file mode 100644 index 0000000000..1ea686899e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-accessibility.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-font.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-font.png Binary files differnew file mode 100644 index 0000000000..efbd423036 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-font.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-multimedia.png Binary files differnew file mode 100644 index 0000000000..564d1f8440 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-theme.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-theme.png Binary files differnew file mode 100644 index 0000000000..934a41b925 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-theme.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-wallpaper.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-wallpaper.png Binary files differnew file mode 100644 index 0000000000..a4a92b0056 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/preferences-desktop-wallpaper.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-file-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-file-manager.png Binary files differnew file mode 100644 index 0000000000..67ca19f9cb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-file-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-software-update.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-software-update.png Binary files differnew file mode 100644 index 0000000000..a5aa32968b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-software-update.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-users.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-users.png Binary files differnew file mode 100644 index 0000000000..6ed54d43a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/system-users.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/utilities-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/utilities-terminal.png Binary files differnew file mode 100644 index 0000000000..a8ff70ea57 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/apps/utilities-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-games.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-games.png Binary files differnew file mode 100644 index 0000000000..206ef5b0d1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-games.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-graphics.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-graphics.png Binary files differnew file mode 100644 index 0000000000..516e3d51f5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-graphics.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-internet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-internet.png Binary files differnew file mode 100644 index 0000000000..99d1fed73a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-internet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-multimedia.png Binary files differnew file mode 100644 index 0000000000..3d30da26a0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-office.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-office.png Binary files differnew file mode 100644 index 0000000000..90d2d8fbd5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-office.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-utilities.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-utilities.png Binary files differnew file mode 100644 index 0000000000..097983ebbc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications-utilities.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications.png Binary files differnew file mode 100644 index 0000000000..9ded07f289 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/applications.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-desktop-personal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-desktop-personal.png Binary files differnew file mode 100644 index 0000000000..197021b62b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-desktop-personal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-desktop.png Binary files differnew file mode 100644 index 0000000000..fc0da13ab8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-system-network.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-system-network.png Binary files differnew file mode 100644 index 0000000000..4961ac2750 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences-system-network.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences.png Binary files differnew file mode 100644 index 0000000000..8924ca1eb6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/system-help.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/system-help.png Binary files differnew file mode 100644 index 0000000000..467f3cf1fa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/categories/system-help.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/camera-photo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/camera-photo.png Binary files differnew file mode 100644 index 0000000000..b98eb0b83b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/camera-photo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/camera-video.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/camera-video.png Binary files differnew file mode 100644 index 0000000000..b98eb0b83b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/camera-video.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/computer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/computer.png Binary files differnew file mode 100644 index 0000000000..a6736baeef --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/computer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-harddisk.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-harddisk.png Binary files differnew file mode 100644 index 0000000000..1fb21b4f0e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-harddisk.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-optical.png Binary files differnew file mode 100644 index 0000000000..018a47e1f3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-removable-media.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-removable-media.png Binary files differnew file mode 100644 index 0000000000..bdc54a7d22 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/drive-removable-media.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/input-mouse.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/input-mouse.png Binary files differnew file mode 100644 index 0000000000..2708fbc556 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/input-mouse.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-flash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-flash.png Binary files differnew file mode 100644 index 0000000000..bdc54a7d22 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-flash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-floppy.png Binary files differnew file mode 100644 index 0000000000..3918232445 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-optical.png Binary files differnew file mode 100644 index 0000000000..caa027bd32 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/media-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/network-wired.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/network-wired.png Binary files differnew file mode 100644 index 0000000000..5bdc3b1349 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/network-wired.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/network-wireless.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/network-wireless.png Binary files differnew file mode 100644 index 0000000000..5bdc3b1349 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/network-wireless.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/printer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/printer.png Binary files differnew file mode 100644 index 0000000000..53f5c0249c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/printer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/scanner.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/scanner.png Binary files differnew file mode 100644 index 0000000000..983299757e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/scanner.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/usb.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/usb.png Binary files differnew file mode 100644 index 0000000000..687ff5a0b6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/usb.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/video-display.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/video-display.png Binary files differnew file mode 100644 index 0000000000..710a947999 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/devices/video-display.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-pdf.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-pdf.png Binary files differnew file mode 100644 index 0000000000..6fcc0cfe2a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-pdf.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-quicktime.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-quicktime.png Binary files differnew file mode 100644 index 0000000000..619ecc3433 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-quicktime.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-x-executable.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-x-executable.png Binary files differnew file mode 100644 index 0000000000..02cea51144 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/application-x-executable.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/audio-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/audio-x-generic.png Binary files differnew file mode 100644 index 0000000000..2a567b1c0e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/audio-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-encrypted.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-encrypted.png Binary files differnew file mode 100644 index 0000000000..07d0603270 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-encrypted.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-generic.png Binary files differnew file mode 100644 index 0000000000..eca5fc4b07 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-locked.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-locked.png Binary files differnew file mode 100644 index 0000000000..d9e515ebb5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-locked.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-temporary.png Binary files differnew file mode 100644 index 0000000000..2af1626932 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/empty-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/font-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/font-x-generic.png Binary files differnew file mode 100644 index 0000000000..260ed693bd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/font-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/image-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/image-x-generic.png Binary files differnew file mode 100644 index 0000000000..120072d471 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/image-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/package-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/package-x-generic.png Binary files differnew file mode 100644 index 0000000000..c31476e13f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/package-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-ascii.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-ascii.png Binary files differnew file mode 100644 index 0000000000..66e2f9ca53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-ascii.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-html.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-html.png Binary files differnew file mode 100644 index 0000000000..bec74798d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-html.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-generic-template.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-generic-template.png Binary files differnew file mode 100644 index 0000000000..a9db744b61 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-generic-template.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-generic.png Binary files differnew file mode 100644 index 0000000000..a9db744b61 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-script.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-script.png Binary files differnew file mode 100644 index 0000000000..e635af7fbf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/text-x-script.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/unknown-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/unknown-x-temporary.png Binary files differnew file mode 100644 index 0000000000..eca5fc4b07 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/unknown-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/video-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/video-x-generic.png Binary files differnew file mode 100644 index 0000000000..208bea594f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/video-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/x-office-calendar.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/x-office-calendar.png Binary files differnew file mode 100644 index 0000000000..fcfb27cee6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/x-office-calendar.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/x-office-spreadsheet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/x-office-spreadsheet.png Binary files differnew file mode 100644 index 0000000000..771744a561 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/mimetypes/x-office-spreadsheet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/archive-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/archive-folder.png Binary files differnew file mode 100644 index 0000000000..28b69e5308 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/archive-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/document-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/document-folder.png Binary files differnew file mode 100644 index 0000000000..f124c84914 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/document-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/folder-remote.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/folder-remote.png Binary files differnew file mode 100644 index 0000000000..ce82b77d01 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/folder-remote.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/folder.png Binary files differnew file mode 100644 index 0000000000..9b62a3be5d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/html-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/html-folder.png Binary files differnew file mode 100644 index 0000000000..44e19245e3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/html-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/network-server.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/network-server.png Binary files differnew file mode 100644 index 0000000000..4961ac2750 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/network-server.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/network-workgroup.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/network-workgroup.png Binary files differnew file mode 100644 index 0000000000..b0eec5d6b9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/network-workgroup.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/services.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/services.png Binary files differnew file mode 100644 index 0000000000..799ebb9bb5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/services.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-desktop.png Binary files differnew file mode 100644 index 0000000000..91d7bd53a7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-home.png Binary files differnew file mode 100644 index 0000000000..d7720a20e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash-empty.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash-empty.png Binary files differnew file mode 100644 index 0000000000..7c5085f15c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash-empty.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash-full.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash-full.png Binary files differnew file mode 100644 index 0000000000..a0545dc470 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash-full.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash.png Binary files differnew file mode 100644 index 0000000000..7c5085f15c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/user-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/www.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/www.png Binary files differnew file mode 100644 index 0000000000..134261b1f9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/places/www.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/status/dialog-error.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/status/dialog-error.png Binary files differnew file mode 100644 index 0000000000..d0152daaa8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/status/dialog-error.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/status/dialog-password.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/status/dialog-password.png Binary files differnew file mode 100644 index 0000000000..ffe9b375b2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/128/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/alarm.png Binary files differnew file mode 100644 index 0000000000..f81357ead0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/application-exit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/application-exit.png Binary files differnew file mode 100644 index 0000000000..63232417a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/application-exit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/decrypt.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/decrypt.png Binary files differnew file mode 100644 index 0000000000..42dd93e266 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/decrypt.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-apply.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-apply.png Binary files differnew file mode 100644 index 0000000000..5b0f6a6174 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-apply.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-cancel.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-cancel.png Binary files differnew file mode 100644 index 0000000000..a432b492c4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-cancel.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-finish.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-finish.png Binary files differnew file mode 100644 index 0000000000..d9947ece34 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-finish.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-no.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-no.png Binary files differnew file mode 100644 index 0000000000..37a7c74977 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-no.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-ok.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-ok.png Binary files differnew file mode 100644 index 0000000000..5b0f6a6174 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/dialog-ok.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-close.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-close.png Binary files differnew file mode 100644 index 0000000000..3bf502940e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-close.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-export.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-export.png Binary files differnew file mode 100644 index 0000000000..c646254cd5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-export.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-new.png Binary files differnew file mode 100644 index 0000000000..f38d02ee59 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-open.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-open.png Binary files differnew file mode 100644 index 0000000000..2d8e3ba2ba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-open.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-print-quick.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-print-quick.png Binary files differnew file mode 100644 index 0000000000..6395934a0c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-print-quick.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-print.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-print.png Binary files differnew file mode 100644 index 0000000000..3a87543224 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-print.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-revert.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-revert.png Binary files differnew file mode 100644 index 0000000000..f866ba15e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-revert.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save-all.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save-all.png Binary files differnew file mode 100644 index 0000000000..9d47a67bfb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save-all.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save-as.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save-as.png Binary files differnew file mode 100644 index 0000000000..71602bc361 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save-as.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save.png Binary files differnew file mode 100644 index 0000000000..fd0048ded9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/document-save.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-add.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-add.png Binary files differnew file mode 100644 index 0000000000..e9485082ea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-add.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-copy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-copy.png Binary files differnew file mode 100644 index 0000000000..b7c938a999 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-copy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-cut.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-cut.png Binary files differnew file mode 100644 index 0000000000..49f359147a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-cut.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-delete.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-delete.png Binary files differnew file mode 100644 index 0000000000..d33c344545 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-delete.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-find.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-find.png Binary files differnew file mode 100644 index 0000000000..e912de2885 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-find.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-paste.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-paste.png Binary files differnew file mode 100644 index 0000000000..4c43ddfd76 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-paste.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-redo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-redo.png Binary files differnew file mode 100644 index 0000000000..f1e45cff93 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-redo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-trash.png Binary files differnew file mode 100644 index 0000000000..b0bde007ed --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-undo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-undo.png Binary files differnew file mode 100644 index 0000000000..6129fa0c77 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit-undo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit.png Binary files differnew file mode 100644 index 0000000000..423187c2c3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/edit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/encrypt.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/encrypt.png Binary files differnew file mode 100644 index 0000000000..6df8ea6d8a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/encrypt.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/favorite-add.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/favorite-add.png Binary files differnew file mode 100644 index 0000000000..452da8d18a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/favorite-add.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/folder-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/folder-new.png Binary files differnew file mode 100644 index 0000000000..8109ed82a7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/folder-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/format-color.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/format-color.png Binary files differnew file mode 100644 index 0000000000..bdc03f7cb6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/format-color.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-bottom.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-bottom.png Binary files differnew file mode 100644 index 0000000000..a762db370f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-bottom.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-down.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-down.png Binary files differnew file mode 100644 index 0000000000..f3bc4cd093 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-down.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-home.png Binary files differnew file mode 100644 index 0000000000..a93612f174 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-left.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-left.png Binary files differnew file mode 100644 index 0000000000..6992aa7edc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-left.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-next.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-next.png Binary files differnew file mode 100644 index 0000000000..3e9562c4a7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-next.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-previous.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-previous.png Binary files differnew file mode 100644 index 0000000000..3fe8b178ec --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-previous.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-right.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-right.png Binary files differnew file mode 100644 index 0000000000..24a89b5434 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-right.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-top.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-top.png Binary files differnew file mode 100644 index 0000000000..3de9a44f18 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-top.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-up.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-up.png Binary files differnew file mode 100644 index 0000000000..184c118b63 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/go-up.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-about.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-about.png Binary files differnew file mode 100644 index 0000000000..28a0f9e5e6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-about.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-contents.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-contents.png Binary files differnew file mode 100644 index 0000000000..5174045dd5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-contents.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-faq.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-faq.png Binary files differnew file mode 100644 index 0000000000..096b00c4e8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/help-faq.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/history-clear.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/history-clear.png Binary files differnew file mode 100644 index 0000000000..12bf37b5fa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/history-clear.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/history.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/history.png Binary files differnew file mode 100644 index 0000000000..8d658e0de0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/history.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/identity.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/identity.png Binary files differnew file mode 100644 index 0000000000..5e51272c26 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/identity.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/mail.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/mail.png Binary files differnew file mode 100644 index 0000000000..2de442b800 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/mail.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-eject.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-eject.png Binary files differnew file mode 100644 index 0000000000..6574ac2d98 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-eject.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-pause.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-pause.png Binary files differnew file mode 100644 index 0000000000..99f43974c8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-pause.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-start.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-start.png Binary files differnew file mode 100644 index 0000000000..5ca372a5f4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-start.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-stop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-stop.png Binary files differnew file mode 100644 index 0000000000..d51735ed11 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-playback-stop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-seek-backward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-seek-backward.png Binary files differnew file mode 100644 index 0000000000..33b7979b53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-seek-backward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-seek-forward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-seek-forward.png Binary files differnew file mode 100644 index 0000000000..e0c4ba54c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-seek-forward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-skip-backward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-skip-backward.png Binary files differnew file mode 100644 index 0000000000..d8f8b1ff90 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-skip-backward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-skip-forward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-skip-forward.png Binary files differnew file mode 100644 index 0000000000..56ada0f1e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/media-skip-forward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/start.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/start.png Binary files differnew file mode 100644 index 0000000000..67f8a37692 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/start.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/stop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/stop.png Binary files differnew file mode 100644 index 0000000000..dfb80b2e58 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/stop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-lock-screen.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-lock-screen.png Binary files differnew file mode 100644 index 0000000000..ed4914afd4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-lock-screen.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-run.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-run.png Binary files differnew file mode 100644 index 0000000000..751424557e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-run.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-search.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-search.png Binary files differnew file mode 100644 index 0000000000..284a344c96 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/system-search.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/tools-check-spelling.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/tools-check-spelling.png Binary files differnew file mode 100644 index 0000000000..b044b8cfb0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/tools-check-spelling.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-column.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-column.png Binary files differnew file mode 100644 index 0000000000..083052db73 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-column.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-detailed.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-detailed.png Binary files differnew file mode 100644 index 0000000000..89feaeba45 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-detailed.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-icon.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-icon.png Binary files differnew file mode 100644 index 0000000000..be9effbbb0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-icon.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-remove.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-remove.png Binary files differnew file mode 100644 index 0000000000..2253ae8580 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-remove.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-text.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-text.png Binary files differnew file mode 100644 index 0000000000..c688d5f6f9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-text.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-tree.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-tree.png Binary files differnew file mode 100644 index 0000000000..4c23c9ab92 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-pane-tree.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-refresh.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-refresh.png Binary files differnew file mode 100644 index 0000000000..1c026d32c3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/view-refresh.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/window-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/window-new.png Binary files differnew file mode 100644 index 0000000000..74d36bda38 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/window-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-best-fit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-best-fit.png Binary files differnew file mode 100644 index 0000000000..fa590fbbed --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-best-fit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-in.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-in.png Binary files differnew file mode 100644 index 0000000000..f10b2ece78 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-in.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-original.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-original.png Binary files differnew file mode 100644 index 0000000000..41b0d869b3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-original.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-out.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-out.png Binary files differnew file mode 100644 index 0000000000..f276ad595c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom-out.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom.png Binary files differnew file mode 100644 index 0000000000..6dd1931589 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/actions/zoom.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-alarm.png Binary files differnew file mode 100644 index 0000000000..fa1751aef4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-archiver.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-archiver.png Binary files differnew file mode 100644 index 0000000000..e2b67dcba2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-archiver.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-calculator.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-calculator.png Binary files differnew file mode 100644 index 0000000000..905db5c840 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-calculator.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-character-map.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-character-map.png Binary files differnew file mode 100644 index 0000000000..726dbe1634 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-character-map.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-clipboard.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-clipboard.png Binary files differnew file mode 100644 index 0000000000..a2c0cfb105 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-clipboard.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-clock.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-clock.png Binary files differnew file mode 100644 index 0000000000..7c622a0999 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-clock.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-date.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-date.png Binary files differnew file mode 100644 index 0000000000..bd4b4c6c16 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-date.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-dictionary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-dictionary.png Binary files differnew file mode 100644 index 0000000000..2bfe4d8ec4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-dictionary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-disk-usage.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-disk-usage.png Binary files differnew file mode 100644 index 0000000000..18e10cd3cf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-disk-usage.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-floppy.png Binary files differnew file mode 100644 index 0000000000..f0a052434c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-magnifier.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-magnifier.png Binary files differnew file mode 100644 index 0000000000..02b3a5dc7d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-magnifier.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-notes.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-notes.png Binary files differnew file mode 100644 index 0000000000..1e27e9cae7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-notes.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-terminal.png Binary files differnew file mode 100644 index 0000000000..b1366b1f05 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-text-editor.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-text-editor.png Binary files differnew file mode 100644 index 0000000000..61fc4e9ef0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-text-editor.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-time-tracking.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-time-tracking.png Binary files differnew file mode 100644 index 0000000000..cba8248cb9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-time-tracking.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-timer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-timer.png Binary files differnew file mode 100644 index 0000000000..0323fb11d0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-timer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-tip.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-tip.png Binary files differnew file mode 100644 index 0000000000..4d63112132 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/accessories-tip.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/graphics-image-viewer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/graphics-image-viewer.png Binary files differnew file mode 100644 index 0000000000..1a5d577431 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/graphics-image-viewer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/graphics-snapshot.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/graphics-snapshot.png Binary files differnew file mode 100644 index 0000000000..35394c45b9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/graphics-snapshot.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/help-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/help-browser.png Binary files differnew file mode 100644 index 0000000000..096b00c4e8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/help-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-download-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-download-manager.png Binary files differnew file mode 100644 index 0000000000..0bd2ab262f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-download-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-email-client.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-email-client.png Binary files differnew file mode 100644 index 0000000000..694a8e068b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-email-client.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-web-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-web-browser.png Binary files differnew file mode 100644 index 0000000000..03ef9a5700 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/internet-web-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/multimedia-movie-player.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/multimedia-movie-player.png Binary files differnew file mode 100644 index 0000000000..e616061dc9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/multimedia-movie-player.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/multimedia-volume-control.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/multimedia-volume-control.png Binary files differnew file mode 100644 index 0000000000..5e84e63be7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/multimedia-volume-control.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-adobe-reader.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-adobe-reader.png Binary files differnew file mode 100644 index 0000000000..b50f4a7e15 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-adobe-reader.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-organizer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-organizer.png Binary files differnew file mode 100644 index 0000000000..6c86544de8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-organizer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-pim.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-pim.png Binary files differnew file mode 100644 index 0000000000..e4c5cdc0ee --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/office-pim.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-accessibility.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-accessibility.png Binary files differnew file mode 100644 index 0000000000..c6a670be53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-accessibility.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-font.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-font.png Binary files differnew file mode 100644 index 0000000000..f45dae6b48 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-font.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-multimedia.png Binary files differnew file mode 100644 index 0000000000..740cbd38eb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-theme.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-theme.png Binary files differnew file mode 100644 index 0000000000..ced431a407 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-theme.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-wallpaper.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-wallpaper.png Binary files differnew file mode 100644 index 0000000000..14ea3e47fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences-desktop-wallpaper.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences.png Binary files differnew file mode 100644 index 0000000000..a4a3834abc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-file-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-file-manager.png Binary files differnew file mode 100644 index 0000000000..df01df2ba7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-file-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-software-update.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-software-update.png Binary files differnew file mode 100644 index 0000000000..fdb3644c6c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-software-update.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-users.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-users.png Binary files differnew file mode 100644 index 0000000000..8e649a80b1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/system-users.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/utilities-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/utilities-terminal.png Binary files differnew file mode 100644 index 0000000000..75ce701a4f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/apps/utilities-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-development.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-development.png Binary files differnew file mode 100644 index 0000000000..df1fb742e3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-development.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-games.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-games.png Binary files differnew file mode 100644 index 0000000000..4b78616eaa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-games.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-graphics.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-graphics.png Binary files differnew file mode 100644 index 0000000000..2382100270 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-graphics.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-internet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-internet.png Binary files differnew file mode 100644 index 0000000000..03ef9a5700 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-internet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-multimedia.png Binary files differnew file mode 100644 index 0000000000..0bea4d8cfb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-office.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-office.png Binary files differnew file mode 100644 index 0000000000..8a61aa0814 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-office.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-system.png Binary files differnew file mode 100644 index 0000000000..7a750b9e46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-utilities.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-utilities.png Binary files differnew file mode 100644 index 0000000000..0ec53c9ff4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications-utilities.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications.png Binary files differnew file mode 100644 index 0000000000..ba4fb07212 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/applications.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-desktop-personal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-desktop-personal.png Binary files differnew file mode 100644 index 0000000000..7d7da74d28 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-desktop-personal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-desktop.png Binary files differnew file mode 100644 index 0000000000..ededc0bd34 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-system-network.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-system-network.png Binary files differnew file mode 100644 index 0000000000..dd5ba69e52 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-system-network.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-system.png Binary files differnew file mode 100644 index 0000000000..7a750b9e46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences.png Binary files differnew file mode 100644 index 0000000000..8d8bd6fed0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/system-help.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/system-help.png Binary files differnew file mode 100644 index 0000000000..5174045dd5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/categories/system-help.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/camera-photo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/camera-photo.png Binary files differnew file mode 100644 index 0000000000..45d1436aa2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/camera-photo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/camera-video.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/camera-video.png Binary files differnew file mode 100644 index 0000000000..45d1436aa2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/camera-video.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/computer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/computer.png Binary files differnew file mode 100644 index 0000000000..0a929f0383 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/computer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-harddisk.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-harddisk.png Binary files differnew file mode 100644 index 0000000000..f570c51779 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-harddisk.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-optical.png Binary files differnew file mode 100644 index 0000000000..49bea60db4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-removable-media.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-removable-media.png Binary files differnew file mode 100644 index 0000000000..eaafc2b6b3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/drive-removable-media.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/input-mouse.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/input-mouse.png Binary files differnew file mode 100644 index 0000000000..e8d2b45d05 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/input-mouse.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-flash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-flash.png Binary files differnew file mode 100644 index 0000000000..eaafc2b6b3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-flash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-floppy.png Binary files differnew file mode 100644 index 0000000000..68a4eabba7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-optical.png Binary files differnew file mode 100644 index 0000000000..e2e3f679af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/media-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/network-wired.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/network-wired.png Binary files differnew file mode 100644 index 0000000000..f6a8dd54a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/network-wired.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/network-wireless.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/network-wireless.png Binary files differnew file mode 100644 index 0000000000..f6a8dd54a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/network-wireless.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/printer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/printer.png Binary files differnew file mode 100644 index 0000000000..e22118c021 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/printer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/scanner.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/scanner.png Binary files differnew file mode 100644 index 0000000000..fa0f83dd7b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/scanner.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/usb.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/usb.png Binary files differnew file mode 100644 index 0000000000..c778199a19 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/usb.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/video-display.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/video-display.png Binary files differnew file mode 100644 index 0000000000..ffcc8353f1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/devices/video-display.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-pdf.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-pdf.png Binary files differnew file mode 100644 index 0000000000..f4863cb6c4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-pdf.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-quicktime.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-quicktime.png Binary files differnew file mode 100644 index 0000000000..f0bc57a03e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-quicktime.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-x-executable.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-x-executable.png Binary files differnew file mode 100644 index 0000000000..3f4def6c62 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/application-x-executable.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/audio-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/audio-x-generic.png Binary files differnew file mode 100644 index 0000000000..7f4d9733be --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/audio-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-encrypted.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-encrypted.png Binary files differnew file mode 100644 index 0000000000..80357125c2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-encrypted.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-generic.png Binary files differnew file mode 100644 index 0000000000..55ace49b68 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-locked.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-locked.png Binary files differnew file mode 100644 index 0000000000..24a8599a9e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-locked.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-temporary.png Binary files differnew file mode 100644 index 0000000000..fea246961c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/empty-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/font-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/font-x-generic.png Binary files differnew file mode 100644 index 0000000000..3f6f3ac411 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/font-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/image-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/image-x-generic.png Binary files differnew file mode 100644 index 0000000000..246a66cad8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/image-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/package-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/package-x-generic.png Binary files differnew file mode 100644 index 0000000000..4a9fe1737a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/package-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-ascii.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-ascii.png Binary files differnew file mode 100644 index 0000000000..8e771b7fda --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-ascii.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-html.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-html.png Binary files differnew file mode 100644 index 0000000000..f56567f112 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-html.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-generic-template.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-generic-template.png Binary files differnew file mode 100644 index 0000000000..3c3b4b00cc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-generic-template.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-generic.png Binary files differnew file mode 100644 index 0000000000..3c3b4b00cc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-script.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-script.png Binary files differnew file mode 100644 index 0000000000..a2b8d2ed71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/text-x-script.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/unknown-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/unknown-x-temporary.png Binary files differnew file mode 100644 index 0000000000..55ace49b68 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/unknown-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/video-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/video-x-generic.png Binary files differnew file mode 100644 index 0000000000..dd51e90a46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/video-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/x-office-calendar.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/x-office-calendar.png Binary files differnew file mode 100644 index 0000000000..97691466a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/x-office-calendar.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/x-office-spreadsheet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/x-office-spreadsheet.png Binary files differnew file mode 100644 index 0000000000..f7fa7b9706 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/mimetypes/x-office-spreadsheet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/archive-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/archive-folder.png Binary files differnew file mode 100644 index 0000000000..2effa3950f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/archive-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/document-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/document-folder.png Binary files differnew file mode 100644 index 0000000000..77ffd13cc2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/document-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/favorite-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/favorite-folder.png Binary files differnew file mode 100644 index 0000000000..f0dc74a34d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/favorite-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/folder-remote.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/folder-remote.png Binary files differnew file mode 100644 index 0000000000..e8370f139a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/folder-remote.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/folder.png Binary files differnew file mode 100644 index 0000000000..9232553fcd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/html-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/html-folder.png Binary files differnew file mode 100644 index 0000000000..9eab0235de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/html-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/network-server.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/network-server.png Binary files differnew file mode 100644 index 0000000000..dd5ba69e52 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/network-server.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/network-workgroup.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/network-workgroup.png Binary files differnew file mode 100644 index 0000000000..f261e77dc7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/network-workgroup.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/services.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/services.png Binary files differnew file mode 100644 index 0000000000..2a24b7e7f6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/services.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-desktop.png Binary files differnew file mode 100644 index 0000000000..291f8a4ac9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-home.png Binary files differnew file mode 100644 index 0000000000..3525b0b737 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash-empty.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash-empty.png Binary files differnew file mode 100644 index 0000000000..1e9b81069c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash-empty.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash-full.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash-full.png Binary files differnew file mode 100644 index 0000000000..aa9d7321f9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash-full.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash.png Binary files differnew file mode 100644 index 0000000000..1e9b81069c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/user-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/www.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/www.png Binary files differnew file mode 100644 index 0000000000..2d32c04d6c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/places/www.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/dialog-error.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/dialog-error.png Binary files differnew file mode 100644 index 0000000000..2997461b21 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/dialog-error.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/dialog-password.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/dialog-password.png Binary files differnew file mode 100644 index 0000000000..5656824986 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/folder-open.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/folder-open.png Binary files differnew file mode 100644 index 0000000000..2c55c5636e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/16/status/folder-open.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/alarm.png Binary files differnew file mode 100644 index 0000000000..5da3da43c9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/application-exit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/application-exit.png Binary files differnew file mode 100644 index 0000000000..78a43ef77b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/application-exit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/decrypt.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/decrypt.png Binary files differnew file mode 100644 index 0000000000..bdac7c1a52 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/decrypt.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-apply.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-apply.png Binary files differnew file mode 100644 index 0000000000..2166fdffdf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-apply.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-cancel.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-cancel.png Binary files differnew file mode 100644 index 0000000000..816e06ace8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-cancel.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-finish.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-finish.png Binary files differnew file mode 100644 index 0000000000..82f3e71799 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-finish.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-ok.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-ok.png Binary files differnew file mode 100644 index 0000000000..2166fdffdf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/dialog-ok.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-close.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-close.png Binary files differnew file mode 100644 index 0000000000..d5abac8b42 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-close.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-export.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-export.png Binary files differnew file mode 100644 index 0000000000..83ae1ad33b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-export.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-new.png Binary files differnew file mode 100644 index 0000000000..6e2700ad91 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-open.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-open.png Binary files differnew file mode 100644 index 0000000000..61c388cf2d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-open.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-print-quick.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-print-quick.png Binary files differnew file mode 100644 index 0000000000..c1a0894b2a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-print-quick.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-print.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-print.png Binary files differnew file mode 100644 index 0000000000..71831093d5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-print.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-revert.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-revert.png Binary files differnew file mode 100644 index 0000000000..1c42494357 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-revert.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save-all.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save-all.png Binary files differnew file mode 100644 index 0000000000..ceb2cbf6fc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save-all.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save-as.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save-as.png Binary files differnew file mode 100644 index 0000000000..4321ca76bd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save-as.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save.png Binary files differnew file mode 100644 index 0000000000..74b37b0b51 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/document-save.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-add.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-add.png Binary files differnew file mode 100644 index 0000000000..e2823bac78 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-add.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-copy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-copy.png Binary files differnew file mode 100644 index 0000000000..df03cf3f39 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-copy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-cut.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-cut.png Binary files differnew file mode 100644 index 0000000000..9845a4268f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-cut.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-delete.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-delete.png Binary files differnew file mode 100644 index 0000000000..51839a2f44 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-delete.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-find.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-find.png Binary files differnew file mode 100644 index 0000000000..12f7ca853e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-find.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-paste.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-paste.png Binary files differnew file mode 100644 index 0000000000..8b7c30068c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-paste.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-redo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-redo.png Binary files differnew file mode 100644 index 0000000000..7067f582e0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-redo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-trash.png Binary files differnew file mode 100644 index 0000000000..600a9a93cd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-undo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-undo.png Binary files differnew file mode 100644 index 0000000000..a1021b68bd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit-undo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit.png Binary files differnew file mode 100644 index 0000000000..de1659ef22 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/edit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/encrypt.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/encrypt.png Binary files differnew file mode 100644 index 0000000000..4b637f9e31 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/encrypt.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/favorite-add.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/favorite-add.png Binary files differnew file mode 100644 index 0000000000..1b0dbda114 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/favorite-add.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/folder-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/folder-new.png Binary files differnew file mode 100644 index 0000000000..4f61af7ae6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/folder-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/format-color.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/format-color.png Binary files differnew file mode 100644 index 0000000000..ed4ad654f2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/format-color.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-down.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-down.png Binary files differnew file mode 100644 index 0000000000..0733092bdd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-down.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-home.png Binary files differnew file mode 100644 index 0000000000..74c6933b44 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-left.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-left.png Binary files differnew file mode 100644 index 0000000000..77d0bec5ca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-left.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-next.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-next.png Binary files differnew file mode 100644 index 0000000000..96ae3a5f63 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-next.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-previous.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-previous.png Binary files differnew file mode 100644 index 0000000000..f3925962f4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-previous.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-right.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-right.png Binary files differnew file mode 100644 index 0000000000..95fc56834d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-right.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-up.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-up.png Binary files differnew file mode 100644 index 0000000000..7475f6aafc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/go-up.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/help-about.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/help-about.png Binary files differnew file mode 100644 index 0000000000..8aef08eec3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/help-about.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/help-faq.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/help-faq.png Binary files differnew file mode 100644 index 0000000000..37cdb2777e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/help-faq.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/history.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/history.png Binary files differnew file mode 100644 index 0000000000..d7b86ef2a5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/history.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/mail.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/mail.png Binary files differnew file mode 100644 index 0000000000..512378508b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/mail.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-eject.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-eject.png Binary files differnew file mode 100644 index 0000000000..5233d985d4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-eject.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-pause.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-pause.png Binary files differnew file mode 100644 index 0000000000..9669c90da0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-pause.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-start.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-start.png Binary files differnew file mode 100644 index 0000000000..b41fa2b975 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-start.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-stop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-stop.png Binary files differnew file mode 100644 index 0000000000..682c3221f2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-playback-stop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-seek-backward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-seek-backward.png Binary files differnew file mode 100644 index 0000000000..f6044ac96c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-seek-backward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-seek-forward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-seek-forward.png Binary files differnew file mode 100644 index 0000000000..f09ae8a721 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-seek-forward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-skip-backward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-skip-backward.png Binary files differnew file mode 100644 index 0000000000..5439dce60e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-skip-backward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-skip-forward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-skip-forward.png Binary files differnew file mode 100644 index 0000000000..179509c47c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/media-skip-forward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/start.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/start.png Binary files differnew file mode 100644 index 0000000000..899f02eaeb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/start.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/stop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/stop.png Binary files differnew file mode 100644 index 0000000000..da1e944263 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/stop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-lock-screen.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-lock-screen.png Binary files differnew file mode 100644 index 0000000000..7183202943 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-lock-screen.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-run.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-run.png Binary files differnew file mode 100644 index 0000000000..d108327435 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-run.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-search.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-search.png Binary files differnew file mode 100644 index 0000000000..a7bff661ef --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/system-search.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/tools-check-spelling.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/tools-check-spelling.png Binary files differnew file mode 100644 index 0000000000..45fe909a89 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/tools-check-spelling.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-column.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-column.png Binary files differnew file mode 100644 index 0000000000..b965f8d389 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-column.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-detailed.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-detailed.png Binary files differnew file mode 100644 index 0000000000..eea5649af9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-detailed.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-icon.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-icon.png Binary files differnew file mode 100644 index 0000000000..aa6dea50de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-icon.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-remove.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-remove.png Binary files differnew file mode 100644 index 0000000000..0e50c69bb3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-remove.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-text.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-text.png Binary files differnew file mode 100644 index 0000000000..c2710639fa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-text.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-tree.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-tree.png Binary files differnew file mode 100644 index 0000000000..888a879f71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-pane-tree.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-refresh.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-refresh.png Binary files differnew file mode 100644 index 0000000000..0d1ae45626 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/view-refresh.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/window-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/window-new.png Binary files differnew file mode 100644 index 0000000000..a5e148de9c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/window-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-best-fit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-best-fit.png Binary files differnew file mode 100644 index 0000000000..7d8ff858b0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-best-fit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-in.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-in.png Binary files differnew file mode 100644 index 0000000000..22c31acb17 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-in.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-original.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-original.png Binary files differnew file mode 100644 index 0000000000..ff1292fc71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-original.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-out.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-out.png Binary files differnew file mode 100644 index 0000000000..911a5c09b9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom-out.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom.png Binary files differnew file mode 100644 index 0000000000..e845f6d5ed --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/actions/zoom.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-alarm.png Binary files differnew file mode 100644 index 0000000000..8ee2055e40 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-archiver.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-archiver.png Binary files differnew file mode 100644 index 0000000000..913529777e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-archiver.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-character-map.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-character-map.png Binary files differnew file mode 100644 index 0000000000..fc1c3b43fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-character-map.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-clock.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-clock.png Binary files differnew file mode 100644 index 0000000000..885715309f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-clock.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-date.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-date.png Binary files differnew file mode 100644 index 0000000000..1b7fd5c4d3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-date.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-dictionary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-dictionary.png Binary files differnew file mode 100644 index 0000000000..4037e1291a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-dictionary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-floppy.png Binary files differnew file mode 100644 index 0000000000..fef0236863 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-terminal.png Binary files differnew file mode 100644 index 0000000000..1fde4429f3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-text-editor.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-text-editor.png Binary files differnew file mode 100644 index 0000000000..9af63810ca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-text-editor.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-time-tracking.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-time-tracking.png Binary files differnew file mode 100644 index 0000000000..e6d4f18093 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-time-tracking.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-tip.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-tip.png Binary files differnew file mode 100644 index 0000000000..d5eac1c587 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/accessories-tip.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/graphics-image-viewer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/graphics-image-viewer.png Binary files differnew file mode 100644 index 0000000000..9d7aeb86a5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/graphics-image-viewer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/graphics-snapshot.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/graphics-snapshot.png Binary files differnew file mode 100644 index 0000000000..1fb3e4c922 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/graphics-snapshot.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/help-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/help-browser.png Binary files differnew file mode 100644 index 0000000000..37cdb2777e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/help-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-download-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-download-manager.png Binary files differnew file mode 100644 index 0000000000..39fe16a94a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-download-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-email-client.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-email-client.png Binary files differnew file mode 100644 index 0000000000..789a5ea3c1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-email-client.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-web-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-web-browser.png Binary files differnew file mode 100644 index 0000000000..88d8e31ea6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/internet-web-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/multimedia-volume-control.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/multimedia-volume-control.png Binary files differnew file mode 100644 index 0000000000..a60f1b4d06 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/multimedia-volume-control.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/office-adobe-reader.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/office-adobe-reader.png Binary files differnew file mode 100644 index 0000000000..1ba5a7fa57 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/office-adobe-reader.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/office-pim.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/office-pim.png Binary files differnew file mode 100644 index 0000000000..f442448a26 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/office-pim.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-accessibility.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-accessibility.png Binary files differnew file mode 100644 index 0000000000..7ad09d5491 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-accessibility.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-multimedia.png Binary files differnew file mode 100644 index 0000000000..dfe9bdbcc7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-theme.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-theme.png Binary files differnew file mode 100644 index 0000000000..2a5f73463e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-theme.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-wallpaper.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-wallpaper.png Binary files differnew file mode 100644 index 0000000000..da010da0a9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences-desktop-wallpaper.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences.png Binary files differnew file mode 100644 index 0000000000..9e205a0e7a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/system-file-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/system-file-manager.png Binary files differnew file mode 100644 index 0000000000..ef619d34f0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/system-file-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/system-users.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/system-users.png Binary files differnew file mode 100644 index 0000000000..c5c8dc6d64 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/system-users.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/utilities-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/utilities-terminal.png Binary files differnew file mode 100644 index 0000000000..1c4ca34b71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/apps/utilities-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-graphics.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-graphics.png Binary files differnew file mode 100644 index 0000000000..246ce9ee62 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-graphics.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-internet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-internet.png Binary files differnew file mode 100644 index 0000000000..88d8e31ea6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-internet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-multimedia.png Binary files differnew file mode 100644 index 0000000000..6c6d9e0bb6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-office.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-office.png Binary files differnew file mode 100644 index 0000000000..080dad393f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-office.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-utilities.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-utilities.png Binary files differnew file mode 100644 index 0000000000..08d53669bc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/applications-utilities.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences-desktop.png Binary files differnew file mode 100644 index 0000000000..2e64d1821a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences-system-network.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences-system-network.png Binary files differnew file mode 100644 index 0000000000..1929fe17c5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences-system-network.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences.png Binary files differnew file mode 100644 index 0000000000..d201e91648 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/categories/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/camera-photo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/camera-photo.png Binary files differnew file mode 100644 index 0000000000..d9aaad70be --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/camera-photo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/camera-video.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/camera-video.png Binary files differnew file mode 100644 index 0000000000..d9aaad70be --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/camera-video.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/computer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/computer.png Binary files differnew file mode 100644 index 0000000000..c52d85af68 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/computer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-harddisk.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-harddisk.png Binary files differnew file mode 100644 index 0000000000..74fe0c7c3b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-harddisk.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-optical.png Binary files differnew file mode 100644 index 0000000000..35d52e888b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-removable-media.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-removable-media.png Binary files differnew file mode 100644 index 0000000000..b48b553073 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/drive-removable-media.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/input-mouse.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/input-mouse.png Binary files differnew file mode 100644 index 0000000000..b0585380fa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/input-mouse.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-flash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-flash.png Binary files differnew file mode 100644 index 0000000000..b48b553073 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-flash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-floppy.png Binary files differnew file mode 100644 index 0000000000..dc46878ccb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-optical.png Binary files differnew file mode 100644 index 0000000000..2a7b9705af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/media-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/network-wired.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/network-wired.png Binary files differnew file mode 100644 index 0000000000..1405ee611b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/network-wired.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/network-wireless.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/network-wireless.png Binary files differnew file mode 100644 index 0000000000..1405ee611b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/network-wireless.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/scanner.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/scanner.png Binary files differnew file mode 100644 index 0000000000..af1506ef57 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/scanner.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/usb.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/usb.png Binary files differnew file mode 100644 index 0000000000..2fee680077 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/usb.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/video-display.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/video-display.png Binary files differnew file mode 100644 index 0000000000..fd50b0720b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/devices/video-display.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-pdf.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-pdf.png Binary files differnew file mode 100644 index 0000000000..30cf778984 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-pdf.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-quicktime.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-quicktime.png Binary files differnew file mode 100644 index 0000000000..d98c59dd77 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-quicktime.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-x-executable.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-x-executable.png Binary files differnew file mode 100644 index 0000000000..984d511a38 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/application-x-executable.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/audio-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/audio-x-generic.png Binary files differnew file mode 100644 index 0000000000..fcba4084b0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/audio-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-encrypted.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-encrypted.png Binary files differnew file mode 100644 index 0000000000..b25238ef7c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-encrypted.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-generic.png Binary files differnew file mode 100644 index 0000000000..bcbf0b4da6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-temporary.png Binary files differnew file mode 100644 index 0000000000..dd5354d65d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/empty-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/font-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/font-x-generic.png Binary files differnew file mode 100644 index 0000000000..199eb87070 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/font-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/image-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/image-x-generic.png Binary files differnew file mode 100644 index 0000000000..26f4688e5b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/image-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/package-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/package-x-generic.png Binary files differnew file mode 100644 index 0000000000..6e962c0341 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/package-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-ascii.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-ascii.png Binary files differnew file mode 100644 index 0000000000..70f412a5a5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-ascii.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-html.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-html.png Binary files differnew file mode 100644 index 0000000000..8766e83346 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-html.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-generic-template.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-generic-template.png Binary files differnew file mode 100644 index 0000000000..263e61952d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-generic-template.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-generic.png Binary files differnew file mode 100644 index 0000000000..263e61952d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-script.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-script.png Binary files differnew file mode 100644 index 0000000000..552eeae458 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/text-x-script.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/unknown-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/unknown-x-temporary.png Binary files differnew file mode 100644 index 0000000000..bcbf0b4da6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/unknown-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/video-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/video-x-generic.png Binary files differnew file mode 100644 index 0000000000..37c4b600bb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/video-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/x-office-calendar.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/x-office-calendar.png Binary files differnew file mode 100644 index 0000000000..a8a0666331 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/x-office-calendar.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/x-office-spreadsheet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/x-office-spreadsheet.png Binary files differnew file mode 100644 index 0000000000..adbbc4cd0d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/mimetypes/x-office-spreadsheet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/archive-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/archive-folder.png Binary files differnew file mode 100644 index 0000000000..3869ee7193 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/archive-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/document-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/document-folder.png Binary files differnew file mode 100644 index 0000000000..f590068dca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/document-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/favorite-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/favorite-folder.png Binary files differnew file mode 100644 index 0000000000..b2273da0ca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/favorite-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/folder-remote.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/folder-remote.png Binary files differnew file mode 100644 index 0000000000..ee49d7b118 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/folder-remote.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/folder.png Binary files differnew file mode 100644 index 0000000000..8b020e5fd1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/html-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/html-folder.png Binary files differnew file mode 100644 index 0000000000..bbb3684067 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/html-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/network-server.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/network-server.png Binary files differnew file mode 100644 index 0000000000..1929fe17c5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/network-server.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/network-workgroup.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/network-workgroup.png Binary files differnew file mode 100644 index 0000000000..3c57029483 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/network-workgroup.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/services.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/services.png Binary files differnew file mode 100644 index 0000000000..d1348ac572 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/services.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-desktop.png Binary files differnew file mode 100644 index 0000000000..c78e07ebee --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-home.png Binary files differnew file mode 100644 index 0000000000..a4b9860f38 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash-empty.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash-empty.png Binary files differnew file mode 100644 index 0000000000..2b4884875a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash-empty.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash-full.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash-full.png Binary files differnew file mode 100644 index 0000000000..56d90a4c00 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash-full.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash.png Binary files differnew file mode 100644 index 0000000000..2b4884875a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/user-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/www.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/www.png Binary files differnew file mode 100644 index 0000000000..9cb3a2b8c4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/places/www.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/status/dialog-error.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/status/dialog-error.png Binary files differnew file mode 100644 index 0000000000..f089ffb886 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/status/dialog-error.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/status/dialog-password.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/status/dialog-password.png Binary files differnew file mode 100644 index 0000000000..96fb4cd564 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/22/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/application-exit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/application-exit.png Binary files differnew file mode 100644 index 0000000000..08e97b4057 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/application-exit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/decrypt.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/decrypt.png Binary files differnew file mode 100644 index 0000000000..2b49969a53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/decrypt.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-apply.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-apply.png Binary files differnew file mode 100644 index 0000000000..592ce6f4a5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-apply.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-cancel.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-cancel.png Binary files differnew file mode 100644 index 0000000000..2d5e260a5f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-cancel.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-ok.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-ok.png Binary files differnew file mode 100644 index 0000000000..592ce6f4a5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/dialog-ok.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-close.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-close.png Binary files differnew file mode 100644 index 0000000000..34eb16fd70 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-close.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-new.png Binary files differnew file mode 100644 index 0000000000..a71c1a254e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-open.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-open.png Binary files differnew file mode 100644 index 0000000000..77c992f5aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-open.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-print-quick.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-print-quick.png Binary files differnew file mode 100644 index 0000000000..3c3d294b05 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-print-quick.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-print.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-print.png Binary files differnew file mode 100644 index 0000000000..a510ec6558 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-print.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-revert.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-revert.png Binary files differnew file mode 100644 index 0000000000..8e3ac28aa8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-revert.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save-all.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save-all.png Binary files differnew file mode 100644 index 0000000000..ff21ea58b9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save-all.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save-as.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save-as.png Binary files differnew file mode 100644 index 0000000000..55ca1ec25e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save-as.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save.png Binary files differnew file mode 100644 index 0000000000..ae13a151d5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/document-save.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-add.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-add.png Binary files differnew file mode 100644 index 0000000000..90fec1df1b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-add.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-copy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-copy.png Binary files differnew file mode 100644 index 0000000000..18627b7480 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-copy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-cut.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-cut.png Binary files differnew file mode 100644 index 0000000000..ad6fbb15e4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-cut.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-delete.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-delete.png Binary files differnew file mode 100644 index 0000000000..ab71fae93f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-delete.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-find.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-find.png Binary files differnew file mode 100644 index 0000000000..f1ad60c860 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-find.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-paste.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-paste.png Binary files differnew file mode 100644 index 0000000000..9e224a9ec4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-paste.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-redo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-redo.png Binary files differnew file mode 100644 index 0000000000..36bf9b6118 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-redo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-trash.png Binary files differnew file mode 100644 index 0000000000..6170d86cbb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-undo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-undo.png Binary files differnew file mode 100644 index 0000000000..28915c0d7f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit-undo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit.png Binary files differnew file mode 100644 index 0000000000..f3ec32ed82 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/edit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/encrypt.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/encrypt.png Binary files differnew file mode 100644 index 0000000000..4ae41eeef4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/encrypt.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/favorite-add.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/favorite-add.png Binary files differnew file mode 100644 index 0000000000..18f0a81c88 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/favorite-add.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/folder-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/folder-new.png Binary files differnew file mode 100644 index 0000000000..a59c003d02 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/folder-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/format-color.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/format-color.png Binary files differnew file mode 100644 index 0000000000..38cb497923 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/format-color.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-down.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-down.png Binary files differnew file mode 100644 index 0000000000..5cbe6bb695 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-down.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-home.png Binary files differnew file mode 100644 index 0000000000..86ea229cfd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-left.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-left.png Binary files differnew file mode 100644 index 0000000000..b3eb405316 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-left.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-next.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-next.png Binary files differnew file mode 100644 index 0000000000..3453bde583 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-next.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-previous.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-previous.png Binary files differnew file mode 100644 index 0000000000..2568b59b32 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-previous.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-right.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-right.png Binary files differnew file mode 100644 index 0000000000..cd1be0cb74 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-right.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-top.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-top.png Binary files differnew file mode 100644 index 0000000000..63e8ebf121 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-top.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-up.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-up.png Binary files differnew file mode 100644 index 0000000000..899ad4fc9e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/go-up.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-about.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-about.png Binary files differnew file mode 100644 index 0000000000..d56ba2c244 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-about.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-contents.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-contents.png Binary files differnew file mode 100644 index 0000000000..c49ccab6c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-contents.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-faq.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-faq.png Binary files differnew file mode 100644 index 0000000000..c59d5a0035 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/help-faq.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/history.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/history.png Binary files differnew file mode 100644 index 0000000000..1f36acaa16 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/history.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/identity.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/identity.png Binary files differnew file mode 100644 index 0000000000..b38168a2fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/identity.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/mail.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/mail.png Binary files differnew file mode 100644 index 0000000000..356a2e7b6a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/mail.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-eject.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-eject.png Binary files differnew file mode 100644 index 0000000000..cd7d18457c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-eject.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-playback-pause.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-playback-pause.png Binary files differnew file mode 100644 index 0000000000..95fd2c2493 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-playback-pause.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-playback-start.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-playback-start.png Binary files differnew file mode 100644 index 0000000000..1f7e5e34d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-playback-start.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-seek-backward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-seek-backward.png Binary files differnew file mode 100644 index 0000000000..e2578a1ab1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-seek-backward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-seek-forward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-seek-forward.png Binary files differnew file mode 100644 index 0000000000..62e6d3689c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-seek-forward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-skip-backward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-skip-backward.png Binary files differnew file mode 100644 index 0000000000..7adb24c6de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-skip-backward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-skip-forward.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-skip-forward.png Binary files differnew file mode 100644 index 0000000000..a6adece9b6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/media-skip-forward.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/start.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/start.png Binary files differnew file mode 100644 index 0000000000..b8589b894b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/start.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/stop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/stop.png Binary files differnew file mode 100644 index 0000000000..b953dd7e3e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/stop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-lock-screen.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-lock-screen.png Binary files differnew file mode 100644 index 0000000000..ca94cb8c46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-lock-screen.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-run.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-run.png Binary files differnew file mode 100644 index 0000000000..db5111a9af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-run.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-search.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-search.png Binary files differnew file mode 100644 index 0000000000..e41a6386fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/system-search.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/tools-check-spelling.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/tools-check-spelling.png Binary files differnew file mode 100644 index 0000000000..c012684fb3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/tools-check-spelling.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-column.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-column.png Binary files differnew file mode 100644 index 0000000000..5230fbab6b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-column.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-detailed.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-detailed.png Binary files differnew file mode 100644 index 0000000000..8c315cf16d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-detailed.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-icon.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-icon.png Binary files differnew file mode 100644 index 0000000000..2b5d6555f5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-icon.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-remove.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-remove.png Binary files differnew file mode 100644 index 0000000000..9c2bedcdab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-remove.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-text.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-text.png Binary files differnew file mode 100644 index 0000000000..ed6d2e056d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-text.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-tree.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-tree.png Binary files differnew file mode 100644 index 0000000000..b896d173aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-pane-tree.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-refresh.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-refresh.png Binary files differnew file mode 100644 index 0000000000..4b0e37a11c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/view-refresh.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/window-new.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/window-new.png Binary files differnew file mode 100644 index 0000000000..1eb9c82fec --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/window-new.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-best-fit.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-best-fit.png Binary files differnew file mode 100644 index 0000000000..b4f5514ca7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-best-fit.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-in.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-in.png Binary files differnew file mode 100644 index 0000000000..cfb5a19d45 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-in.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-original.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-original.png Binary files differnew file mode 100644 index 0000000000..f0ca554f88 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-original.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-out.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-out.png Binary files differnew file mode 100644 index 0000000000..0dc9662f9c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom-out.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom.png Binary files differnew file mode 100644 index 0000000000..de5ef3a1b4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/actions/zoom.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-alarm.png Binary files differnew file mode 100644 index 0000000000..a4fca9cad6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-archiver.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-archiver.png Binary files differnew file mode 100644 index 0000000000..8dc08855c9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-archiver.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-calculator.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-calculator.png Binary files differnew file mode 100644 index 0000000000..00b5426742 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-calculator.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-character-map.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-character-map.png Binary files differnew file mode 100644 index 0000000000..686964f4a6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-character-map.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-clipboard.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-clipboard.png Binary files differnew file mode 100644 index 0000000000..def2ea1064 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-clipboard.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-clock.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-clock.png Binary files differnew file mode 100644 index 0000000000..1836149e80 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-clock.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-date.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-date.png Binary files differnew file mode 100644 index 0000000000..41fa2acf77 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-date.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-dictionary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-dictionary.png Binary files differnew file mode 100644 index 0000000000..9aa7d66827 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-dictionary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-disk-usage.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-disk-usage.png Binary files differnew file mode 100644 index 0000000000..cf8e01b2ba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-disk-usage.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-floppy.png Binary files differnew file mode 100644 index 0000000000..87694864b4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-magnifier.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-magnifier.png Binary files differnew file mode 100644 index 0000000000..87a73a114b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-magnifier.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-notes.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-notes.png Binary files differnew file mode 100644 index 0000000000..0a9d209088 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-notes.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-terminal.png Binary files differnew file mode 100644 index 0000000000..49dcd2ca78 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-text-editor.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-text-editor.png Binary files differnew file mode 100644 index 0000000000..951904d1a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-text-editor.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-time-tracking.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-time-tracking.png Binary files differnew file mode 100644 index 0000000000..2b9492ed61 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-time-tracking.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-timer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-timer.png Binary files differnew file mode 100644 index 0000000000..c07f30d378 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-timer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-tip.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-tip.png Binary files differnew file mode 100644 index 0000000000..9261b963cd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/accessories-tip.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/graphics-image-viewer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/graphics-image-viewer.png Binary files differnew file mode 100644 index 0000000000..341752c820 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/graphics-image-viewer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/graphics-snapshot.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/graphics-snapshot.png Binary files differnew file mode 100644 index 0000000000..267add622c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/graphics-snapshot.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/help-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/help-browser.png Binary files differnew file mode 100644 index 0000000000..c59d5a0035 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/help-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-download-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-download-manager.png Binary files differnew file mode 100644 index 0000000000..b342a425a8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-download-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-email-client.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-email-client.png Binary files differnew file mode 100644 index 0000000000..637920745e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-email-client.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-web-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-web-browser.png Binary files differnew file mode 100644 index 0000000000..e164a9f332 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/internet-web-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/multimedia-movie-player.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/multimedia-movie-player.png Binary files differnew file mode 100644 index 0000000000..68726f5e56 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/multimedia-movie-player.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/multimedia-volume-control.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/multimedia-volume-control.png Binary files differnew file mode 100644 index 0000000000..2c8b5be9a0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/multimedia-volume-control.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-adobe-reader.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-adobe-reader.png Binary files differnew file mode 100644 index 0000000000..43670f7d1d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-adobe-reader.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-organizer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-organizer.png Binary files differnew file mode 100644 index 0000000000..d80fc95a40 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-organizer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-pim.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-pim.png Binary files differnew file mode 100644 index 0000000000..966610d9b9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/office-pim.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-accessibility.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-accessibility.png Binary files differnew file mode 100644 index 0000000000..dfad3c507e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-accessibility.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-font.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-font.png Binary files differnew file mode 100644 index 0000000000..559c738cac --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-font.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-multimedia.png Binary files differnew file mode 100644 index 0000000000..542b3b06a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-theme.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-theme.png Binary files differnew file mode 100644 index 0000000000..ff1e6f2cc1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-theme.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-wallpaper.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-wallpaper.png Binary files differnew file mode 100644 index 0000000000..e292b875d2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences-desktop-wallpaper.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences.png Binary files differnew file mode 100644 index 0000000000..feebf2bdbe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-file-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-file-manager.png Binary files differnew file mode 100644 index 0000000000..e551d985e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-file-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-software-update.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-software-update.png Binary files differnew file mode 100644 index 0000000000..2aabd0a24a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-software-update.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-users.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-users.png Binary files differnew file mode 100644 index 0000000000..b368c3d82f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/system-users.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/utilities-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/utilities-terminal.png Binary files differnew file mode 100644 index 0000000000..290f72310a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/apps/utilities-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-games.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-games.png Binary files differnew file mode 100644 index 0000000000..538e3eca55 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-games.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-graphics.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-graphics.png Binary files differnew file mode 100644 index 0000000000..cf1c60dcd5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-graphics.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-internet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-internet.png Binary files differnew file mode 100644 index 0000000000..e164a9f332 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-internet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-multimedia.png Binary files differnew file mode 100644 index 0000000000..b34aa6673a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-office.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-office.png Binary files differnew file mode 100644 index 0000000000..1809632785 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-office.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-system.png Binary files differnew file mode 100644 index 0000000000..6398704a9f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-utilities.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-utilities.png Binary files differnew file mode 100644 index 0000000000..885d476620 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications-utilities.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications.png Binary files differnew file mode 100644 index 0000000000..105d21e61c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/applications.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-desktop-personal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-desktop-personal.png Binary files differnew file mode 100644 index 0000000000..377440b075 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-desktop-personal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-desktop.png Binary files differnew file mode 100644 index 0000000000..30f1dfa03d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-system-network.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-system-network.png Binary files differnew file mode 100644 index 0000000000..ac4c6ea2aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-system-network.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-system.png Binary files differnew file mode 100644 index 0000000000..6398704a9f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences.png Binary files differnew file mode 100644 index 0000000000..f37127ebc1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/system-help.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/system-help.png Binary files differnew file mode 100644 index 0000000000..c49ccab6c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/categories/system-help.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/camera-photo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/camera-photo.png Binary files differnew file mode 100644 index 0000000000..b41b44c3a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/camera-photo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/camera-video.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/camera-video.png Binary files differnew file mode 100644 index 0000000000..b41b44c3a4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/camera-video.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/computer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/computer.png Binary files differnew file mode 100644 index 0000000000..de11b2be1e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/computer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-harddisk.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-harddisk.png Binary files differnew file mode 100644 index 0000000000..bc399f25f8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-harddisk.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-optical.png Binary files differnew file mode 100644 index 0000000000..a80ba97bc8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-removable-media.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-removable-media.png Binary files differnew file mode 100644 index 0000000000..d9fe05c861 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/drive-removable-media.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/input-mouse.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/input-mouse.png Binary files differnew file mode 100644 index 0000000000..91ae19a487 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/input-mouse.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-flash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-flash.png Binary files differnew file mode 100644 index 0000000000..d9fe05c861 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-flash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-floppy.png Binary files differnew file mode 100644 index 0000000000..51c0b00b48 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-optical.png Binary files differnew file mode 100644 index 0000000000..209af79d15 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/media-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/network-wired.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/network-wired.png Binary files differnew file mode 100644 index 0000000000..c71d9b7ed3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/network-wired.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/network-wireless.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/network-wireless.png Binary files differnew file mode 100644 index 0000000000..c71d9b7ed3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/network-wireless.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/printer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/printer.png Binary files differnew file mode 100644 index 0000000000..f958cdcfa5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/printer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/scanner.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/scanner.png Binary files differnew file mode 100644 index 0000000000..974635d943 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/scanner.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/usb.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/usb.png Binary files differnew file mode 100644 index 0000000000..24338890f8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/usb.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/video-display.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/video-display.png Binary files differnew file mode 100644 index 0000000000..a2d1c28a69 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/devices/video-display.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-pdf.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-pdf.png Binary files differnew file mode 100644 index 0000000000..5c1e8e25c6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-pdf.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-quicktime.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-quicktime.png Binary files differnew file mode 100644 index 0000000000..3bea4d7173 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-quicktime.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-x-executable.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-x-executable.png Binary files differnew file mode 100644 index 0000000000..d4174998db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/application-x-executable.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/audio-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/audio-x-generic.png Binary files differnew file mode 100644 index 0000000000..80f005bac0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/audio-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-encrypted.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-encrypted.png Binary files differnew file mode 100644 index 0000000000..36adbc8e6c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-encrypted.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-generic.png Binary files differnew file mode 100644 index 0000000000..b5cb3ae95c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-locked.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-locked.png Binary files differnew file mode 100644 index 0000000000..977aa74ed6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-locked.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-temporary.png Binary files differnew file mode 100644 index 0000000000..1b17bef3fe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/empty-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/font-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/font-x-generic.png Binary files differnew file mode 100644 index 0000000000..2cf6665245 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/font-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/image-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/image-x-generic.png Binary files differnew file mode 100644 index 0000000000..b0f0c90edd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/image-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/package-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/package-x-generic.png Binary files differnew file mode 100644 index 0000000000..7183a99ca0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/package-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-ascii.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-ascii.png Binary files differnew file mode 100644 index 0000000000..788d0e7cd7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-ascii.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-html.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-html.png Binary files differnew file mode 100644 index 0000000000..ba0ee38d71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-html.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-generic-template.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-generic-template.png Binary files differnew file mode 100644 index 0000000000..2ee0ef4f8f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-generic-template.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-generic.png Binary files differnew file mode 100644 index 0000000000..2ee0ef4f8f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-script.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-script.png Binary files differnew file mode 100644 index 0000000000..eea60d04cc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/text-x-script.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/unknown-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/unknown-x-temporary.png Binary files differnew file mode 100644 index 0000000000..b5cb3ae95c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/unknown-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/video-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/video-x-generic.png Binary files differnew file mode 100644 index 0000000000..68efea6a85 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/video-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/x-office-calendar.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/x-office-calendar.png Binary files differnew file mode 100644 index 0000000000..67498ea761 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/x-office-calendar.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/x-office-spreadsheet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/x-office-spreadsheet.png Binary files differnew file mode 100644 index 0000000000..366c67c01d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/mimetypes/x-office-spreadsheet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/archive-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/archive-folder.png Binary files differnew file mode 100644 index 0000000000..174b86c3dc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/archive-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/document-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/document-folder.png Binary files differnew file mode 100644 index 0000000000..7b8851de4d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/document-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/favorite-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/favorite-folder.png Binary files differnew file mode 100644 index 0000000000..71d2865c71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/favorite-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/folder-remote.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/folder-remote.png Binary files differnew file mode 100644 index 0000000000..2aaaa90830 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/folder-remote.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/folder.png Binary files differnew file mode 100644 index 0000000000..bd433f4bfd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/html-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/html-folder.png Binary files differnew file mode 100644 index 0000000000..9ba99ed216 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/html-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/network-server.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/network-server.png Binary files differnew file mode 100644 index 0000000000..ac4c6ea2aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/network-server.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/network-workgroup.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/network-workgroup.png Binary files differnew file mode 100644 index 0000000000..68afcb4a27 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/network-workgroup.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/services.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/services.png Binary files differnew file mode 100644 index 0000000000..fcee6c9cf2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/services.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-desktop.png Binary files differnew file mode 100644 index 0000000000..9b993a5ebb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-home.png Binary files differnew file mode 100644 index 0000000000..0094f836cd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash-empty.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash-empty.png Binary files differnew file mode 100644 index 0000000000..df07ab4bb9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash-empty.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash-full.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash-full.png Binary files differnew file mode 100644 index 0000000000..f19899dd80 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash-full.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash.png Binary files differnew file mode 100644 index 0000000000..df07ab4bb9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/user-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/www.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/www.png Binary files differnew file mode 100644 index 0000000000..bd241122f6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/places/www.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-error.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-error.png Binary files differnew file mode 100644 index 0000000000..b953dd7e3e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-error.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-information.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-information.png Binary files differnew file mode 100644 index 0000000000..d8197d61a3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-information.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-password.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-password.png Binary files differnew file mode 100644 index 0000000000..b74e831fe3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-warning.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-warning.png Binary files differnew file mode 100644 index 0000000000..d5f6551d94 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/32/status/dialog-warning.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/help-contents.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/help-contents.png Binary files differnew file mode 100644 index 0000000000..3cf6bb7562 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/help-contents.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/help-faq.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/help-faq.png Binary files differnew file mode 100644 index 0000000000..614b0f9131 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/help-faq.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/system-search.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/system-search.png Binary files differnew file mode 100644 index 0000000000..cf6e248fdc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/actions/system-search.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-alarm.png Binary files differnew file mode 100644 index 0000000000..3b77e470bc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-archiver.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-archiver.png Binary files differnew file mode 100644 index 0000000000..3393d26a3e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-archiver.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-calculator.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-calculator.png Binary files differnew file mode 100644 index 0000000000..887526343b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-calculator.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-character-map.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-character-map.png Binary files differnew file mode 100644 index 0000000000..d911c7f314 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-character-map.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-clipboard.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-clipboard.png Binary files differnew file mode 100644 index 0000000000..ea9c78ed79 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-clipboard.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-clock.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-clock.png Binary files differnew file mode 100644 index 0000000000..17e760a3fc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-clock.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-date.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-date.png Binary files differnew file mode 100644 index 0000000000..d3b8f47621 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-date.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-dictionary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-dictionary.png Binary files differnew file mode 100644 index 0000000000..f96a2aa014 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-dictionary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-disk-usage.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-disk-usage.png Binary files differnew file mode 100644 index 0000000000..a3b93ffca0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-disk-usage.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-floppy.png Binary files differnew file mode 100644 index 0000000000..96ecead1c5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-magnifier.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-magnifier.png Binary files differnew file mode 100644 index 0000000000..538d656bbf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-magnifier.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-notes.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-notes.png Binary files differnew file mode 100644 index 0000000000..d0d7cba913 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-notes.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-terminal.png Binary files differnew file mode 100644 index 0000000000..aad1041b65 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-text-editor.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-text-editor.png Binary files differnew file mode 100644 index 0000000000..7cf4311f21 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-text-editor.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-time-tracking.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-time-tracking.png Binary files differnew file mode 100644 index 0000000000..49fa3df0d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-time-tracking.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-timer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-timer.png Binary files differnew file mode 100644 index 0000000000..ccbae97369 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-timer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-tip.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-tip.png Binary files differnew file mode 100644 index 0000000000..8b8756181d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/accessories-tip.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/graphics-image-viewer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/graphics-image-viewer.png Binary files differnew file mode 100644 index 0000000000..56901e0e3e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/graphics-image-viewer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/graphics-snapshot.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/graphics-snapshot.png Binary files differnew file mode 100644 index 0000000000..5972080f1c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/graphics-snapshot.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/help-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/help-browser.png Binary files differnew file mode 100644 index 0000000000..614b0f9131 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/help-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-download-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-download-manager.png Binary files differnew file mode 100644 index 0000000000..a26ea68d93 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-download-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-email-client.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-email-client.png Binary files differnew file mode 100644 index 0000000000..19c7cfd2f5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-email-client.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-web-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-web-browser.png Binary files differnew file mode 100644 index 0000000000..b5f28c4777 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/internet-web-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/multimedia-movie-player.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/multimedia-movie-player.png Binary files differnew file mode 100644 index 0000000000..59a8b19404 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/multimedia-movie-player.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/multimedia-volume-control.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/multimedia-volume-control.png Binary files differnew file mode 100644 index 0000000000..fb5ca5292d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/multimedia-volume-control.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-adobe-reader.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-adobe-reader.png Binary files differnew file mode 100644 index 0000000000..1ed91651af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-adobe-reader.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-organizer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-organizer.png Binary files differnew file mode 100644 index 0000000000..3aa37ad259 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-organizer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-pim.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-pim.png Binary files differnew file mode 100644 index 0000000000..75619bce74 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/office-pim.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-accessibility.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-accessibility.png Binary files differnew file mode 100644 index 0000000000..39745787fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-accessibility.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-font.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-font.png Binary files differnew file mode 100644 index 0000000000..661290666f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-font.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-multimedia.png Binary files differnew file mode 100644 index 0000000000..c64c98f928 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-theme.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-theme.png Binary files differnew file mode 100644 index 0000000000..22040c3e24 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-theme.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-wallpaper.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-wallpaper.png Binary files differnew file mode 100644 index 0000000000..50a848f3bb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/preferences-desktop-wallpaper.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-file-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-file-manager.png Binary files differnew file mode 100644 index 0000000000..ebdeaa386e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-file-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-software-update.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-software-update.png Binary files differnew file mode 100644 index 0000000000..c8a65a759f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-software-update.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-users.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-users.png Binary files differnew file mode 100644 index 0000000000..fe74c0056a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/system-users.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/utilities-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/utilities-terminal.png Binary files differnew file mode 100644 index 0000000000..c7bdedf877 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/apps/utilities-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-games.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-games.png Binary files differnew file mode 100644 index 0000000000..f3a73f8a0d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-games.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-graphics.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-graphics.png Binary files differnew file mode 100644 index 0000000000..624d07f68e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-graphics.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-internet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-internet.png Binary files differnew file mode 100644 index 0000000000..b5f28c4777 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-internet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-multimedia.png Binary files differnew file mode 100644 index 0000000000..5a9c231755 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-office.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-office.png Binary files differnew file mode 100644 index 0000000000..318cc52ff7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-office.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-system.png Binary files differnew file mode 100644 index 0000000000..9962b4b57a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-utilities.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-utilities.png Binary files differnew file mode 100644 index 0000000000..baac6ad0ea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications-utilities.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications.png Binary files differnew file mode 100644 index 0000000000..43f6a5890c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/applications.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-desktop-personal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-desktop-personal.png Binary files differnew file mode 100644 index 0000000000..69f5db940e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-desktop-personal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-desktop.png Binary files differnew file mode 100644 index 0000000000..6b9ab9e130 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-system-network.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-system-network.png Binary files differnew file mode 100644 index 0000000000..5bac4066c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-system-network.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-system.png Binary files differnew file mode 100644 index 0000000000..9962b4b57a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences.png Binary files differnew file mode 100644 index 0000000000..34dc628b47 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/system-help.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/system-help.png Binary files differnew file mode 100644 index 0000000000..3cf6bb7562 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/categories/system-help.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/camera-photo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/camera-photo.png Binary files differnew file mode 100644 index 0000000000..68046fae4e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/camera-photo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/camera-video.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/camera-video.png Binary files differnew file mode 100644 index 0000000000..68046fae4e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/camera-video.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/computer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/computer.png Binary files differnew file mode 100644 index 0000000000..8f07fa9570 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/computer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-harddisk.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-harddisk.png Binary files differnew file mode 100644 index 0000000000..046a53015b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-harddisk.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-optical.png Binary files differnew file mode 100644 index 0000000000..8bac421812 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-removable-media.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-removable-media.png Binary files differnew file mode 100644 index 0000000000..644446ad67 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/drive-removable-media.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/input-mouse.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/input-mouse.png Binary files differnew file mode 100644 index 0000000000..ba460dd005 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/input-mouse.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-flash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-flash.png Binary files differnew file mode 100644 index 0000000000..644446ad67 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-flash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-floppy.png Binary files differnew file mode 100644 index 0000000000..69d70f293d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-optical.png Binary files differnew file mode 100644 index 0000000000..1b0a503393 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/media-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/network-wired.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/network-wired.png Binary files differnew file mode 100644 index 0000000000..20cd06b211 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/network-wired.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/network-wireless.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/network-wireless.png Binary files differnew file mode 100644 index 0000000000..20cd06b211 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/network-wireless.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/printer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/printer.png Binary files differnew file mode 100644 index 0000000000..8313eccff4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/printer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/scanner.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/scanner.png Binary files differnew file mode 100644 index 0000000000..71aed183aa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/scanner.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/usb.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/usb.png Binary files differnew file mode 100644 index 0000000000..f6336fbeab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/usb.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/video-display.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/video-display.png Binary files differnew file mode 100644 index 0000000000..9c2740ac07 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/devices/video-display.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-pdf.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-pdf.png Binary files differnew file mode 100644 index 0000000000..4e5e18ee71 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-pdf.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-quicktime.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-quicktime.png Binary files differnew file mode 100644 index 0000000000..004b077fca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-quicktime.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-x-executable.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-x-executable.png Binary files differnew file mode 100644 index 0000000000..a898930da2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/application-x-executable.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/audio-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/audio-x-generic.png Binary files differnew file mode 100644 index 0000000000..6a9d42296e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/audio-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-encrypted.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-encrypted.png Binary files differnew file mode 100644 index 0000000000..4d42a7e3de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-encrypted.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-generic.png Binary files differnew file mode 100644 index 0000000000..78851f3619 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-locked.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-locked.png Binary files differnew file mode 100644 index 0000000000..9a0e37e931 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-locked.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-temporary.png Binary files differnew file mode 100644 index 0000000000..0d139c1add --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/empty-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/font-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/font-x-generic.png Binary files differnew file mode 100644 index 0000000000..80f56a886b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/font-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/image-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/image-x-generic.png Binary files differnew file mode 100644 index 0000000000..3d0949420d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/image-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/package-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/package-x-generic.png Binary files differnew file mode 100644 index 0000000000..a472fb32d6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/package-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-ascii.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-ascii.png Binary files differnew file mode 100644 index 0000000000..884c362c44 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-ascii.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-html.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-html.png Binary files differnew file mode 100644 index 0000000000..017f9d3622 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-html.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-generic-template.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-generic-template.png Binary files differnew file mode 100644 index 0000000000..8db7ba45e4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-generic-template.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-generic.png Binary files differnew file mode 100644 index 0000000000..8db7ba45e4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-script.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-script.png Binary files differnew file mode 100644 index 0000000000..85f8a89ff0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/text-x-script.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/unknown-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/unknown-x-temporary.png Binary files differnew file mode 100644 index 0000000000..78851f3619 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/unknown-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/video-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/video-x-generic.png Binary files differnew file mode 100644 index 0000000000..29a1a8c3fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/video-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/x-office-calendar.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/x-office-calendar.png Binary files differnew file mode 100644 index 0000000000..f34f15a8c4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/x-office-calendar.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/x-office-spreadsheet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/x-office-spreadsheet.png Binary files differnew file mode 100644 index 0000000000..05f4aff691 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/mimetypes/x-office-spreadsheet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/archive-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/archive-folder.png Binary files differnew file mode 100644 index 0000000000..bf10afc0f9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/archive-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/document-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/document-folder.png Binary files differnew file mode 100644 index 0000000000..e02294a8db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/document-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/folder-remote.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/folder-remote.png Binary files differnew file mode 100644 index 0000000000..5ed1f077b0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/folder-remote.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/folder.png Binary files differnew file mode 100644 index 0000000000..31c8a7ede1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/html-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/html-folder.png Binary files differnew file mode 100644 index 0000000000..bc79044932 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/html-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/network-server.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/network-server.png Binary files differnew file mode 100644 index 0000000000..5bac4066c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/network-server.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/network-workgroup.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/network-workgroup.png Binary files differnew file mode 100644 index 0000000000..86139f33e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/network-workgroup.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/services.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/services.png Binary files differnew file mode 100644 index 0000000000..e4e12439b3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/services.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-desktop.png Binary files differnew file mode 100644 index 0000000000..9a0cf87f05 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-home.png Binary files differnew file mode 100644 index 0000000000..74f8aea85a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash-empty.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash-empty.png Binary files differnew file mode 100644 index 0000000000..37a8aa2097 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash-empty.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash-full.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash-full.png Binary files differnew file mode 100644 index 0000000000..37b1486fb0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash-full.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash.png Binary files differnew file mode 100644 index 0000000000..37a8aa2097 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/user-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/www.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/www.png Binary files differnew file mode 100644 index 0000000000..cccc91cf36 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/places/www.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/status/dialog-error.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/status/dialog-error.png Binary files differnew file mode 100644 index 0000000000..e1841e408c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/status/dialog-error.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/status/dialog-password.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/status/dialog-password.png Binary files differnew file mode 100644 index 0000000000..98d7607e28 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/48/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/help-contents.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/help-contents.png Binary files differnew file mode 100644 index 0000000000..64ed09dfc4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/help-contents.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/help-faq.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/help-faq.png Binary files differnew file mode 100644 index 0000000000..ebb8462ced --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/help-faq.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/system-search.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/system-search.png Binary files differnew file mode 100644 index 0000000000..064e818e23 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/actions/system-search.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-alarm.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-alarm.png Binary files differnew file mode 100644 index 0000000000..71b07a25a3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-alarm.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-archiver.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-archiver.png Binary files differnew file mode 100644 index 0000000000..e976e468ac --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-archiver.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-calculator.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-calculator.png Binary files differnew file mode 100644 index 0000000000..c5ee12eb77 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-calculator.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-character-map.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-character-map.png Binary files differnew file mode 100644 index 0000000000..6b8aee857b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-character-map.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-clipboard.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-clipboard.png Binary files differnew file mode 100644 index 0000000000..300827ac49 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-clipboard.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-clock.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-clock.png Binary files differnew file mode 100644 index 0000000000..dda46a5496 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-clock.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-date.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-date.png Binary files differnew file mode 100644 index 0000000000..4746c98012 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-date.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-dictionary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-dictionary.png Binary files differnew file mode 100644 index 0000000000..4d2ecd211e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-dictionary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-disk-usage.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-disk-usage.png Binary files differnew file mode 100644 index 0000000000..f1aee77fab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-disk-usage.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-floppy.png Binary files differnew file mode 100644 index 0000000000..d0566bdbb9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-magnifier.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-magnifier.png Binary files differnew file mode 100644 index 0000000000..ac682e1d3c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-magnifier.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-notes.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-notes.png Binary files differnew file mode 100644 index 0000000000..926ad8a558 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-notes.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-terminal.png Binary files differnew file mode 100644 index 0000000000..356600d29f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-text-editor.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-text-editor.png Binary files differnew file mode 100644 index 0000000000..191380fab1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-text-editor.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-time-tracking.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-time-tracking.png Binary files differnew file mode 100644 index 0000000000..5964bc1037 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-time-tracking.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-tip.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-tip.png Binary files differnew file mode 100644 index 0000000000..e8b4285a22 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/accessories-tip.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/graphics-image-viewer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/graphics-image-viewer.png Binary files differnew file mode 100644 index 0000000000..92635c96e0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/graphics-image-viewer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/graphics-snapshot.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/graphics-snapshot.png Binary files differnew file mode 100644 index 0000000000..32b0c82fd6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/graphics-snapshot.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/help-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/help-browser.png Binary files differnew file mode 100644 index 0000000000..ebb8462ced --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/help-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-download-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-download-manager.png Binary files differnew file mode 100644 index 0000000000..520bd4e3de --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-download-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-email-client.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-email-client.png Binary files differnew file mode 100644 index 0000000000..442141d106 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-email-client.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-web-browser.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-web-browser.png Binary files differnew file mode 100644 index 0000000000..2d0fdf97d0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/internet-web-browser.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/multimedia-movie-player.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/multimedia-movie-player.png Binary files differnew file mode 100644 index 0000000000..a7d9457e53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/multimedia-movie-player.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/multimedia-volume-control.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/multimedia-volume-control.png Binary files differnew file mode 100644 index 0000000000..67cc062f9e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/multimedia-volume-control.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-adobe-reader.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-adobe-reader.png Binary files differnew file mode 100644 index 0000000000..63d417535c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-adobe-reader.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-organizer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-organizer.png Binary files differnew file mode 100644 index 0000000000..055cafe0cf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-organizer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-pim.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-pim.png Binary files differnew file mode 100644 index 0000000000..af34fbe867 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/office-pim.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-accessibility.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-accessibility.png Binary files differnew file mode 100644 index 0000000000..01b023e542 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-accessibility.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-font.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-font.png Binary files differnew file mode 100644 index 0000000000..cd8e821077 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-font.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-multimedia.png Binary files differnew file mode 100644 index 0000000000..a3296d89a7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-theme.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-theme.png Binary files differnew file mode 100644 index 0000000000..54a6f19713 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-theme.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-wallpaper.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-wallpaper.png Binary files differnew file mode 100644 index 0000000000..eecc4f45af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/preferences-desktop-wallpaper.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-file-manager.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-file-manager.png Binary files differnew file mode 100644 index 0000000000..b569517089 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-file-manager.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-software-update.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-software-update.png Binary files differnew file mode 100644 index 0000000000..c09c67ce84 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-software-update.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-users.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-users.png Binary files differnew file mode 100644 index 0000000000..3e443c99db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/system-users.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/utilities-terminal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/utilities-terminal.png Binary files differnew file mode 100644 index 0000000000..f6d04d6dab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/apps/utilities-terminal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-games.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-games.png Binary files differnew file mode 100644 index 0000000000..a040f39eea --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-games.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-graphics.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-graphics.png Binary files differnew file mode 100644 index 0000000000..417d2ff4b5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-graphics.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-internet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-internet.png Binary files differnew file mode 100644 index 0000000000..2d0fdf97d0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-internet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-multimedia.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-multimedia.png Binary files differnew file mode 100644 index 0000000000..7e7afff52e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-multimedia.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-office.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-office.png Binary files differnew file mode 100644 index 0000000000..cf3f20749f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-office.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-system.png Binary files differnew file mode 100644 index 0000000000..ea8e84f980 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-utilities.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-utilities.png Binary files differnew file mode 100644 index 0000000000..5b2af79b27 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications-utilities.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications.png Binary files differnew file mode 100644 index 0000000000..d4c1c7fd72 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/applications.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-desktop-personal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-desktop-personal.png Binary files differnew file mode 100644 index 0000000000..dc65d514e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-desktop-personal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-desktop.png Binary files differnew file mode 100644 index 0000000000..5e93201be6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-system-network.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-system-network.png Binary files differnew file mode 100644 index 0000000000..d3f72be6b5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-system-network.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-system.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-system.png Binary files differnew file mode 100644 index 0000000000..ea8e84f980 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences-system.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences.png Binary files differnew file mode 100644 index 0000000000..80e4689b1e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/preferences.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/system-help.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/system-help.png Binary files differnew file mode 100644 index 0000000000..64ed09dfc4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/categories/system-help.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/camera-photo.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/camera-photo.png Binary files differnew file mode 100644 index 0000000000..9fa861bd36 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/camera-photo.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/camera-video.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/camera-video.png Binary files differnew file mode 100644 index 0000000000..9fa861bd36 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/camera-video.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/computer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/computer.png Binary files differnew file mode 100644 index 0000000000..41a501e940 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/computer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-harddisk.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-harddisk.png Binary files differnew file mode 100644 index 0000000000..b14dbbcf46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-harddisk.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-optical.png Binary files differnew file mode 100644 index 0000000000..1391a42481 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-removable-media.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-removable-media.png Binary files differnew file mode 100644 index 0000000000..d8bb89dcd1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/drive-removable-media.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/input-mouse.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/input-mouse.png Binary files differnew file mode 100644 index 0000000000..75e3d8eac5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/input-mouse.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-flash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-flash.png Binary files differnew file mode 100644 index 0000000000..d8bb89dcd1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-flash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-floppy.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-floppy.png Binary files differnew file mode 100644 index 0000000000..fac5eeb0a6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-floppy.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-optical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-optical.png Binary files differnew file mode 100644 index 0000000000..95af80455c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/media-optical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/network-wired.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/network-wired.png Binary files differnew file mode 100644 index 0000000000..4e402f633a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/network-wired.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/network-wireless.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/network-wireless.png Binary files differnew file mode 100644 index 0000000000..4e402f633a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/network-wireless.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/printer.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/printer.png Binary files differnew file mode 100644 index 0000000000..f2956f0b5b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/printer.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/scanner.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/scanner.png Binary files differnew file mode 100644 index 0000000000..372d90e645 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/scanner.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/usb.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/usb.png Binary files differnew file mode 100644 index 0000000000..6bdf1da86c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/usb.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/video-display.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/video-display.png Binary files differnew file mode 100644 index 0000000000..7c5f4ac1fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/devices/video-display.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-pdf.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-pdf.png Binary files differnew file mode 100644 index 0000000000..4c906339ab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-pdf.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-quicktime.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-quicktime.png Binary files differnew file mode 100644 index 0000000000..f3e6647f7e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-quicktime.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-x-executable.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-x-executable.png Binary files differnew file mode 100644 index 0000000000..005d8c0ee6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/application-x-executable.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/audio-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/audio-x-generic.png Binary files differnew file mode 100644 index 0000000000..aef284b0e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/audio-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-encrypted.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-encrypted.png Binary files differnew file mode 100644 index 0000000000..2e06c176c2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-encrypted.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-generic.png Binary files differnew file mode 100644 index 0000000000..1e92934834 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-locked.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-locked.png Binary files differnew file mode 100644 index 0000000000..9efc85e599 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-locked.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-temporary.png Binary files differnew file mode 100644 index 0000000000..7fc780d28b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/empty-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/font-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/font-x-generic.png Binary files differnew file mode 100644 index 0000000000..3299a64282 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/font-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/image-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/image-x-generic.png Binary files differnew file mode 100644 index 0000000000..60595590a2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/image-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/package-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/package-x-generic.png Binary files differnew file mode 100644 index 0000000000..7a6aea12ac --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/package-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-ascii.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-ascii.png Binary files differnew file mode 100644 index 0000000000..3584b3f919 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-ascii.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-html.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-html.png Binary files differnew file mode 100644 index 0000000000..2d408f4236 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-html.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-generic-template.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-generic-template.png Binary files differnew file mode 100644 index 0000000000..cb3eb41bfb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-generic-template.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-generic.png Binary files differnew file mode 100644 index 0000000000..cb3eb41bfb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-script.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-script.png Binary files differnew file mode 100644 index 0000000000..8afcf55fd6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/text-x-script.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/unknown-x-temporary.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/unknown-x-temporary.png Binary files differnew file mode 100644 index 0000000000..1e92934834 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/unknown-x-temporary.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/video-x-generic.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/video-x-generic.png Binary files differnew file mode 100644 index 0000000000..bb54b53136 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/video-x-generic.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/x-office-calendar.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/x-office-calendar.png Binary files differnew file mode 100644 index 0000000000..3e74ca5ee8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/x-office-calendar.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/x-office-spreadsheet.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/x-office-spreadsheet.png Binary files differnew file mode 100644 index 0000000000..e1d4168351 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/mimetypes/x-office-spreadsheet.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/archive-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/archive-folder.png Binary files differnew file mode 100644 index 0000000000..398ff7a2a8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/archive-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/document-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/document-folder.png Binary files differnew file mode 100644 index 0000000000..5cc7bd9ddb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/document-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/folder-remote.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/folder-remote.png Binary files differnew file mode 100644 index 0000000000..3987a6572e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/folder-remote.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/folder.png Binary files differnew file mode 100644 index 0000000000..5ef5754e26 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/html-folder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/html-folder.png Binary files differnew file mode 100644 index 0000000000..5ac69c439b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/html-folder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/network-server.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/network-server.png Binary files differnew file mode 100644 index 0000000000..d3f72be6b5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/network-server.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/network-workgroup.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/network-workgroup.png Binary files differnew file mode 100644 index 0000000000..8f62b8ce9e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/network-workgroup.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/services.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/services.png Binary files differnew file mode 100644 index 0000000000..0b9ea4dd56 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/services.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-desktop.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-desktop.png Binary files differnew file mode 100644 index 0000000000..fd2b4a781f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-desktop.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-home.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-home.png Binary files differnew file mode 100644 index 0000000000..7b20e56631 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-home.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash-empty.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash-empty.png Binary files differnew file mode 100644 index 0000000000..47b6517fe9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash-empty.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash-full.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash-full.png Binary files differnew file mode 100644 index 0000000000..07d9337564 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash-full.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash.png Binary files differnew file mode 100644 index 0000000000..47b6517fe9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/user-trash.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/www.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/www.png Binary files differnew file mode 100644 index 0000000000..0ba7343cbf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/places/www.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/status/dialog-error.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/status/dialog-error.png Binary files differnew file mode 100644 index 0000000000..e597c4658b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/status/dialog-error.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/status/dialog-password.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/status/dialog-password.png Binary files differnew file mode 100644 index 0000000000..bf8d7e42a1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/64/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/LICENSE b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/LICENSE new file mode 100644 index 0000000000..b792c1bff4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/Nuvola/LICENSE @@ -0,0 +1,23 @@ +Licensing Information +===================== + +Icon Theme: + Nuvola + +Author: + David Vignoni (david AT icon-king DOT com) + +License: + LGPL + +Home: + http://www.kde-look.org/content/show.php?content=5358 + http://www.icon-king.com + + +Important Note For Projects That Need To Comply With EPL: +--------------------------------------------------------- + +This icon theme is available only under the LGPL. Therefore, you have to select +another icon theme that is compatible to EPL. For more information, please see +the LICENSE file in the qooxdoo top-level directory. diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/README b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/README new file mode 100644 index 0000000000..456efb1037 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/icon/README @@ -0,0 +1,72 @@ +*** +*** SAMBA CHANGES: +*** +*** All icon directories other than the default, Nuvola, have been removed +*** to save space. +*** +*** Derrell +*** +*** The remainder of this file is qooxdoo-original... + +Information On Available Icon Themes +==================================== + +Please make sure you read and understand the LICENSE file that is included in +each icon theme's directory. + +******************************************************************************** + + * Vista-Inspirate + + Directory: + VistaInspirate + Author: + Alexandre Moore (alexandre DOT moore AT gmail DOT com) + License: + GPL & LGPL/EPL + Home: + http://www.kde-look.org/content/show.php?content=31585 + Comment: + Based on nuoveXT by the same author + +******************************************************************************** + + * nuoveXT + + Directory: + NuoveXT + Author: + Alexandre Moore (alexandre DOT moore AT gmail DOT com) + License: + GPL & LGPL/EPL + Home: + http://www.kde-look.org/content/show.php?content=26449 + +******************************************************************************** + + * Crystal Clear + + Directory: + CrystalClear + Author: + Everaldo (everaldo AT everaldo DOT com) + License: + LGPL + Home: + http://www.kde-look.org/content/show.php?content=25668 + +******************************************************************************** + + * Nuvola + + Directory: + Nuvola + Author: + David Vignoni (david AT icon-king DOT com) + License: + LGPL + Home: + http://www.kde-look.org/content/show.php?content=5358 + +******************************************************************************** + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/history/historyHelper.html b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/history/historyHelper.html new file mode 100644 index 0000000000..55a94275ad --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/history/historyHelper.html @@ -0,0 +1,4 @@ +<html> +<head></head> +<body onload="parent.qx.client.History.getInstance()._onHistoryLoad(window.location)"></body> +</html>
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/image/blank.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/image/blank.gif Binary files differnew file mode 100644 index 0000000000..75b945d255 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/image/blank.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/image/dotted_white.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/image/dotted_white.gif Binary files differnew file mode 100644 index 0000000000..467da46f25 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/static/image/dotted_white.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down.gif Binary files differnew file mode 100644 index 0000000000..7a73f82726 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down_small.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down_small.gif Binary files differnew file mode 100644 index 0000000000..ea60995e1b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down_small.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down_tiny.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down_tiny.gif Binary files differnew file mode 100644 index 0000000000..928f52805f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/down_tiny.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/first.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/first.png Binary files differnew file mode 100644 index 0000000000..89fcc75e13 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/first.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/forward.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/forward.gif Binary files differnew file mode 100644 index 0000000000..809e8fdb90 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/forward.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/last.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/last.png Binary files differnew file mode 100644 index 0000000000..f7bcbedf99 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/last.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/left.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/left.png Binary files differnew file mode 100644 index 0000000000..ace0782dfe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/left.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/minimize.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/minimize.gif Binary files differnew file mode 100644 index 0000000000..c5b586e509 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/minimize.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/next.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/next.gif Binary files differnew file mode 100644 index 0000000000..d9c246f1e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/next.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/previous.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/previous.gif Binary files differnew file mode 100644 index 0000000000..7189c2306b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/previous.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/rewind.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/rewind.gif Binary files differnew file mode 100644 index 0000000000..2ad09109e9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/rewind.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/right.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/right.png Binary files differnew file mode 100644 index 0000000000..2c3e8ed109 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/right.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up.gif Binary files differnew file mode 100644 index 0000000000..9452da0543 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up_small.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up_small.gif Binary files differnew file mode 100644 index 0000000000..fc815ba417 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up_small.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up_tiny.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up_tiny.gif Binary files differnew file mode 100644 index 0000000000..34dc4e8e3f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/arrows/up_tiny.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/brightness-field.jpg b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/brightness-field.jpg Binary files differnew file mode 100644 index 0000000000..008984d1c7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/brightness-field.jpg diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/brightness-handle.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/brightness-handle.gif Binary files differnew file mode 100644 index 0000000000..7cf80222af --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/brightness-handle.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/huesaturation-field.jpg b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/huesaturation-field.jpg Binary files differnew file mode 100644 index 0000000000..36d2d799d9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/huesaturation-field.jpg diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/huesaturation-handle.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/huesaturation-handle.gif Binary files differnew file mode 100644 index 0000000000..2fcaaece17 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/colorselector/huesaturation-handle.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/alias.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/alias.gif Binary files differnew file mode 100644 index 0000000000..3b46c72422 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/alias.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/copy.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/copy.gif Binary files differnew file mode 100644 index 0000000000..2a59a4aef8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/copy.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/move.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/move.gif Binary files differnew file mode 100644 index 0000000000..adc9a6477d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/move.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/nodrop.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/nodrop.gif Binary files differnew file mode 100644 index 0000000000..3a25866507 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/cursors/nodrop.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/lastMonth.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/lastMonth.png Binary files differnew file mode 100644 index 0000000000..1eb3f4045e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/lastMonth.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/lastYear.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/lastYear.png Binary files differnew file mode 100644 index 0000000000..147d427510 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/lastYear.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/nextMonth.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/nextMonth.png Binary files differnew file mode 100644 index 0000000000..05e5647e49 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/nextMonth.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/nextYear.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/nextYear.png Binary files differnew file mode 100644 index 0000000000..79a6278b2a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/datechooser/nextYear.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/checkbox.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/checkbox.gif Binary files differnew file mode 100644 index 0000000000..767f285b57 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/checkbox.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/menu-blank.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/menu-blank.gif Binary files differnew file mode 100644 index 0000000000..40aeb6bba2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/menu-blank.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/radiobutton.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/radiobutton.gif Binary files differnew file mode 100644 index 0000000000..b6cfa37a8e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/menu/radiobutton.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/splitpane/knob-horizontal.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/splitpane/knob-horizontal.png Binary files differnew file mode 100644 index 0000000000..da5ade6ebe --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/splitpane/knob-horizontal.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/splitpane/knob-vertical.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/splitpane/knob-vertical.png Binary files differnew file mode 100644 index 0000000000..945ad4d214 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/splitpane/knob-vertical.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/ascending.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/ascending.png Binary files differnew file mode 100644 index 0000000000..de27cce939 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/ascending.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/boolean-false.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/boolean-false.png Binary files differnew file mode 100644 index 0000000000..dce9d389bf --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/boolean-false.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/boolean-true.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/boolean-true.png Binary files differnew file mode 100644 index 0000000000..91817bbc2a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/boolean-true.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/descending.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/descending.png Binary files differnew file mode 100644 index 0000000000..9f4f9559f1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/descending.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/selectColumnOrder.png b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/selectColumnOrder.png Binary files differnew file mode 100644 index 0000000000..cb5f151e99 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/table/selectColumnOrder.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross.gif Binary files differnew file mode 100644 index 0000000000..4d40453ab4 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross_minus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross_minus.gif Binary files differnew file mode 100644 index 0000000000..d69c2d6972 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross_minus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross_plus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross_plus.gif Binary files differnew file mode 100644 index 0000000000..2102d91978 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/cross_plus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end.gif Binary files differnew file mode 100644 index 0000000000..7cd50aa02f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end_minus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end_minus.gif Binary files differnew file mode 100644 index 0000000000..d53ce116ba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end_minus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end_plus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end_plus.gif Binary files differnew file mode 100644 index 0000000000..301872a7ef --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/end_plus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/line.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/line.gif Binary files differnew file mode 100644 index 0000000000..b3d88205e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/line.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/minus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/minus.gif Binary files differnew file mode 100644 index 0000000000..b7da5b892d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/minus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/only_minus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/only_minus.gif Binary files differnew file mode 100644 index 0000000000..eea784a54f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/only_minus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/only_plus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/only_plus.gif Binary files differnew file mode 100644 index 0000000000..4fdec8c6ca --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/only_plus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/plus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/plus.gif Binary files differnew file mode 100644 index 0000000000..c006f8514f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/plus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/start_minus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/start_minus.gif Binary files differnew file mode 100644 index 0000000000..f8e5ed7a69 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/start_minus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/start_plus.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/start_plus.gif Binary files differnew file mode 100644 index 0000000000..722663c052 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/tree/start_plus.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/close.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/close.gif Binary files differnew file mode 100644 index 0000000000..d6b727338d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/close.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/maximize.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/maximize.gif Binary files differnew file mode 100644 index 0000000000..ae5e941d4f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/maximize.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/minimize.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/minimize.gif Binary files differnew file mode 100644 index 0000000000..c5b586e509 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/minimize.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/restore.gif b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/restore.gif Binary files differnew file mode 100644 index 0000000000..2910d37b78 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/resource/widget/windows/window/restore.gif diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/C.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/C.po new file mode 100644 index 0000000000..4a4e1263f8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/C.po @@ -0,0 +1,309 @@ +# (Default) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-05 13:42-0500\n" +"PO-Revision-Date: 2006-12-19 15:52+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/ar.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/ar.po new file mode 100644 index 0000000000..a729cfbd33 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/ar.po @@ -0,0 +1,309 @@ +# Arabic +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-19 16:16+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de.po new file mode 100644 index 0000000000..7ec6f49426 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de.po @@ -0,0 +1,314 @@ +# translation of de.po to German +# German +# +# Fabian Jakobs <fabian DOT jakobs AT 1und1 DOT de>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2007-01-23 17:53+0100\n" +"Last-Translator: Fabian Jakobs <fabian DOT jakobs AT 1und1 DOT de>\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.4\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "Rück" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "Tab" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "Leer" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "Enter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "Umschalt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "Strg" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "Feststell" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "Esc" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "Links" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "Hoch" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "Rechts " + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "Runter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "Bild hoch" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "Bild runter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "Ende" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "Pos1" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "Einfg" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "Entf" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "Num" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +#, fuzzy +msgid "key_short_PrintScreen" +msgstr "Drucken" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "Rollen" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "Pause" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "Win" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "Kontext" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "Rücktaste" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "Tabulator" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "Leertaste" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "Enter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "Umschalttaste" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "Steuerung" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "Feststelltaste" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "Escape" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "Pfeil links" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "Pfeil hoch" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "Pfeil rechts" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "Pfeil runter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "Bild hoch" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "Bild runter " + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "Ende" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "Position 1" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "Einfügen" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "Entfernen" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "NumLock" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +#, fuzzy +msgid "key_full_PrintScreen" +msgstr "Drucken" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "Rollen" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "Pause" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "Windowstaste" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "Kontextmenü" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Automatisch" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Vorschau (alt/neu)" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "Öffne Farbauswahl" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Farbauswahl" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "Abbruch" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "OK" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Voreinstellungen" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Details" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "Hex" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "RGB" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "HSB" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Vorheriges Jahr" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Vorheriger Monat" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "Nächster Monat" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "Nächstes Jahr" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Datum auswählen" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "Beschreibung" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "ID" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "Groß-/Kleinschreibung" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "Weiter suchen" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "Liste durchsuchen" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de_AT.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de_AT.po new file mode 100644 index 0000000000..551813a2a3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de_AT.po @@ -0,0 +1,309 @@ +# German (Austria) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-15 17:22+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de_DE.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de_DE.po new file mode 100644 index 0000000000..f6c16b0787 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/de_DE.po @@ -0,0 +1,309 @@ +# German (Germany) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-15 17:22+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/en.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/en.po new file mode 100644 index 0000000000..d2babaffc1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/en.po @@ -0,0 +1,309 @@ +# English +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-15 17:22+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/en_US.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/en_US.po new file mode 100644 index 0000000000..290dcabf75 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/en_US.po @@ -0,0 +1,309 @@ +# English (US) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-15 17:22+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/es.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/es.po new file mode 100644 index 0000000000..b9e4b45457 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/es.po @@ -0,0 +1,310 @@ +# Spanish +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-19 00:49-0500\n" +"Last-Translator: Camilo Aguilar <camilo.aguilar@gmail.com>\n" +"Language-Team: <camilo.aguilar@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: COLOMBIA\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "Retroceso" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "Tab" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "Espacio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "Intro" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "Mayús" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "Ctrl" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "BloqMayús" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "Esc" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "Izquierda" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "Arriba" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "Derecha" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "Abajo" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "RePág" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "AvPág" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "Fin" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "Inicio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "Insert" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "Supr" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "BloqNum" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "ImprPant" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "BloqDespl" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "Pausa" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "Win" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "Aplic" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "Retroceso" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "Tabulador" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "Espacio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "Intro" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "Mayúscula" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "Control" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "Bloqueo Mayúsculas" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "Escape" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "Flecha izquierda" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "Flecha arriba" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "Flecha derecha" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "Flecha abajo" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "Retroceder Página" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "Avanzar Página" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "Fin" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "Inicio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "Insertar" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "Suprimir" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "Bloqueo Numérico" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "Imprimir Pantalla" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "Bloq. Despl." + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "Pausa" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "Windows" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "Aplicaciones" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Automático" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Vista previa (viejo/nuevo)" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "Abrir selector de color" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Selector de color" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "Cancelar" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "Aceptar" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Preselecciones" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Detalles" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "Hex" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "RGB" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "HSB" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Último año" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Último mes" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "Mes siguiente" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "Año siguiente" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Seleccione una fecha" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "Descripción" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "Código" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "Sensible a mayúscula" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "Buscar siguiente" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "Buscar elementos en la lista" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/es_ES.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/es_ES.po new file mode 100644 index 0000000000..a20d056a31 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/es_ES.po @@ -0,0 +1,309 @@ +# Spanish (Spain) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-18 14:30+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/fr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/fr.po new file mode 100644 index 0000000000..d5ad55ea37 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/fr.po @@ -0,0 +1,309 @@ +# French +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-18 14:41-0500\n" +"Last-Translator: Daniel Gagnon <redalastor@gmail.com>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Automatique" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Aperçu (Nouveau/Ancien)" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "Ouvrir le sélecteur de couleurs" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Sélecteur de couleur" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "Annuller" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "OK" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Pré-réglages" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Détails" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "HEX" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "RVB" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "TSL" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Année précédente" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Mois précédant" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "Mois suivant" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "Année suivante" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Choisissez une date" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/fr_FR.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/fr_FR.po new file mode 100644 index 0000000000..475648a342 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/fr_FR.po @@ -0,0 +1,309 @@ +# French (France) +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-15 17:22+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/it.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/it.po new file mode 100644 index 0000000000..92f5a0ed53 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/it.po @@ -0,0 +1,312 @@ +# translation of it.po to Italiano +# Italian +# +# Alessandro Sala <alessandro.sala@mclink.net>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2007-01-06 13:26+0100\n" +"Last-Translator: Alessandro Sala <alessandro.sala@mclink.net>\n" +"Language-Team: Italiano <it@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "Backspace" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "Tab" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "Spazio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "Invio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "Maiusc" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "Ctrl" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "Bloc Maiusc" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "Esc" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "Sinistra" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "Su" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "Destra" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "Giù" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "Pag Su" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "Pag Giù" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "Fine" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "Inizio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "Ins" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "Canc" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "Bloc Num" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "Stamp" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "Bloc Scorr" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "Pausa" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "Win" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "Menu" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "Backspace" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "Tabulazione" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "Spazio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "Invio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "Maiuscole" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "Control" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "Blocca Maiuscole" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "Escape" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "Freccia Sinistra" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "Freccia Su" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "Freccia Destra" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "Freccia Giù" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "Pagina Su" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "Pagina Giù" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "Fine" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "Inizio" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "Inserisci" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "Cancella" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "Blocca Numeri" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "Stampa Schermo" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "Blocca Scorrimento" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "Pausa" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "Tasto Windows" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "Tasto Menu" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Automatico" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Anteprima (Vecchio/Nuovo)" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "Apri il Selettore dei Colori" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Selettore dei Colori" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "Annulla" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "OK" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Predefiniti" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Dettagli" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "Hex" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "RGB" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "TSL" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Anno precedente" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Mese precedente" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "Mese successivo" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "Anno successivo" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Scegli una data" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "Descrizione" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "ID" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "Maiuscole/minuscole" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "Cerca la prossima occorrenza" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "Cerca tra le voci della lista" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/ru.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/ru.po new file mode 100644 index 0000000000..b21d38c12c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/ru.po @@ -0,0 +1,309 @@ +# Russian +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-20 23:13+0200\n" +"Last-Translator: <zindel@gammacenter.com>\n" +"Language-Team: <en@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Автоматически" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Предварительный просмотр" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "Выбор цвета" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Выбор цвета" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "Отмена" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "ОК" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Настройки" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Детали" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Пред. год" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Пред. месяц" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "След. месяц" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "След. год" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Выберите дату" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/sv.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/sv.po new file mode 100644 index 0000000000..66cb30e089 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/sv.po @@ -0,0 +1,308 @@ +# Swedish +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-19 11:01+0100\n" +"Last-Translator: Henric Johansson <henric.johansson@mindset.se>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "BS" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "Tabb" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "Space" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "Enter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "Shift" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "CTRL" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "Caps" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "ESC" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "Vänster" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "Upp" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "Höger" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "Ner" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "PGUP" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "PGDN" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "END" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "HOME" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "INS" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "DEL" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "NUM" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "PRNSCN" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "SCL" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "Pause" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "Win" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "Apps" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "Backspace" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "Tabb" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "Blanksteg" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "Enter" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "Shift" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "Control" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "Alt" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "CapsLock" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "Meta" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "Escape" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "Vänster" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "Upp" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "Höger" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "Ner" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "PageUp" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "PageDown" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "End" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "Home" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "Insert" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "Delete" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "NumLock" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "PrintScreen" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "Scroll" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "Pause" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "Win" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "Apps" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Automatiskt" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Förhandsgranska (Gammal/Ny)" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "Öppna färgväljare" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Färgväljare" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "Avbryt" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "OK" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Förinställningar" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Detaljer" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "Hex" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "RGB" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "HSB" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Föregående år" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Föregående månad" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "Nästa månad" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "Nästa år" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Välj ett datum" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/tr.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/tr.po new file mode 100644 index 0000000000..00747a6131 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/tr.po @@ -0,0 +1,311 @@ +# Turkish +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-18 21:14+0200\n" +"Last-Translator: Fatih Tolga Ata <fatih@diyezon.com>\n" +"Language-Team: <fatih@tullab.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Turkish\n" +"X-Poedit-Country: TURKEY\n" +"X-Poedit-SourceCharset: utf-8\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "Otomatik" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "Önizleme (Eski/Yeni)" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "RenkSeçiciyi Aç" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "Renk Seçici" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "İptal" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "Tamam" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "Hazırlar" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "Ayrıntılar" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "Onaltılık" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "RGB" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "HSB" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "Geçen yıl" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "Geçen ay" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "Sonraki ay" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "Sonraki yıl" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "Bir tarih seç" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/zh.po b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/zh.po new file mode 100644 index 0000000000..a0081c238a --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/zh.po @@ -0,0 +1,309 @@ +# Chinese +# +msgid "" +msgstr "" +"Project-Id-Version: qooxdoo framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-01-26 10:36+0100\n" +"PO-Revision-Date: 2006-12-19 16:16+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANSLATION: short representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:61 +msgid "key_short_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:62 +msgid "key_short_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:63 +msgid "key_short_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:64 +msgid "key_short_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:65 +msgid "key_short_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:66 +msgid "key_short_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:67 +msgid "key_short_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:68 +msgid "key_short_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:69 +msgid "key_short_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:70 +msgid "key_short_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:71 +msgid "key_short_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:72 +msgid "key_short_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:73 +msgid "key_short_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:74 +msgid "key_short_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:75 +msgid "key_short_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:76 +msgid "key_short_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:77 +msgid "key_short_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:78 +msgid "key_short_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:79 +msgid "key_short_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:80 +msgid "key_short_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:81 +msgid "key_short_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:82 +msgid "key_short_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:83 +msgid "key_short_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:84 +msgid "key_short_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:85 +msgid "key_short_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:86 +msgid "key_short_Apps" +msgstr "" + +#. TRANSLATION: full/long representation of key names +#: ../../../frontend/framework/source/class/qx/locale/Key.js:89 +msgid "key_full_Backspace" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:90 +msgid "key_full_Tab" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:91 +msgid "key_full_Space" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:92 +msgid "key_full_Enter" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:93 +msgid "key_full_Shift" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:94 +msgid "key_full_Control" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:95 +msgid "key_full_Alt" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:96 +msgid "key_full_CapsLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:97 +msgid "key_full_Meta" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:98 +msgid "key_full_Escape" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:99 +msgid "key_full_Left" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:100 +msgid "key_full_Up" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:101 +msgid "key_full_Right" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:102 +msgid "key_full_Down" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:103 +msgid "key_full_PageUp" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:104 +msgid "key_full_PageDown" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:105 +msgid "key_full_End" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:106 +msgid "key_full_Home" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:107 +msgid "key_full_Insert" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:108 +msgid "key_full_Delete" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:109 +msgid "key_full_NumLock" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:110 +msgid "key_full_PrintScreen" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:111 +msgid "key_full_Scroll" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:112 +msgid "key_full_Pause" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:113 +msgid "key_full_Win" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/locale/Key.js:114 +msgid "key_full_Apps" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:81 +msgid "Automatic" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:135 +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:292 +msgid "Preview (Old/New)" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:161 +msgid "Open ColorSelector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorPopup.js:175 +msgid "Color Selector" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:143 +msgid "Cancel" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:144 +msgid "OK" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:236 +msgid "Presets" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:280 +msgid "Details" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:325 +msgid "Hex" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:348 +msgid "RGB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/ColorSelector.js:376 +msgid "HSB" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:52 +msgid "Last year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:53 +msgid "Last month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:54 +msgid "Next month" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooser.js:55 +msgid "Next year" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/component/DateChooserButton.js:91 +msgid "Choose a date" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "Description" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:67 +msgid "ID" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:620 +msgid "Case sensitive" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:657 +msgid "Search next occurrence" +msgstr "" + +#: ../../../frontend/framework/source/class/qx/ui/form/ComboBoxEx.js:694 +msgid "Search items in list" +msgstr "" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/generator.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/generator.py new file mode 100755 index 0000000000..76df2d923b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/generator.py @@ -0,0 +1,1083 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# * Alessandro Sala (asala) +# +################################################################################ + +import sys, re, os, optparse, math + +# reconfigure path to import own modules from modules subfolder +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), "modules")) + +import config, tokenizer, loader, api, tree, treegenerator, settings, resources +import filetool, stringoptimizer, optparseext, variableoptimizer, obfuscator, compiler +import migrator, textutil, graph + + + + + + +def getparser(): + parser = optparse.OptionParser("usage: %prog [options]", option_class=optparseext.ExtendAction) + + + ################################################################################# + # GENERAL + ################################################################################# + + # From/To File + parser.add_option("--from-file", dest="fromFile", metavar="FILENAME", help="Read options from FILENAME.") + parser.add_option("--export-to-file", dest="exportToFile", metavar="FILENAME", help="Store options to FILENAME.") + + # Directories (Lists, Match using index) + parser.add_option("--class-path", action="extend", dest="classPath", metavar="DIRECTORY", type="string", default=[], help="Define a script input directory.") + parser.add_option("--class-uri", action="extend", dest="classUri", metavar="PATH", type="string", default=[], help="Define a script path for the source version.") + parser.add_option("--class-encoding", action="extend", dest="classEncoding", metavar="ENCODING", type="string", default=[], help="Define the encoding for a script input directory.") + parser.add_option("--resource-input", action="extend", dest="resourceInput", metavar="DIRECTORY", type="string", default=[], help="Define a resource input directory.") + parser.add_option("--resource-output", action="extend", dest="resourceOutput", metavar="DIRECTORY", type="string", default=[], help="Define a resource output directory.") + + # Available Actions + parser.add_option("--generate-compiled-script", action="store_true", dest="generateCompiledScript", default=False, help="Compile source files.") + parser.add_option("--generate-source-script", action="store_true", dest="generateSourceScript", default=False, help="Generate source version.") + parser.add_option("--generate-api-documentation", action="store_true", dest="generateApiDocumentation", default=False, help="Generate API documentation.") + parser.add_option("--copy-resources", action="store_true", dest="copyResources", default=False, help="Copy resource files.") + parser.add_option("--fix-source", action="store_true", dest="fixSource", default=False, help="Fix source files") + parser.add_option("--pretty-print", action="store_true", dest="prettyPrint", default=False, help="Pretty print source code.") + parser.add_option("--migrate-source", action="store_true", dest="migrateSource", default=False, help="Migrate existing code to new version.") + + # Debug Actions + parser.add_option("--store-tokens", action="store_true", dest="storeTokens", default=False, help="Store tokenized content of source files. (Debugging)") + parser.add_option("--store-tree", action="store_true", dest="storeTree", default=False, help="Store tree content of source files. (Debugging)") + parser.add_option("--print-files", action="store_true", dest="printFiles", default=False, help="Output known files. (Debugging)") + parser.add_option("--print-modules", action="store_true", dest="printModules", default=False, help="Output known modules. (Debugging)") + parser.add_option("--print-files-without-modules", action="store_true", dest="printFilesWithoutModules", default=False, help="Output files which have no module connection. (Debugging)") + parser.add_option("--print-includes", action="store_true", dest="printIncludes", default=False, help="Output sorted file list. (Debugging)") + parser.add_option("--print-dependencies", action="store_true", dest="printDeps", default=False, help="Output dependencies of files. (Debugging)") + parser.add_option("--dependencies-graphviz-file", dest="depDotFile", metavar="FILENAME", help="Save dependencies as graphviz dot file. (Debugging)") + + # Output files + parser.add_option("--source-script-file", dest="sourceScriptFile", metavar="FILENAME", help="Name of output file from source build process.") + parser.add_option("--source-template-input-file", dest="sourceTemplateInputFile", metavar="FILENAME", help="Name of a template file to patch") + parser.add_option("--source-template-output-file", dest="sourceTemplateOutputFile", metavar="FILENAME", help="Name of the resulting file to store the modified template to.") + parser.add_option("--source-template-replace", dest="sourceTemplateReplace", default="<!-- qooxdoo-script-block -->", metavar="CODE", help="Content of the template which should be replaced with the script block.") + parser.add_option("--compiled-script-file", dest="compiledScriptFile", metavar="FILENAME", help="Name of output file from compiler.") + parser.add_option("--api-documentation-json-file", dest="apiDocumentationJsonFile", metavar="FILENAME", help="Name of JSON API file.") + parser.add_option("--api-documentation-xml-file", dest="apiDocumentationXmlFile", metavar="FILENAME", help="Name of XML API file.") + parser.add_option("--settings-script-file", dest="settingsScriptFile", metavar="FILENAME", help="Name of settings script file.") + + # Encoding + parser.add_option("--script-output-encoding", dest="scriptOutputEncoding", default="utf-8", metavar="ENCODING", help="Defines the encoding used for script output files.") + parser.add_option("--xml-output-encoding", dest="xmlOutputEncoding", default="utf-8", metavar="ENCODING", help="Defines the encoding used for XML output files.") + + + + ################################################################################# + # OPTIONS + ################################################################################# + + # General options + parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=False, help="Quiet output mode.") + parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Verbose output mode.") + parser.add_option("-d", "--debug", action="store_true", dest="enableDebug", help="Enable debug mode.") + parser.add_option("--version", dest="version", default="0.0", metavar="VERSION", help="Version number of qooxdoo") + parser.add_option("--package-id", dest="packageId", default="", metavar="ID", help="Defines a package ID (required for string optimization etc.)") + parser.add_option("--disable-internal-check", action="store_true", dest="disableInternalCheck", default=False, help="Disable check of modifications to internal files.") + + # Options for source and compiled version + parser.add_option("--define-runtime-setting", action="append", dest="defineRuntimeSetting", metavar="NAMESPACE.KEY:VALUE", default=[], help="Define a setting.") + parser.add_option("--add-new-lines", action="store_true", dest="addNewLines", default=False, help="Keep newlines in compiled files.") + + # Options for compiled version + parser.add_option("--add-file-ids", action="store_true", dest="addFileIds", default=False, help="Add file IDs to compiled output.") + parser.add_option("--optimize-strings", action="store_true", dest="optimizeStrings", default=False, help="Optimize strings. Increase mshtml performance.") + parser.add_option("--optimize-variables", action="store_true", dest="optimizeVariables", default=False, help="Optimize variables. Reducing size.") + parser.add_option("--optimize-variables-skip-prefix", action="store", dest="optimizeVariablesSkipPrefix", metavar="PREFIX", default="", help="Skip optimization of variables beginning with PREFIX [default: optimize all variables].") + parser.add_option("--obfuscate-identifiers", action="store_true", dest="obfuscateIdentifiers", default=False, help="Obfuscate public names like function names. (ALPHA!)") + + # Options for resource copying + parser.add_option("--enable-resource-filter", action="store_true", dest="enableResourceFilter", default=False, help="Enable filtering of resource files used by classes (based on #embed).") + + # Options for token/tree storage + parser.add_option("--token-output-directory", dest="tokenOutputDirectory", metavar="DIRECTORY", help="Define output directory for tokenizer result of the incoming JavaScript files. (Debugging)") + parser.add_option("--tree-output-directory", dest="treeOutputDirectory", metavar="DIRECTORY", help="Define output directory for generated tree of the incoming JavaScript files. (Debugging)") + + # Cache Directory + parser.add_option("--cache-directory", dest="cacheDirectory", metavar="DIRECTORY", help="If this is defined the loader trys to use cache to optimize the performance.") + + # Options for migration support + parser.add_option("--migration-target", dest="migrationTarget", metavar="VERSION", help="Define the target for migration of source code.") + parser.add_option("--migration-input", action="extend", dest="migrationInput", metavar="DIRECTORY", type="string", default=[], help="Define additional directories for to directories to migrate e.g. HTML files, ...") + + + + + ################################################################################# + # INCLUDE/EXCLUDE + ################################################################################# + + # Include/Exclude + parser.add_option("-i", "--include", action="extend", dest="includeWithDeps", metavar="ID", type="string", default=[], help="Include ID") + parser.add_option("-e", "--exclude", action="extend", dest="excludeWithDeps", metavar="ID", type="string", default=[], help="Exclude ID") + parser.add_option("--include-without-dependencies", action="extend", dest="includeWithoutDeps", metavar="ID", type="string", default=[], help="Include ID") + parser.add_option("--exclude-without-dependencies", action="extend", dest="excludeWithoutDeps", metavar="ID", type="string", default=[], help="Exclude ID") + + # Include/Exclude options + parser.add_option("--disable-auto-dependencies", action="store_false", dest="enableAutoDependencies", default=True, help="Disable detection of dependencies.") + + return parser + + + + + + +def argparser(cmdlineargs): + + # Parse arguments + (options, args) = getparser().parse_args(cmdlineargs) + + # Export to file + if options.exportToFile != None: + print + print " EXPORTING:" + print "----------------------------------------------------------------------------" + + print " * Translating options..." + + optionString = "# Exported configuration from build.py\n\n" + ignoreValue = True + lastWasKey = False + + for arg in cmdlineargs: + if arg == "--export-to-file": + ignoreValue = True + + elif arg.startswith("--"): + if lastWasKey: + optionString += "\n" + + optionString += arg[2:] + ignoreValue = False + lastWasKey = True + + elif arg.startswith("-"): + print " - Could not export short argument: %s" % arg + optionString += "\n# Ignored short argument %s\n" % arg + ignoreValue = True + + elif not ignoreValue: + optionString += " = %s\n" % arg + ignoreValue = True + lastWasKey = False + + + + print " * Export to file: %s" % options.exportToFile + filetool.save(options.exportToFile, optionString) + + sys.exit(0) + + # Read from file + elif options.fromFile != None: + + print + print " INITIALIZATION:" + print "----------------------------------------------------------------------------" + + print " * Reading configuration..." + + # Convert file content into arguments + fileargs = {} + fileargpos = 0 + fileargid = "default" + currentfileargs = [] + fileargs[fileargid] = currentfileargs + + alternativeFormatBegin = re.compile("\s*\[\s*") + alternativeFormatEnd = re.compile("\s*\]\s*=\s*") + emptyLine = re.compile("^\s*$") + + for line in file(options.fromFile).read().split("\n"): + line = line.strip() + + if emptyLine.match(line) or line.startswith("#") or line.startswith("//"): + continue + + # Translating... + line = alternativeFormatBegin.sub(" = ", line) + line = alternativeFormatEnd.sub(":", line) + + # Splitting line + line = line.split("=") + + # Extract key element + key = line.pop(0).strip() + + # Separate packages + if key == "package": + fileargpos += 1 + fileargid = line[0].strip() + + print " - Found package: %s" % fileargid + + currentfileargs = [] + fileargs[fileargid] = currentfileargs + continue + + currentfileargs.append("--%s" % key) + + if len(line) > 0: + value = line[0].strip() + currentfileargs.append(value) + + # Parse + defaultargs = fileargs["default"] + + if len(fileargs) > 1: + (fileDb, moduleDb) = load(getparser().parse_args(defaultargs)[0]) + + if options.obfuscateIdentifiers: + sharednames = {} + + for filearg in fileargs: + if filearg == "default": + continue + + combinedargs = [] + combinedargs.extend(defaultargs) + combinedargs.extend(fileargs[filearg]) + + options = getparser().parse_args(defaultargs)[0] + findnames(fileDb, moduleDb, options, sharednames) + + names = obfuscator.sort(sharednames) + + for filearg in fileargs: + if filearg == "default": + continue + + print + print + print + print + print " PACKAGE: %s" % filearg + print "----------------------------------------------------------------------------" + + combinedargs = [] + combinedargs.extend(defaultargs) + combinedargs.extend(fileargs[filearg]) + + options = getparser().parse_args(combinedargs)[0] + + if options.obfuscateIdentifiers: + execute(fileDb, moduleDb, options, filearg, names) + else: + execute(fileDb, moduleDb, options, filearg) + + else: + options = getparser().parse_args(defaultargs)[0] + (fileDb, moduleDb) = load(options) + + if options.obfuscateIdentifiers: + execute(fileDb, moduleDb, options, "", obfuscator.sort(findnames(fileDb, moduleDb, options))) + else: + execute(fileDb, moduleDb, options, "") + + else: + print + print " INITIALIZATION:" + print "----------------------------------------------------------------------------" + + print " * Processing arguments..." + + (fileDb, moduleDb) = load(options) + + if options.obfuscateIdentifiers: + execute(fileDb, moduleDb, options, options.packageId, obfuscator.sort(findnames(fileDb, moduleDb, options))) + else: + execute(fileDb, moduleDb, options, options.packageId) + + + + + + + +def main(): + if len(sys.argv[1:]) == 0: + basename = os.path.basename(sys.argv[0]) + print "usage: %s [options]" % basename + print "Try '%s -h' or '%s --help' to show the help message." % (basename, basename) + sys.exit(1) + + argparser(sys.argv[1:]) + + + + + + +def load(options): + + ###################################################################### + # SOURCE LOADER + ###################################################################### + + print + print " SOURCE LOADER:" + print "----------------------------------------------------------------------------" + + if options.classPath == None or len(options.classPath) == 0: + if len(options.migrationInput) == 0: + basename = os.path.basename(sys.argv[0]) + print "You must define at least one script input directory!" + print "usage: %s [options]" % basename + print "Try '%s -h' or '%s --help' to show the help message." % (basename, basename) + sys.exit(1) + + (fileDb, moduleDb) = loader.indexScriptInput(options) + + + + + + ###################################################################### + # DEBUG OUTPUT JOBS + ###################################################################### + + if options.printFiles: + print + print " OUTPUT OF KNOWN FILES:" + print "----------------------------------------------------------------------------" + print " * These are all known files:" + for fileEntry in fileDb: + print " - %s (%s)" % (fileEntry, fileDb[fileEntry]["path"]) + + if options.printModules: + print + print " OUTPUT OF KNOWN MODULES:" + print "----------------------------------------------------------------------------" + print " * These are all known modules:" + for moduleEntry in moduleDb: + print " * %s" % moduleEntry + for fileEntry in moduleDb[moduleEntry]: + print " - %s" % fileEntry + + if options.printFilesWithoutModules: + print + print " OUTPUT OF FILES WHICH HAVE NO MODULE CONNECTION:" + print "----------------------------------------------------------------------------" + print " * These are all files without a module connection:" + for fileEntry in fileDb: + fileFound = False + + for moduleEntry in moduleDb: + for moduleFile in moduleDb[moduleEntry]: + if moduleFile == fileEntry: + fileFound = True + break + + if not fileFound: + print " - %s" % fileEntry + + + + return fileDb, moduleDb + + + + + +def findnames(fileDb, moduleDb, options, names={}): + + print + print " SEARCHING FOR IDENTIFIERS:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Searching..." + else: + print " * Searching: ", + + + sortedIncludeList = loader.getSortedList(options, fileDb, moduleDb) + + for fileId in sortedIncludeList: + if options.verbose: + print " - %s" % fileId + + else: + sys.stdout.write(".") + sys.stdout.flush() + + obfuscator.search(loader.getTree(fileDb, fileId, options), names) + + if not options.verbose: + print + + return names + + + + + + + + +def execute(fileDb, moduleDb, options, pkgid="", names=[]): + + additionalOutput = [] + + + ###################################################################### + # SORT OF INCLUDE LIST + ###################################################################### + + print + print " SORT OF INCLUDE LIST:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Include (with dependencies): %s" % options.includeWithDeps + print " * Include (without dependencies): %s" % options.includeWithoutDeps + print " * Exclude (with dependencies): %s" % options.excludeWithDeps + print " * Exclude (without dependencies): %s" % options.excludeWithoutDeps + + print " * Sorting %s classes..." % len(fileDb) + + sortedIncludeList = loader.getSortedList(options, fileDb, moduleDb) + + if len(sortedIncludeList) == 0: + print " - No class files to include. Exciting!" + sys.exit(1) + else: + print " - Including %s classes" % len(sortedIncludeList) + + if options.printIncludes: + print + print " PRINT OF INCLUDE ORDER:" + print "----------------------------------------------------------------------------" + print " * The files will be included in this order:" + for fileId in sortedIncludeList: + print " - %s" % fileId + + if options.printDeps: + print + print " OUTPUT OF DEPENDENCIES:" + print "----------------------------------------------------------------------------" + print " * These are all included files with their dependencies:" + for fileId in sortedIncludeList: + print " - %s" % fileId + if len(fileDb[fileId]["loadtimeDeps"]) > 0: + print " - Loadtime: " + for depEntry in fileDb[fileId]["loadtimeDeps"]: + print " - %s" % depEntry + + if len(fileDb[fileId]["afterDeps"]) > 0: + print " - After: " + for depEntry in fileDb[fileId]["afterDeps"]: + print " - %s" % depEntry + + if len(fileDb[fileId]["runtimeDeps"]) > 0: + print " - Runtime: " + for depEntry in fileDb[fileId]["runtimeDeps"]: + print " - %s" % depEntry + + if len(fileDb[fileId]["loadDeps"]) > 0: + print " - Load: " + for depEntry in fileDb[fileId]["loadDeps"]: + print " - %s" % depEntry + + if len(fileDb[fileId]["optionalDeps"]) > 0: + print " - Optional: " + for depEntry in fileDb[fileId]["optionalDeps"]: + print " - %s" % depEntry + + + + + + ###################################################################### + # GRAPHVIZ OUTPUT + ###################################################################### + + if options.depDotFile: + graph.store(fileDb, sortedIncludeList, options) + + + + + + + ###################################################################### + # SOURCE MIGRATION + ###################################################################### + + if options.migrateSource: + print + print " SOURCE MIGRATION:" + print "----------------------------------------------------------------------------" + + print " * Migrate Source Code..." + + migrator.handle(sortedIncludeList, fileDb, options) + + # Return after migration: Ignore other jobs + return + + + + + + ###################################################################### + # GENERATION OF PRETTY PRINTED CODE + ###################################################################### + + if options.fixSource: + print + print " FIX SOURCE CODE:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Fixing code..." + else: + print " * Fixing code: ", + + for fileId in sortedIncludeList: + if options.verbose: + print " - Reading %s" % fileId + + fileEntry = fileDb[fileId] + + filePath = fileEntry["path"] + fileEncoding = fileEntry["encoding"] + + fileContent = filetool.read(filePath, fileEncoding) + fixedContent = textutil.removeTrailingSpaces(textutil.tab2Space(textutil.any2Unix(fileContent), 2)) + + if fixedContent != fileContent: + if options.verbose: + print " - Storing modifications..." + else: + sys.stdout.write("!") + sys.stdout.flush() + + filetool.save(filePath, fixedContent, fileEncoding) + + elif not options.verbose: + sys.stdout.write(".") + sys.stdout.flush() + + if not options.verbose: + print + + # Return after fixing: Ignore other jobs + return + + + + + + + ###################################################################### + # GENERATION OF PRETTY PRINTED CODE + ###################################################################### + + if options.prettyPrint: + print + print " GENERATION OF PRETTY PRINTED CODE:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Pretty printing..." + else: + print " * Pretty printing: ", + + for fileId in sortedIncludeList: + if options.verbose: + print " - Compiling %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + prettyFileContent = compiler.compile(loader.getTree(fileDb, fileId, options), True) + + if not prettyFileContent.endswith("\n"): + prettyFileContent += "\n" + + filetool.save(fileDb[fileId]["path"], prettyFileContent) + + if not options.verbose: + print + + # Return after pretty print: Ignore other jobs + return + + + + ###################################################################### + # STRING OPTIMIZATION + ###################################################################### + + if options.optimizeStrings: + print + print " STRING OPTIMIZATION:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Searching strings..." + else: + print " * Searching strings: ", + + stringMap = {} + + for fileId in sortedIncludeList: + if options.verbose: + print " - %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + localMap = loader.getStrings(fileDb, fileId, options) + + for value in localMap: + if value in stringMap: + stringMap[value] += localMap[value] + else: + stringMap[value] = localMap[value] + + if not options.verbose: + print + + counter = 0 + for value in stringMap: + counter += stringMap[value] + + stringList = stringoptimizer.sort(stringMap) + + print " * Found %s strings (used %s times)" % (len(stringMap), counter) + + if options.verbose: + print " * Replacing strings..." + else: + print " * Replacing strings: ", + + for fileId in sortedIncludeList: + if options.verbose: + print " - %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + stringoptimizer.replace(loader.getTree(fileDb, fileId, options), stringList, "$" + pkgid, options.verbose) + + if not options.verbose: + print + + print " * Generating replacement..." + additionalOutput.append(stringoptimizer.replacement(stringList, "$" + pkgid)) + + + + + + + ###################################################################### + # LOCAL VARIABLE OPTIMIZATION + ###################################################################### + + if options.optimizeVariables: + print + print " LOCAL VARIABLE OPTIMIZATION:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Optimizing variables..." + else: + print " * Optimizing variables: ", + + for fileId in sortedIncludeList: + if options.verbose: + print " - %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + variableoptimizer.search(loader.getTree(fileDb, fileId, options), [], 0, "$", skipPrefix = options.optimizeVariablesSkipPrefix, debug = options.enableDebug) + + if not options.verbose: + print + + + + + + + ###################################################################### + # NAME OBFUSCATION + ###################################################################### + + if options.obfuscateIdentifiers: + print + print " OBFUSCATE IDENTIFIERS:" + print "----------------------------------------------------------------------------" + + if options.verbose: + print " * Obfuscating identifiers..." + else: + print " * Obfuscating identifiers: ", + + counter = 0 + + for fileId in sortedIncludeList: + if options.verbose: + print " - %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + counter += obfuscator.update(loader.getTree(fileDb, fileId, options), names, "$$") + + if not options.verbose: + print + + print " * Updated %s names" % counter + + + + + + + ###################################################################### + # TOKEN STORAGE + ###################################################################### + + if options.storeTokens: + print + print " TOKEN STORAGE:" + print "----------------------------------------------------------------------------" + + if options.tokenOutputDirectory == None: + print " * You must define the token output directory!" + sys.exit(1) + + if options.verbose: + print " * Storing tokens..." + else: + print " * Storing tokens: ", + + for fileId in sortedIncludeList: + tokenString = tokenizer.convertTokensToString(loader.getTokens(fileDb, fileId, options)) + + if options.verbose: + print " * writing tokens for %s (%s KB)..." % (fileIdm, len(tokenString) / 1000.0) + else: + sys.stdout.write(".") + sys.stdout.flush() + + filetool.save(os.path.join(filetool.normalize(options.tokenOutputDirectory), fileId + config.TOKENEXT), tokenString) + + if not options.verbose: + print + + + + + ###################################################################### + # TREE STORAGE + ###################################################################### + + if options.storeTree: + print + print " TREE STORAGE:" + print "----------------------------------------------------------------------------" + + if options.treeOutputDirectory == None: + print " * You must define the tree output directory!" + sys.exit(1) + + if options.verbose: + print " * Storing tree..." + else: + print " * Storing tree: ", + + for fileId in sortedIncludeList: + treeString = "<?xml version=\"1.0\" encoding=\"" + options.xmlOutputEncoding + "\"?>\n" + tree.nodeToXmlString(loader.getTree(fileDb, fileId, options)) + + if options.verbose: + print " * writing tree for %s (%s KB)..." % (fileId, len(treeString) / 1000.0) + else: + sys.stdout.write(".") + sys.stdout.flush() + + filetool.save(os.path.join(filetool.normalize(options.treeOutputDirectory), fileId + config.XMLEXT), treeString) + + if not options.verbose: + print + + + + + + ###################################################################### + # GENERATION OF API + ###################################################################### + + if options.generateApiDocumentation: + print + print " GENERATION OF API:" + print "----------------------------------------------------------------------------" + + if options.apiDocumentationJsonFile == None and options.apiDocumentationXmlFile == None: + print " * You must define one of JSON or XML API documentation file!" + + docTree = None + + if options.verbose: + print " * Generating API tree..." + else: + print " * Generating API tree: ", + + for fileId in sortedIncludeList: + if options.verbose: + print " - %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + docTree = api.createDoc(loader.getTree(fileDb, fileId, options), docTree) + + if not options.verbose: + print + + if docTree: + print " * Finalizing tree..." + api.postWorkPackage(docTree, docTree) + + if options.apiDocumentationXmlFile != None: + print " * Writing XML API file to %s" % options.apiDocumentationXmlFile + + xmlContent = "<?xml version=\"1.0\" encoding=\"" + options.xmlOutputEncoding + "\"?>\n" + + if options.addNewLines: + xmlContent += "\n" + tree.nodeToXmlString(docTree) + else: + xmlContent += tree.nodeToXmlString(docTree, "", "", "") + + filetool.save(options.apiDocumentationXmlFile, xmlContent, options.xmlOutputEncoding) + + if options.apiDocumentationJsonFile != None: + print " * Writing JSON API file to %s" % options.apiDocumentationJsonFile + + if options.addNewLines: + jsonContent = tree.nodeToJsonString(docTree) + else: + jsonContent = tree.nodeToJsonString(docTree, "", "", "") + + filetool.save(options.apiDocumentationJsonFile, jsonContent, options.scriptOutputEncoding) + + + + + + ###################################################################### + # CREATE COPY OF RESOURCES + ###################################################################### + + if options.copyResources: + + print + print " CREATE COPY OF RESOURCES:" + print "----------------------------------------------------------------------------" + + resources.copy(options, sortedIncludeList, fileDb) + + + + + + + ###################################################################### + # GENERATION OF SETTINGS + ###################################################################### + + if options.generateSourceScript or options.generateCompiledScript: + settingsStr = "" + + if len(options.defineRuntimeSetting) != 0: + print + print " GENERATION OF SETTINGS:" + print "----------------------------------------------------------------------------" + + print " * Processing input data..." + settingsStr = settings.generate(options) + + if options.settingsScriptFile: + print " * Storing result to %s" % options.settingsScriptFile + filetool.save(options.settingsScriptFile, settingsStr) + + # clear settings for build and source + settingsStr = "" + + + + + + ###################################################################### + # GENERATION OF SOURCE VERSION + ###################################################################### + + if options.generateSourceScript: + print + print " GENERATION OF SOURCE SCRIPT:" + print "----------------------------------------------------------------------------" + + if options.sourceScriptFile == None and (options.sourceTemplateInputFile == None or options.sourceTemplateOutputFile == None): + print " * You must define at least one source script file or template input/output." + sys.exit(1) + + if options.sourceScriptFile: + options.sourceScriptFile = os.path.normpath(options.sourceScriptFile) + + if options.sourceTemplateInputFile: + options.sourceTemplateInputFile = os.path.normpath(options.sourceTemplateInputFile) + + if options.sourceTemplateOutputFile: + options.sourceTemplateOutputFile = os.path.normpath(options.sourceTemplateOutputFile) + + + print " * Generating script block..." + + # Handling line feed setting + sourceLineFeed = ""; + if options.addNewLines: + sourceLineFeed = "\n"; + + + # Generating inline code... + inlineCode = "" + inlineCode += settingsStr + sourceLineFeed + inlineCode += "qx.IS_SOURCE=true;%s" % sourceLineFeed + inlineCode += "qx.VERSION=\"%s\";%s" % (options.version, sourceLineFeed) + inlineCode += "".join(additionalOutput) + + + # Generating script block + scriptBlocks = "" + scriptBlocks += '<script type="text/javascript">%s</script>' % inlineCode + for fileId in sortedIncludeList: + if fileDb[fileId]["classUri"] == None: + print " * Missing class URI definition for class path %s." % fileDb[fileId]["classPath"] + sys.exit(1) + + scriptBlocks += '<script type="text/javascript" src="%s%s"></script>' % (os.path.join(fileDb[fileId]["classUri"], fileDb[fileId]["pathId"].replace(".", os.sep)), config.JSEXT) + scriptBlocks += sourceLineFeed + + + + if options.sourceScriptFile != None: + print " * Storing includer as %s..." % options.sourceScriptFile + sourceScript = "document.write('%s');" % scriptBlocks.replace("'", "\\'") + if options.addNewLines: + sourceScript = sourceScript.replace("\n", "\\\n") + filetool.save(options.sourceScriptFile, sourceScript, options.scriptOutputEncoding) + + if options.sourceTemplateInputFile != None and options.sourceTemplateOutputFile != None: + print " * Patching template: %s => %s" % (options.sourceTemplateInputFile, options.sourceTemplateOutputFile) + tmpl = filetool.read(options.sourceTemplateInputFile) + res = tmpl.replace(options.sourceTemplateReplace, scriptBlocks) + filetool.save(options.sourceTemplateOutputFile, res, options.scriptOutputEncoding) + + + + + + ###################################################################### + # GENERATION OF COMPILED VERSION + ###################################################################### + + if options.generateCompiledScript: + print + print " GENERATION OF COMPILED SCRIPT:" + print "----------------------------------------------------------------------------" + + buildLineFeed = ""; + if options.addNewLines: + buildLineFeed = "\n"; + + inlineCode = "" + inlineCode += settingsStr + buildLineFeed + inlineCode += "qx.IS_SOURCE=false;%s" % buildLineFeed + inlineCode += "qx.VERSION=\"%s\";%s" % (options.version, buildLineFeed) + inlineCode += "".join(additionalOutput) + + compiledOutput = inlineCode + + if options.compiledScriptFile == None: + print " * You must define the compiled script file!" + sys.exit(1) + + if options.verbose: + print " * Compiling..." + else: + print " * Compiling: ", + + for fileId in sortedIncludeList: + if options.verbose: + print " - Compiling %s" % fileId + else: + sys.stdout.write(".") + sys.stdout.flush() + + compiledFileContent = compiler.compile(loader.getTree(fileDb, fileId, options), False, options.addNewLines, options.enableDebug) + + if options.addFileIds: + compiledOutput += "\n\n\n/* ID: " + fileId + " */\n" + compiledFileContent + "\n" + else: + compiledOutput += compiledFileContent + + if not compiledOutput.endswith(";") and not compiledOutput.endswith("\n"): + compiledOutput += ";" + + if not options.verbose: + print + + print " * Storing output as %s..." % options.compiledScriptFile + filetool.save(options.compiledScriptFile, compiledOutput, options.scriptOutputEncoding) + + + + + + + +###################################################################### +# MAIN LOOP +###################################################################### + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/freedesktop_spec.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/freedesktop_spec.dat new file mode 100644 index 0000000000..28093bad91 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/freedesktop_spec.dat @@ -0,0 +1,273 @@ +################################################################################ +# +# Freedesktop Icon Naming Specification 0.8 +# http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html +# +################################################################################ + +actions/address-book-new +actions/application-exit +actions/appointment-new +actions/contact-new +actions/dialog-cancel +actions/dialog-close +actions/dialog-ok +actions/document-new +actions/document-open +actions/document-open-recent +actions/document-page-setup +actions/document-print +actions/document-print-preview +actions/document-properties +actions/document-revert +actions/document-save +actions/document-save-as +actions/edit-copy +actions/edit-cut +actions/edit-delete +actions/edit-find +actions/edit-find-replace +actions/edit-paste +actions/edit-redo +actions/edit-select-all +actions/edit-undo +actions/folder-new +actions/format-indent-less +actions/format-indent-more +actions/format-justify-center +actions/format-justify-fill +actions/format-justify-left +actions/format-justify-right +actions/format-text-direction-ltr +actions/format-text-direction-rtl +actions/format-text-bold +actions/format-text-italic +actions/format-text-underline +actions/format-text-strikethrough +actions/go-bottom +actions/go-down +actions/go-first +actions/go-home +actions/go-jump +actions/go-last +actions/go-next +actions/go-previous +actions/go-top +actions/go-up +actions/help-about +actions/help-contents +actions/help-faq +actions/insert-image +actions/insert-link +actions/insert-object +actions/insert-text +actions/list-add +actions/list-remove +actions/mail-forward +actions/mail-mark-important +actions/mail-mark-junk +actions/mail-mark-notjunk +actions/mail-mark-read +actions/mail-mark-unread +actions/mail-message-new +actions/mail-reply-all +actions/mail-reply-sender +actions/mail-send +actions/mail-send-receive +actions/media-eject +actions/media-playback-pause +actions/media-playback-start +actions/media-playback-stop +actions/media-record +actions/media-seek-backward +actions/media-seek-forward +actions/media-skip-backward +actions/media-skip-forward +actions/object-flip-horizontal +actions/object-flip-vertical +actions/object-rotate-left +actions/object-rotate-right +actions/system-lock-screen +actions/system-log-out +actions/system-run +actions/system-search +actions/tools-check-spelling +actions/view-fullscreen +actions/view-refresh +actions/view-restore +actions/view-sort-ascending +actions/view-sort-descending +actions/window-close +actions/window-new +actions/zoom-best-fit +actions/zoom-in +actions/zoom-original +actions/zoom-out +apps/accessories-calculator +apps/accessories-character-map +apps/accessories-dictionary +apps/accessories-text-editor +apps/help-browser +apps/multimedia-volume-control +apps/preferences-desktop-accessibility +apps/preferences-desktop-font +apps/preferences-desktop-keyboard +apps/preferences-desktop-locale +apps/preferences-desktop-multimedia +apps/preferences-desktop-screensaver +apps/preferences-desktop-theme +apps/preferences-desktop-wallpaper +apps/system-file-manager +apps/system-software-update +apps/utilities-system-monitor +apps/utilities-terminal +categories/applications-accessories +categories/applications-development +categories/applications-engineering +categories/applications-games +categories/applications-graphics +categories/applications-internet +categories/applications-multimedia +categories/applications-office +categories/applications-other +categories/applications-science +categories/applications-system +categories/applications-utilities +categories/preferences-desktop +categories/preferences-desktop-peripherals +categories/preferences-desktop-personal +categories/preferences-other +categories/preferences-system +categories/preferences-system-network +categories/system-help +devices/audio-card +devices/audio-input-microphone +devices/battery +devices/camera-photo +devices/camera-video +devices/computer +devices/drive-harddisk +devices/drive-optical +devices/drive-removable-media +devices/input-gaming +devices/input-keyboard +devices/input-mouse +devices/media-flash +devices/media-floppy +devices/media-optical +devices/media-tape +devices/modem +devices/multimedia-player +devices/network-wired +devices/network-wireless +devices/printer +devices/video-display +emblems/emblem-default +emblems/emblem-documents +emblems/emblem-downloads +emblems/emblem-favorite +emblems/emblem-important +emblems/emblem-mail +emblems/emblem-photos +emblems/emblem-readonly +emblems/emblem-shared +emblems/emblem-symbolic-link +emblems/emblem-synchronized +emblems/emblem-system +emblems/emblem-unreadable +emotes/face-angel +emotes/face-crying +emotes/face-devil-grin +emotes/face-devil-sad +emotes/face-glasses +emotes/face-kiss +emotes/face-monkey +emotes/face-plain +emotes/face-sad +emotes/face-smile +emotes/face-smile-big +emotes/face-smirk +emotes/face-surprise +emotes/face-wink +mimetypes/mimetypes/application-x-executable +mimetypes/audio-x-generic +mimetypes/font-x-generic +mimetypes/image-x-generic +mimetypes/package-x-generic +mimetypes/text-html +mimetypes/text-x-generic +mimetypes/text-x-generic-template +mimetypes/text-x-script +mimetypes/video-x-generic +mimetypes/x-office-address-book +mimetypes/x-office-calendar +mimetypes/x-office-document +mimetypes/x-office-presentation +mimetypes/x-office-spreadsheet +places/folder +places/folder-remote +places/network-server +places/network-workgroup +places/start-here +places/user-desktop +places/user-home +places/user-trash +status/appointment-missed +status/appointment-soon +status/audio-volume-high +status/audio-volume-low +status/audio-volume-medium +status/audio-volume-muted +status/battery-caution +status/battery-low +status/dialog-error +status/dialog-information +status/dialog-password +status/dialog-question +status/dialog-warning +status/folder-drag-accept +status/folder-open +status/folder-visiting +status/image-loading +status/image-missing +status/mail-attachment +status/mail-unread +status/mail-read +status/mail-replied +status/mail-signed +status/mail-signed-verified +status/media-playlist-repeat +status/media-playlist-shuffle +status/network-error +status/network-idle +status/network-offline +status/network-receive +status/network-transmit +status/network-transmit-receive +status/printer-error +status/printer-printing +status/security-high +status/security-medium +status/security-low +status/software-update-available +status/software-update-urgent +status/sync-error +status/sync-synchronizing +status/task-due +status/task-passed-due +status/user-away +status/user-idle +status/user-offline +status/user-online +status/user-trash-full +status/weather-clear +status/weather-clear-night +status/weather-few-clouds +status/weather-few-clouds-night +status/weather-fog +status/weather-overcast +status/weather-severe-alert +status/weather-showers +status/weather-showers-scattered +status/weather-snow +status/weather-storm diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/kde_freedesktop.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/kde_freedesktop.dat new file mode 100644 index 0000000000..79ce476750 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/kde_freedesktop.dat @@ -0,0 +1,355 @@ +################################################################################ +# +# ICON MAPPING Freedesktop<->KDE +# +################################################################################ + +-actions/address-book-new ++actions/application-exit=actions/exit +-actions/appointment-new +-actions/contact-new ++actions/dialog-cancel=actions/button_cancel +-actions/dialog-close ++actions/dialog-ok=actions/button_ok +*actions/dialog-apply=actions/apply +*actions/dialog-finish=actions/finish ++actions/dialog-no=actions/no ++actions/document-new=actions/filenew ++actions/document-open=actions/fileopen +-actions/document-open-recent +-actions/document-page-setup ++actions/document-print=actions/fileprint +-actions/document-print-preview +*actions/document-print-quick=actions/filequickprint +-actions/document-properties ++actions/document-revert=actions/revert ++actions/document-save=actions/filesave ++actions/document-save-as=actions/filesaveas +*actions/document-save-all=actions/save_all +*actions/document-close=actions/fileclose +*actions/document-export=actions/fileexport +*actions/document-import=actions/fileimport +*actions/edit=actions/edit +*actions/edit-add=actions/edit_add ++actions/edit-copy=actions/editcopy ++actions/edit-cut=actions/editcut ++actions/edit-delete=actions/editdelete ++actions/edit-find=actions/find +-actions/edit-find-replace ++actions/edit-paste=actions/editpaste ++actions/edit-redo=actions/redo +-actions/edit-select-all +*actions/edit-trash=actions/edittrash ++actions/edit-undo=actions/undo +*actions/execute=actions/exec +*actions/decrypt=actions/decrypted +*actions/encrypt=actions/encrypted +*actions/favorite-add=actions/bookmark_add ++actions/folder-new=actions/folder_new +-actions/format-indent-less +-actions/format-indent-more +-actions/format-justify-center +-actions/format-justify-fill +-actions/format-justify-left +-actions/format-justify-right +-actions/format-text-direction-ltr +-actions/format-text-direction-rtl +-actions/format-text-bold +-actions/format-text-italic +-actions/format-text-underline +-actions/format-text-strikethrough +*actions/format-color=actions/colorize ++actions/go-bottom=actions/bottom ++actions/go-down=actions/down +-actions/go-first ++actions/go-home=actions/gohome +-actions/go-jump +-actions/go-last ++actions/go-next=actions/forward ++actions/go-previous=actions/back ++actions/go-top=actions/top ++actions/go-up=actions/up +*actions/go-left=actions/1leftarrow +*actions/go-right=actions/1rightarrow ++actions/help-about=actions/help ++actions/help-contents=apps/help_index ++actions/help-faq=apps/khelpcenter +*actions/history=actions/history +*actions/history-clear=actions/history_clear +*actions/idea=actions/idea +*actions/identity=actions/identity +*actions/alarm=actions/kalarm +-actions/insert-image +-actions/insert-link +-actions/insert-object +-actions/insert-text +-actions/list-add +-actions/list-remove +*actions/mail=actions/mail_generic +-actions/mail-forward +-actions/mail-mark-important +-actions/mail-mark-junk +-actions/mail-mark-notjunk +-actions/mail-mark-read +-actions/mail-mark-unread +-actions/mail-message-new +-actions/mail-reply-all +-actions/mail-reply-sender +-actions/mail-send +-actions/mail-send-receive ++actions/media-eject=actions/player_eject ++actions/media-playback-pause=actions/player_pause ++actions/media-playback-start=actions/player_play ++actions/media-playback-stop=actions/player_stop +-actions/media-record ++actions/media-seek-backward=actions/player_rew ++actions/media-seek-forward=actions/player_fwd ++actions/media-skip-backward=actions/player_start ++actions/media-skip-forward=actions/player_end +-actions/object-flip-horizontal +-actions/object-flip-vertical +-actions/object-rotate-left +-actions/object-rotate-right ++actions/system-lock-screen=actions/lock +-actions/system-log-out ++actions/system-run=actions/run ++actions/system-search=actions/filefind +*actions/start=actions/start +*actions/stop=actions/stop ++actions/tools-check-spelling=actions/spellcheck +-actions/view-fullscreen ++actions/view-refresh=actions/reload +-actions/view-restore +-actions/view-sort-ascending +-actions/view-sort-descending +-actions/window-close ++actions/window-new=actions/window_new ++actions/zoom-best-fit=actions/viewmagfit ++actions/zoom-in=actions/viewmag+ ++actions/zoom-original=actions/viewmag1 ++actions/zoom-out=actions/viewmag- +*actions/zoom=actions/viewmag +*actions/view-pane-detailed=actions/view_detailed +*actions/view-pane-icon=actions/view_icon +*actions/view-pane-column=actions/view_multicolumn +*actions/view-pane-text=actions/view_text +*actions/view-pane-tree=actions/view_tree +*actions/view-pane-remove=actions/view_remove ++apps/accessories-calculator=apps/kcalc ++apps/accessories-character-map=apps/kcharselect ++apps/accessories-clipboard=apps/klipper ++apps/accessories-dictionary=apps/kdict ++apps/accessories-text-editor=apps/kedit +*apps/accessories-archiver=apps/ark +*apps/accessories-clock=apps/clock +*apps/accessories-date=apps/date +*apps/accessories-alarm=apps/kalarm +*apps/accessories-time-tracking=apps/karm +*apps/accessories-disk-usage=apps/kdf +*apps/accessories-floppy=apps/kfloppy +*apps/accessories-notes=apps/knotes +*apps/accessories-terminal=apps/konsole +*apps/accessories-timer=apps/ktimer +*apps/accessories-tip=apps/ktip +*apps/accessories-magnifier=apps/xmag ++apps/help-browser=apps/khelpcenter ++apps/multimedia-volume-control=apps/kmix +*apps/multimedia-movie-player=apps/aktion +*apps/preferences=actions/configure ++apps/preferences-desktop-accessibility=apps/access ++apps/preferences-desktop-font=apps/kcmfontinst +-apps/preferences-desktop-keyboard +-apps/preferences-desktop-locale ++apps/preferences-desktop-multimedia=apps/artscontrol +-apps/preferences-desktop-screensaver ++apps/preferences-desktop-theme=apps/kthememgr ++apps/preferences-desktop-wallpaper=apps/background +*apps/preferences-desktop-theme-icon=apps/iconthemes ++apps/system-file-manager=apps/file-manager ++apps/system-software-update=apps/kpackage ++apps/system-users=apps/kuser +-apps/utilities-system-monitor ++apps/utilities-terminal=apps/terminal +*apps/office-adobe-reader=apps/acroread +*apps/office-pim=apps/kontact +*apps/office-organizer=apps/korganizer +*apps/internet-general=apps/internet +*apps/internet-web-browser=apps/browser +*apps/internet-download-manager=apps/download_manager +*apps/internet-email-client=apps/email +*apps/graphics-snapshot=apps/ksnapshot +*apps/graphics-image-viewer=apps/kview +*categories/applications=apps/package_applications +-categories/applications-accessories ++categories/applications-development=apps/package_development +-categories/applications-engineering ++categories/applications-games=apps/package_games ++categories/applications-graphics=apps/package_graphics ++categories/applications-internet=apps/package_network ++categories/applications-multimedia=apps/package_multimedia ++categories/applications-office=apps/package_wordprocessing +-categories/applications-other +-categories/applications-science ++categories/applications-system=apps/package_system ++categories/applications-utilities=apps/package_utilities ++categories/applications-favorite=apps/package_favorite +*categories/preferences=apps/package_settings ++categories/preferences-desktop=apps/display +-categories/preferences-desktop-peripherals ++categories/preferences-desktop-personal=apps/looknfeel +-categories/preferences-other ++categories/preferences-system=apps/package_system ++categories/preferences-system-network=apps/network ++categories/system-help=apps/help_index +-devices/audio-card +-devices/audio-input-microphone +-devices/battery ++devices/camera-photo=devices/camera ++devices/camera-video=devices/camera ++devices/computer=apps/mycomputer ++devices/drive-harddisk=devices/hdd_unmount ++devices/drive-optical=devices/dvd_unmount ++devices/drive-removable-media=devices/usbpendrive_unmount +-devices/input-gaming=devices/joystick +-devices/input-keyboard ++devices/input-mouse=devices/mouse ++devices/media-flash=devices/usbpendrive_unmount ++devices/media-floppy=devices/3floppy_unmount ++devices/media-optical=devices/cdrom_unmount +-devices/media-tape +-devices/modem +*devices/scanner=devices/scanner +-devices/multimedia-player ++devices/network-wired=devices/nfs_unmount ++devices/network-wireless=devices/nfs_unmount ++devices/printer=devices/printer1 ++devices/video-display=devices/tv +*devices/usb=apps/usb +-emblems/emblem-default +-emblems/emblem-documents +-emblems/emblem-downloads +-emblems/emblem-favorite +-emblems/emblem-important +-emblems/emblem-mail +-emblems/emblem-photos +-emblems/emblem-readonly +-emblems/emblem-shared +-emblems/emblem-symbolic-link +-emblems/emblem-synchronized +-emblems/emblem-system +-emblems/emblem-unreadable +-emotes/face-angel +-emotes/face-crying +-emotes/face-devil-grin +-emotes/face-devil-sad +-emotes/face-glasses +-emotes/face-kiss +-emotes/face-monkey +-emotes/face-plain +-emotes/face-sad +-emotes/face-smile +-emotes/face-smile-big +-emotes/face-smirk +-emotes/face-surprise +-emotes/face-wink ++mimetypes/application-x-executable=mimetypes/binary ++mimetypes/audio-x-generic=mimetypes/sound ++mimetypes/font-x-generic=mimetypes/font ++mimetypes/image-x-generic=mimetypes/image ++mimetypes/package-x-generic=mimetypes/tgz ++mimetypes/text-html=mimetypes/html +*mimetypes/text-ascii=mimetypes/ascii ++mimetypes/text-x-generic=mimetypes/txt ++mimetypes/text-x-generic-template=mimetypes/txt ++mimetypes/text-x-script=mimetypes/shellscript ++mimetypes/video-x-generic=mimetypes/video +-mimetypes/x-office-address-book ++mimetypes/x-office-calendar=mimetypes/vcalendar +-mimetypes/x-office-document +-mimetypes/x-office-presentation ++mimetypes/x-office-spreadsheet=mimetypes/spreadsheet +*mimetypes/application-pdf=mimetypes/pdf +*mimetypes/application-quicktime=mimetypes/quicktime +*mimetypes/empty-x-generic=mimetypes/empty +*mimetypes/empty-x-encrypted=mimetypes/encrypted +*mimetypes/empty-x-locked=mimetypes/file_locked +*mimetypes/empty-x-temporary=mimetypes/file_temporary +*mimetypes/unknown-x-temporary=mimetypes/unknown +*mimetypes/misc-x-generic=mimetypes/misc ++places/folder=filesystems/folder ++places/folder-remote=filesystems/ftp ++places/network-server=filesystems/network ++places/network-workgroup=filesystems/network_local +-places/start-here ++places/user-desktop=filesystems/desktop ++places/user-home=filesystems/folder_home ++places/user-trash=filesystems/trashcan_empty +*places/user-trash-empty=filesystems/trashcan_empty +*places/user-trash-full=filesystems/trashcan_full +*places/favorite-folder=actions/bookmark_folder +*places/image-folder=filesystems/folder_image +*places/html-folder=filesystems/folder_html +*places/music-folder=filesystems/folder_music +*places/document-folder=filesystems/folder_txt +*places/archive-folder=filesystems/folder_tar +*places/www=filesystems/www +*places/services=filesystems/services +-status/appointment-missed +-status/appointment-soon +-status/audio-volume-high +-status/audio-volume-low +-status/audio-volume-medium +-status/audio-volume-muted +-status/battery-caution +-status/battery-low ++status/dialog-error=actions/messagebox_critical +*status/dialog-information=actions/messagebox_info ++status/dialog-password=apps/password +-status/dialog-question +*status/dialog-warning=actions/messagebox_warning +-status/folder-drag-accept ++status/folder-open=filesystems/folder_open +-status/folder-visiting +-status/image-loading +-status/image-missing +-status/mail-attachment +-status/mail-unread +-status/mail-read +-status/mail-replied +-status/mail-signed +-status/mail-signed-verified +-status/media-playlist-repeat +-status/media-playlist-shuffle +-status/network-error +-status/network-idle +-status/network-offline +-status/network-receive +-status/network-transmit +-status/network-transmit-receive +-status/printer-error +-status/printer-printing +-status/security-high +-status/security-medium +-status/security-low +-status/software-update-available +-status/software-update-urgent +-status/sync-error +-status/sync-synchronizing +-status/task-due +-status/task-passed-due +-status/user-away +-status/user-idle +-status/user-offline +-status/user-online +-status/user-trash-full +-status/weather-clear +-status/weather-clear-night +-status/weather-few-clouds +-status/weather-few-clouds-night +-status/weather-fog +-status/weather-overcast +-status/weather-severe-alert +-status/weather-showers +-status/weather-showers-scattered +-status/weather-snow +-status/weather-storm diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/kde_normalize.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/kde_normalize.dat new file mode 100644 index 0000000000..5d588d26c2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/kde_normalize.dat @@ -0,0 +1,62 @@ +actions/messagebox_info=actions/info +actions/cancel=actions/button_cancel +actions/ok=actions/button_ok +filesystems/folder_images=filesystems/folder_image +filesystems/folder_music=filesystems/folder_sound +filesystems/folder_favorites=filesystems/folder_favorite +filesystems/folder_favourite=filesystems/folder_favorite +filesystems/folder_games=filesystems/folder_game +devices/printer2=devices/printer +devices/network_local=devices/nfs_unmount +mimetypes/mime_ascii=mimetypes/ascii +mimetypes/misc=mimetypes/mime +filesystems/folder_home2=filesystems/folder_home +apps/mail=apps/email +apps/mail=apps/kmail +apps/tux=apps/toys +filesystems/exec=actions/exec +actions/filefind=actions/kfind +actions/kfind=actions/find +actions/no +actions/filefind=actions/find +actions/fileimport=actions/compfile +actions/fonts=apps/fonts +actions/help=actions/idea +apps/back=actions/back +devices/camera=actions/camera +devices/camera=apps/camera +apps/harddrive=devices/hdd_unmount +apps/home=filesystems/folder_home +apps/internet=apps/network +mimetypes/mime-colorset=mimetypes/mime_colorset +apps/my_documents=apps/mydocuments +apps/miscellaneous=apps/miscellaneous2 +apps/calendars=apps/vcalendar +actions/mix_volume=actions/player_volume +actions/color_fill=actions/fill +apps/miscellaneous2=apps/miscellaneous +apps/miscellaneous=apps/miscellaneous +apps/Login=apps/login +apps/Logout=apps/logout +apps/Network=apps/network +apps/networksettings=apps/network_settings +apps/package_favourite=apps/package_favorite +apps/calc=apps/kcalc +apps/cal=apps/calendar +apps/cal=apps/calendars +apps/calendars=apps/calendar +apps/kpdf=apps/pdf +apps/mymac=apps/mycomputer +apps/help_index=apps/help +apps/help_index=apps/helpcenter +apps/kcalc=apps/calc +apps/kcalc=actions/calc +apps/kcmfontinst=actions/fonts +apps/knotes=apps/notes +apps/knotes=actions/notes +apps/korganizer=apps/organizer +apps/looknfeel=apps/iconthemes +apps/Session=apps/smserver +apps/toys=apps/tux +mimetypes/mime_empty=mimetypes/mime +apps/keyboard=devices/keyboard
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/qooxdoo_freedesktop.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/qooxdoo_freedesktop.dat new file mode 100644 index 0000000000..12c777c721 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/qooxdoo_freedesktop.dat @@ -0,0 +1,191 @@ +# +# Mapping of qooxdoo icon names to Tango icons +# + +accessibility = apps/preferences-desktop-accessibility +adobe-reader = apps/office-adobe-reader +alarm = apps/accessories-alarm +applications = categories/applications +apply = actions/dialog-ok +attach = actions/mail-message-attach +back = actions/go-previous +background = apps/preferences-desktop-wallpaper +bell +bitmapgraphics +bookmark-add = actions/favorite-add +bookmark-folder = actions/bookmark_folder +bookmark-toolbar +bookmark +bug +button-cancel = actions/dialog-cancel +button-ok = actions/dialog-ok +cache +calculator = apps/accessories-calculator +camera = devices/camera-photo +cancel = actions/dialog-cancel +cdrom = devices/media-optical +char-device +chart +clipboard = apps/accessories-clipboard +clock = apps/accessories-clock +color-fill +color-line +colors = actions/format-color +configure = apps/preferences +connect-creating +connect-established +connect-no = status/network-offline +control-center = apps/preferences-system +cookie +core +date = apps/accessories-date +decrypted = actions/decrypt +desktop = places/user-desktop +devices = devices/drive-harddisk +dictionary = apps/accessories-dictionary +display = devices/video-display +down = actions/go-down +edit-copy = actions/edit-copy +edit-cut = actions/edit-cut +edit-delete = actions/edit-delete +edit-paste = actions/edit-paste +edit = actions/edit +editor = apps/accessories-text-editor +email = apps/internet-mail +encrypted = actions/encrypt +energy +error = status/dialog-error +exec = actions/execute +exit = actions/application-exit +file-manager = apps/system-file-manager +file-new = actions/document-new +file-open = actions/document-open +file-print = actions/document-print +file-save-as = actions/document-save-as +file-save = actions/document-save +find = actions/edit-find +floppy = devices/media-floppy +flowchart +folder-favorite = status/folder-favorite +folder-important +folder-locked = places/folder-locked +folder-open = status/folder-open +folder = places/folder +fonts = apps/preferences-desktop-font +forward = actions/go-next +games = categories/applications-games +graphics = categories/applications-graphics +harddrive = devices/drive-harddisk +hardware-info +help-center = apps/help-browser +help = actions/help-about +history-clear = actions/history-clear +history = actions/history +home = actions/go-home +icons = apps/preferences-desktop-theme-icon +iconthemes = apps/preferences-desktop-theme-icon +important = emblems/emblem-important +info = status/dialog-information +joystick = devices/input-gaming +keyboard-layout = apps/preferences-desktop-keyboard +locale = apps/preferences-desktop-locale +look-and-feel = apps/preferences-desktop-theme +magnifier = actions/zoom +mail-delete = actions/mail-message-delete +mail-find = actions/mail-find +mail-forward = actions/mail-forward +mail-get = actions/mail-receive +mail-new = actions/mail-message-new +mail-reply-all = actions/mail-reply-all +mail-reply = actions/mail-reply-sender +mail-send = actions/mail-send +mail = apps/internet-email-client +memory = devices/memory +mime-archive = mimetypes/package-x-generic +mime-binary = mimetypes/application-x-executable +mime-calendar = mimetypes/x-office-calendar +mime-card = mimetypes/x-office-address-book +mime-color = actions/format-color +mime-document = mimetypes/x-office-document +mime-html = mimetypes/text-html +mime-image = mimetypes/image-x-generic +mime-manual +mime-multimedia = mimetypes/audio-x-generic +mime-pdf = mimetypes/application-pdf +mime-quicktime = mimetypes/application-quicktime +mime-rpm +mime-script = mimetypes/text-x-script +mime-shellscript = mimetypes/text-x-script +mime-sourcecode = mimetypes/empty-x-generic +mime-spreadsheet = mimetypes/x-office-spreadsheet +mime-text = mimetypes/text-x-generic +mime-video = mimetypes/video-x-generic +misc = actions/execute +mixer = apps/multimedia-volume-control +modem = devices/modem +mouse = devices/input-mouse +movieplayer = apps/multimedia-movie-player +multimedia = categories/applications-multimedia +mycomputer = devices/computer +netscape = mimetypes/text-html +network = categories/applications-internet +no +notes = apps/accessories-notes +notify +ok = actions/dialog-ok +opera = apps/internet-browser-opera +organizer = apps/office-organizer +paint +partitions +password = status/dialog-password +pda +pipe +presentation +printer = devices/printer +queue +redo = actions/edit-redo +reload = actions/view-refresh +rotate = actions/object-rotate-left +run = actions/system-run +scanner = devices/scanner +services = places/services +settings = categories/preferences +signature +spellcheck = actions/tools-check-spelling +stop = actions/stop +style +system = categories/applications-system +tab-duplicate +tab-new-raised +tab-new +tab-remove +tablet = devices/input-tablet +terminal = apps/utilities-terminal +themes = apps/preferences-desktop-theme +toys = categories/applications-toys +trashcan-empty = places/user-trash +trashcan-full = places/user-trash-full +tv = devices/video-display +undo = actions/edit-undo +up = actions/go-up +user = apps/system-users +utilities = categories/applications-utilities +view-bottom +view-choose +view-detailed = actions/view-pane-detailed +view-icon = actions/view-pane-icon +view-left-right +view-multicolumn = actions/view-pane-column +view-remove = actions/view-pane-remove +view-right +view-sidetree +view-text = actions/view-pane-text +view-top-bottom +view-tree = actions/view-pane-tree +viewmag-fit = actions/zoom-best-fit +viewmag-minus = actions/zoom-out +viewmag-original = actions/zoom-original +viewmag-plus = actions/zoom-in +viewmag = actions/zoom +wizard +wordprocessor diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/qooxdoo_whitelist.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/qooxdoo_whitelist.dat new file mode 100644 index 0000000000..891d9836c6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/data/qooxdoo_whitelist.dat @@ -0,0 +1,816 @@ +128x128/actions/help-contents.png +128x128/actions/help-faq.png +128x128/apps/accessories-alarm.png +128x128/apps/accessories-archiver.png +128x128/apps/accessories-character-map.png +128x128/apps/accessories-clipboard.png +128x128/apps/accessories-clock.png +128x128/apps/accessories-date.png +128x128/apps/accessories-dictionary.png +128x128/apps/accessories-disk-usage.png +128x128/apps/accessories-floppy.png +128x128/apps/accessories-magnifier.png +128x128/apps/accessories-notes.png +128x128/apps/accessories-terminal.png +128x128/apps/accessories-text-editor.png +128x128/apps/accessories-timer.png +128x128/apps/accessories-time-tracking.png +128x128/apps/accessories-tip.png +128x128/apps/graphics-image-viewer.png +128x128/apps/graphics-snapshot.png +128x128/apps/help-browser.png +128x128/apps/internet-download-manager.png +128x128/apps/internet-email-client.png +128x128/apps/internet-web-browser.png +128x128/apps/multimedia-movie-player.png +128x128/apps/multimedia-volume-control.png +128x128/apps/office-adobe-reader.png +128x128/apps/office-organizer.png +128x128/apps/office-pim.png +128x128/apps/preferences-desktop-accessibility.png +128x128/apps/preferences-desktop-font.png +128x128/apps/preferences-desktop-multimedia.png +128x128/apps/preferences-desktop-theme.png +128x128/apps/preferences-desktop-wallpaper.png +128x128/apps/system-file-manager.png +128x128/apps/system-software-update.png +128x128/apps/system-users.png +128x128/apps/utilities-terminal.png +128x128/categories/applications-games.png +128x128/categories/applications-graphics.png +128x128/categories/applications-internet.png +128x128/categories/applications-multimedia.png +128x128/categories/applications-office.png +128x128/categories/applications.png +128x128/categories/applications-utilities.png +128x128/categories/preferences-desktop-personal.png +128x128/categories/preferences-desktop.png +128x128/categories/preferences.png +128x128/categories/preferences-system-network.png +128x128/categories/system-help.png +128x128/devices/camera-photo.png +128x128/devices/camera-video.png +128x128/devices/computer.png +128x128/devices/drive-harddisk.png +128x128/devices/drive-optical.png +128x128/devices/drive-removable-media.png +128x128/devices/input-mouse.png +128x128/devices/media-flash.png +128x128/devices/media-floppy.png +128x128/devices/media-optical.png +128x128/devices/network-wired.png +128x128/devices/network-wireless.png +128x128/devices/printer.png +128x128/devices/scanner.png +128x128/devices/usb.png +128x128/devices/video-display.png +128x128/mimetypes/application-pdf.png +128x128/mimetypes/application-quicktime.png +128x128/mimetypes/application-x-executable.png +128x128/mimetypes/audio-x-generic.png +128x128/mimetypes/empty-x-encrypted.png +128x128/mimetypes/empty-x-generic.png +128x128/mimetypes/empty-x-locked.png +128x128/mimetypes/empty-x-temporary.png +128x128/mimetypes/font-x-generic.png +128x128/mimetypes/image-x-generic.png +128x128/mimetypes/package-x-generic.png +128x128/mimetypes/text-ascii.png +128x128/mimetypes/text-html.png +128x128/mimetypes/text-x-generic.png +128x128/mimetypes/text-x-generic-template.png +128x128/mimetypes/text-x-script.png +128x128/mimetypes/unknown-x-temporary.png +128x128/mimetypes/video-x-generic.png +128x128/mimetypes/x-office-calendar.png +128x128/mimetypes/x-office-spreadsheet.png +128x128/places/archive-folder.png +128x128/places/document-folder.png +128x128/places/folder.png +128x128/places/folder-remote.png +128x128/places/html-folder.png +128x128/places/network-server.png +128x128/places/network-workgroup.png +128x128/places/services.png +128x128/places/user-desktop.png +128x128/places/user-home.png +128x128/places/user-trash-empty.png +128x128/places/user-trash-full.png +128x128/places/user-trash.png +128x128/places/www.png +128x128/status/dialog-password.png +16x16/actions/alarm.png +16x16/actions/application-exit.png +16x16/actions/decrypt.png +16x16/actions/dialog-apply.png +16x16/actions/dialog-cancel.png +16x16/actions/dialog-finish.png +16x16/actions/dialog-no.png +16x16/actions/dialog-ok.png +16x16/actions/document-close.png +16x16/actions/document-export.png +16x16/actions/document-new.png +16x16/actions/document-open.png +16x16/actions/document-print.png +16x16/actions/document-print-quick.png +16x16/actions/document-revert.png +16x16/actions/document-save-all.png +16x16/actions/document-save-as.png +16x16/actions/document-save.png +16x16/actions/edit-add.png +16x16/actions/edit-copy.png +16x16/actions/edit-cut.png +16x16/actions/edit-delete.png +16x16/actions/edit-find.png +16x16/actions/edit-paste.png +16x16/actions/edit.png +16x16/actions/edit-redo.png +16x16/actions/edit-trash.png +16x16/actions/edit-undo.png +16x16/actions/encrypt.png +16x16/actions/favorite-add.png +16x16/actions/folder-new.png +16x16/actions/format-color.png +16x16/actions/go-bottom.png +16x16/actions/go-down.png +16x16/actions/go-home.png +16x16/actions/go-left.png +16x16/actions/go-next.png +16x16/actions/go-previous.png +16x16/actions/go-right.png +16x16/actions/go-top.png +16x16/actions/go-up.png +16x16/actions/help-about.png +16x16/actions/help-contents.png +16x16/actions/help-faq.png +16x16/actions/history-clear.png +16x16/actions/history.png +16x16/actions/identity.png +16x16/actions/mail.png +16x16/actions/media-eject.png +16x16/actions/media-playback-pause.png +16x16/actions/media-playback-start.png +16x16/actions/media-playback-stop.png +16x16/actions/media-seek-backward.png +16x16/actions/media-seek-forward.png +16x16/actions/media-skip-backward.png +16x16/actions/media-skip-forward.png +16x16/actions/start.png +16x16/actions/stop.png +16x16/actions/system-lock-screen.png +16x16/actions/system-run.png +16x16/actions/tools-check-spelling.png +16x16/actions/view-pane-column.png +16x16/actions/view-pane-detailed.png +16x16/actions/view-pane-icon.png +16x16/actions/view-pane-remove.png +16x16/actions/view-pane-text.png +16x16/actions/view-pane-tree.png +16x16/actions/view-refresh.png +16x16/actions/window-new.png +16x16/actions/zoom-best-fit.png +16x16/actions/zoom-in.png +16x16/actions/zoom-original.png +16x16/actions/zoom-out.png +16x16/actions/zoom.png +16x16/apps/accessories-alarm.png +16x16/apps/accessories-archiver.png +16x16/apps/accessories-calculator.png +16x16/apps/accessories-character-map.png +16x16/apps/accessories-clipboard.png +16x16/apps/accessories-clock.png +16x16/apps/accessories-date.png +16x16/apps/accessories-dictionary.png +16x16/apps/accessories-disk-usage.png +16x16/apps/accessories-floppy.png +16x16/apps/accessories-magnifier.png +16x16/apps/accessories-notes.png +16x16/apps/accessories-terminal.png +16x16/apps/accessories-text-editor.png +16x16/apps/accessories-timer.png +16x16/apps/accessories-time-tracking.png +16x16/apps/accessories-tip.png +16x16/apps/graphics-image-viewer.png +16x16/apps/graphics-snapshot.png +16x16/apps/help-browser.png +16x16/apps/internet-download-manager.png +16x16/apps/internet-email-client.png +16x16/apps/internet-web-browser.png +16x16/apps/multimedia-movie-player.png +16x16/apps/multimedia-volume-control.png +16x16/apps/office-adobe-reader.png +16x16/apps/office-organizer.png +16x16/apps/office-pim.png +16x16/apps/preferences-desktop-accessibility.png +16x16/apps/preferences-desktop-font.png +16x16/apps/preferences-desktop-multimedia.png +16x16/apps/preferences-desktop-theme.png +16x16/apps/preferences-desktop-wallpaper.png +16x16/apps/preferences.png +16x16/apps/system-file-manager.png +16x16/apps/system-software-update.png +16x16/apps/system-users.png +16x16/apps/utilities-terminal.png +16x16/categories/applications-development.png +16x16/categories/applications-games.png +16x16/categories/applications-graphics.png +16x16/categories/applications-internet.png +16x16/categories/applications-multimedia.png +16x16/categories/applications-office.png +16x16/categories/applications.png +16x16/categories/applications-system.png +16x16/categories/applications-utilities.png +16x16/categories/preferences-desktop-personal.png +16x16/categories/preferences-desktop.png +16x16/categories/preferences.png +16x16/categories/preferences-system-network.png +16x16/categories/preferences-system.png +16x16/categories/system-help.png +16x16/devices/camera-photo.png +16x16/devices/camera-video.png +16x16/devices/computer.png +16x16/devices/drive-harddisk.png +16x16/devices/drive-optical.png +16x16/devices/drive-removable-media.png +16x16/devices/input-mouse.png +16x16/devices/media-flash.png +16x16/devices/media-floppy.png +16x16/devices/media-optical.png +16x16/devices/network-wired.png +16x16/devices/network-wireless.png +16x16/devices/printer.png +16x16/devices/scanner.png +16x16/devices/usb.png +16x16/devices/video-display.png +16x16/mimetypes/application-pdf.png +16x16/mimetypes/application-quicktime.png +16x16/mimetypes/application-x-executable.png +16x16/mimetypes/audio-x-generic.png +16x16/mimetypes/empty-x-encrypted.png +16x16/mimetypes/empty-x-generic.png +16x16/mimetypes/empty-x-locked.png +16x16/mimetypes/empty-x-temporary.png +16x16/mimetypes/font-x-generic.png +16x16/mimetypes/image-x-generic.png +16x16/mimetypes/package-x-generic.png +16x16/mimetypes/text-ascii.png +16x16/mimetypes/text-html.png +16x16/mimetypes/text-x-generic.png +16x16/mimetypes/text-x-generic-template.png +16x16/mimetypes/text-x-script.png +16x16/mimetypes/unknown-x-temporary.png +16x16/mimetypes/video-x-generic.png +16x16/mimetypes/x-office-calendar.png +16x16/mimetypes/x-office-spreadsheet.png +16x16/places/archive-folder.png +16x16/places/document-folder.png +16x16/places/favorite-folder.png +16x16/places/folder.png +16x16/places/folder-remote.png +16x16/places/html-folder.png +16x16/places/network-server.png +16x16/places/network-workgroup.png +16x16/places/services.png +16x16/places/user-desktop.png +16x16/places/user-home.png +16x16/places/user-trash-empty.png +16x16/places/user-trash-full.png +16x16/places/user-trash.png +16x16/places/www.png +16x16/status/dialog-password.png +16x16/status/folder-open.png +22x22/actions/alarm.png +22x22/actions/application-exit.png +22x22/actions/decrypt.png +22x22/actions/dialog-apply.png +22x22/actions/dialog-cancel.png +22x22/actions/dialog-finish.png +22x22/actions/dialog-ok.png +22x22/actions/document-close.png +22x22/actions/document-export.png +22x22/actions/document-new.png +22x22/actions/document-open.png +22x22/actions/document-print.png +22x22/actions/document-print-quick.png +22x22/actions/document-revert.png +22x22/actions/document-save-all.png +22x22/actions/document-save-as.png +22x22/actions/document-save.png +22x22/actions/edit-add.png +22x22/actions/edit-copy.png +22x22/actions/edit-cut.png +22x22/actions/edit-delete.png +22x22/actions/edit-find.png +22x22/actions/edit-paste.png +22x22/actions/edit.png +22x22/actions/edit-redo.png +22x22/actions/edit-trash.png +22x22/actions/edit-undo.png +22x22/actions/encrypt.png +22x22/actions/favorite-add.png +22x22/actions/folder-new.png +22x22/actions/format-color.png +22x22/actions/go-down.png +22x22/actions/go-home.png +22x22/actions/go-left.png +22x22/actions/go-next.png +22x22/actions/go-previous.png +22x22/actions/go-right.png +22x22/actions/go-up.png +22x22/actions/help-about.png +22x22/actions/help-faq.png +22x22/actions/history.png +22x22/actions/mail.png +22x22/actions/media-eject.png +22x22/actions/media-playback-pause.png +22x22/actions/media-playback-start.png +22x22/actions/media-playback-stop.png +22x22/actions/media-seek-backward.png +22x22/actions/media-seek-forward.png +22x22/actions/media-skip-backward.png +22x22/actions/media-skip-forward.png +22x22/actions/start.png +22x22/actions/stop.png +22x22/actions/system-lock-screen.png +22x22/actions/system-run.png +22x22/actions/tools-check-spelling.png +22x22/actions/view-pane-column.png +22x22/actions/view-pane-detailed.png +22x22/actions/view-pane-icon.png +22x22/actions/view-pane-remove.png +22x22/actions/view-pane-text.png +22x22/actions/view-pane-tree.png +22x22/actions/view-refresh.png +22x22/actions/window-new.png +22x22/actions/zoom-best-fit.png +22x22/actions/zoom-in.png +22x22/actions/zoom-original.png +22x22/actions/zoom-out.png +22x22/actions/zoom.png +22x22/apps/accessories-alarm.png +22x22/apps/accessories-archiver.png +22x22/apps/accessories-character-map.png +22x22/apps/accessories-clock.png +22x22/apps/accessories-date.png +22x22/apps/accessories-dictionary.png +22x22/apps/accessories-floppy.png +22x22/apps/accessories-terminal.png +22x22/apps/accessories-text-editor.png +22x22/apps/accessories-time-tracking.png +22x22/apps/accessories-tip.png +22x22/apps/graphics-image-viewer.png +22x22/apps/graphics-snapshot.png +22x22/apps/help-browser.png +22x22/apps/internet-download-manager.png +22x22/apps/internet-email-client.png +22x22/apps/internet-web-browser.png +22x22/apps/multimedia-volume-control.png +22x22/apps/office-adobe-reader.png +22x22/apps/office-pim.png +22x22/apps/preferences-desktop-accessibility.png +22x22/apps/preferences-desktop-multimedia.png +22x22/apps/preferences-desktop-theme.png +22x22/apps/preferences-desktop-wallpaper.png +22x22/apps/preferences.png +22x22/apps/system-file-manager.png +22x22/apps/system-users.png +22x22/apps/utilities-terminal.png +22x22/categories/applications-graphics.png +22x22/categories/applications-internet.png +22x22/categories/applications-multimedia.png +22x22/categories/applications-office.png +22x22/categories/applications-utilities.png +22x22/categories/preferences-desktop.png +22x22/categories/preferences.png +22x22/categories/preferences-system-network.png +22x22/devices/camera-photo.png +22x22/devices/camera-video.png +22x22/devices/computer.png +22x22/devices/drive-harddisk.png +22x22/devices/drive-optical.png +22x22/devices/drive-removable-media.png +22x22/devices/input-mouse.png +22x22/devices/media-flash.png +22x22/devices/media-floppy.png +22x22/devices/media-optical.png +22x22/devices/network-wired.png +22x22/devices/network-wireless.png +22x22/devices/scanner.png +22x22/devices/usb.png +22x22/devices/video-display.png +22x22/mimetypes/application-pdf.png +22x22/mimetypes/application-quicktime.png +22x22/mimetypes/application-x-executable.png +22x22/mimetypes/audio-x-generic.png +22x22/mimetypes/empty-x-encrypted.png +22x22/mimetypes/empty-x-generic.png +22x22/mimetypes/empty-x-temporary.png +22x22/mimetypes/font-x-generic.png +22x22/mimetypes/image-x-generic.png +22x22/mimetypes/package-x-generic.png +22x22/mimetypes/text-ascii.png +22x22/mimetypes/text-html.png +22x22/mimetypes/text-x-generic.png +22x22/mimetypes/text-x-generic-template.png +22x22/mimetypes/text-x-script.png +22x22/mimetypes/unknown-x-temporary.png +22x22/mimetypes/video-x-generic.png +22x22/mimetypes/x-office-calendar.png +22x22/mimetypes/x-office-spreadsheet.png +22x22/places/archive-folder.png +22x22/places/document-folder.png +22x22/places/favorite-folder.png +22x22/places/folder.png +22x22/places/folder-remote.png +22x22/places/html-folder.png +22x22/places/network-server.png +22x22/places/network-workgroup.png +22x22/places/services.png +22x22/places/user-desktop.png +22x22/places/user-home.png +22x22/places/user-trash-empty.png +22x22/places/user-trash-full.png +22x22/places/user-trash.png +22x22/places/www.png +22x22/status/dialog-password.png +32x32/actions/application-exit.png +32x32/actions/decrypt.png +32x32/actions/dialog-apply.png +32x32/actions/dialog-cancel.png +32x32/actions/dialog-ok.png +32x32/actions/document-close.png +32x32/actions/document-new.png +32x32/actions/document-open.png +32x32/actions/document-print.png +32x32/actions/document-print-quick.png +32x32/actions/document-revert.png +32x32/actions/document-save-all.png +32x32/actions/document-save-as.png +32x32/actions/document-save.png +32x32/actions/edit-add.png +32x32/actions/edit-copy.png +32x32/actions/edit-cut.png +32x32/actions/edit-delete.png +32x32/actions/edit-find.png +32x32/actions/edit-paste.png +32x32/actions/edit.png +32x32/actions/edit-redo.png +32x32/actions/edit-trash.png +32x32/actions/edit-undo.png +32x32/actions/encrypt.png +32x32/actions/favorite-add.png +32x32/actions/folder-new.png +32x32/actions/format-color.png +32x32/actions/go-down.png +32x32/actions/go-home.png +32x32/actions/go-left.png +32x32/actions/go-next.png +32x32/actions/go-previous.png +32x32/actions/go-right.png +32x32/actions/go-top.png +32x32/actions/go-up.png +32x32/actions/help-about.png +32x32/actions/help-contents.png +32x32/actions/help-faq.png +32x32/actions/history.png +32x32/actions/identity.png +32x32/actions/mail.png +32x32/actions/media-eject.png +32x32/actions/media-playback-pause.png +32x32/actions/media-playback-start.png +32x32/actions/media-seek-backward.png +32x32/actions/media-seek-forward.png +32x32/actions/media-skip-backward.png +32x32/actions/media-skip-forward.png +32x32/actions/start.png +32x32/actions/stop.png +32x32/actions/system-lock-screen.png +32x32/actions/system-run.png +32x32/actions/tools-check-spelling.png +32x32/actions/view-pane-column.png +32x32/actions/view-pane-detailed.png +32x32/actions/view-pane-icon.png +32x32/actions/view-pane-remove.png +32x32/actions/view-pane-text.png +32x32/actions/view-pane-tree.png +32x32/actions/view-refresh.png +32x32/actions/window-new.png +32x32/actions/zoom-best-fit.png +32x32/actions/zoom-in.png +32x32/actions/zoom-original.png +32x32/actions/zoom-out.png +32x32/actions/zoom.png +32x32/apps/accessories-alarm.png +32x32/apps/accessories-archiver.png +32x32/apps/accessories-calculator.png +32x32/apps/accessories-character-map.png +32x32/apps/accessories-clipboard.png +32x32/apps/accessories-clock.png +32x32/apps/accessories-date.png +32x32/apps/accessories-dictionary.png +32x32/apps/accessories-disk-usage.png +32x32/apps/accessories-floppy.png +32x32/apps/accessories-magnifier.png +32x32/apps/accessories-notes.png +32x32/apps/accessories-terminal.png +32x32/apps/accessories-text-editor.png +32x32/apps/accessories-timer.png +32x32/apps/accessories-time-tracking.png +32x32/apps/accessories-tip.png +32x32/apps/graphics-image-viewer.png +32x32/apps/graphics-snapshot.png +32x32/apps/help-browser.png +32x32/apps/internet-download-manager.png +32x32/apps/internet-email-client.png +32x32/apps/internet-web-browser.png +32x32/apps/multimedia-movie-player.png +32x32/apps/multimedia-volume-control.png +32x32/apps/office-adobe-reader.png +32x32/apps/office-organizer.png +32x32/apps/office-pim.png +32x32/apps/preferences-desktop-accessibility.png +32x32/apps/preferences-desktop-font.png +32x32/apps/preferences-desktop-multimedia.png +32x32/apps/preferences-desktop-theme.png +32x32/apps/preferences-desktop-wallpaper.png +32x32/apps/preferences.png +32x32/apps/system-file-manager.png +32x32/apps/system-software-update.png +32x32/apps/system-users.png +32x32/apps/utilities-terminal.png +32x32/categories/applications-games.png +32x32/categories/applications-graphics.png +32x32/categories/applications-internet.png +32x32/categories/applications-multimedia.png +32x32/categories/applications-office.png +32x32/categories/applications.png +32x32/categories/applications-system.png +32x32/categories/applications-utilities.png +32x32/categories/preferences-desktop-personal.png +32x32/categories/preferences-desktop.png +32x32/categories/preferences.png +32x32/categories/preferences-system-network.png +32x32/categories/preferences-system.png +32x32/categories/system-help.png +32x32/devices/camera-photo.png +32x32/devices/camera-video.png +32x32/devices/computer.png +32x32/devices/drive-harddisk.png +32x32/devices/drive-optical.png +32x32/devices/drive-removable-media.png +32x32/devices/input-mouse.png +32x32/devices/media-flash.png +32x32/devices/media-floppy.png +32x32/devices/media-optical.png +32x32/devices/network-wired.png +32x32/devices/network-wireless.png +32x32/devices/printer.png +32x32/devices/scanner.png +32x32/devices/usb.png +32x32/devices/video-display.png +32x32/mimetypes/application-pdf.png +32x32/mimetypes/application-quicktime.png +32x32/mimetypes/application-x-executable.png +32x32/mimetypes/audio-x-generic.png +32x32/mimetypes/empty-x-encrypted.png +32x32/mimetypes/empty-x-generic.png +32x32/mimetypes/empty-x-locked.png +32x32/mimetypes/empty-x-temporary.png +32x32/mimetypes/font-x-generic.png +32x32/mimetypes/image-x-generic.png +32x32/mimetypes/package-x-generic.png +32x32/mimetypes/text-ascii.png +32x32/mimetypes/text-html.png +32x32/mimetypes/text-x-generic.png +32x32/mimetypes/text-x-generic-template.png +32x32/mimetypes/text-x-script.png +32x32/mimetypes/unknown-x-temporary.png +32x32/mimetypes/video-x-generic.png +32x32/mimetypes/x-office-calendar.png +32x32/mimetypes/x-office-spreadsheet.png +32x32/places/archive-folder.png +32x32/places/document-folder.png +32x32/places/favorite-folder.png +32x32/places/folder.png +32x32/places/folder-remote.png +32x32/places/html-folder.png +32x32/places/network-server.png +32x32/places/network-workgroup.png +32x32/places/services.png +32x32/places/user-desktop.png +32x32/places/user-home.png +32x32/places/user-trash-empty.png +32x32/places/user-trash-full.png +32x32/places/user-trash.png +32x32/places/www.png +32x32/status/dialog-error.png +32x32/status/dialog-information.png +32x32/status/dialog-password.png +32x32/status/dialog-warning.png +48x48/actions/help-contents.png +48x48/actions/help-faq.png +48x48/apps/accessories-alarm.png +48x48/apps/accessories-archiver.png +48x48/apps/accessories-calculator.png +48x48/apps/accessories-character-map.png +48x48/apps/accessories-clipboard.png +48x48/apps/accessories-clock.png +48x48/apps/accessories-date.png +48x48/apps/accessories-dictionary.png +48x48/apps/accessories-disk-usage.png +48x48/apps/accessories-floppy.png +48x48/apps/accessories-magnifier.png +48x48/apps/accessories-notes.png +48x48/apps/accessories-terminal.png +48x48/apps/accessories-text-editor.png +48x48/apps/accessories-timer.png +48x48/apps/accessories-time-tracking.png +48x48/apps/accessories-tip.png +48x48/apps/graphics-image-viewer.png +48x48/apps/graphics-snapshot.png +48x48/apps/help-browser.png +48x48/apps/internet-download-manager.png +48x48/apps/internet-email-client.png +48x48/apps/internet-web-browser.png +48x48/apps/multimedia-movie-player.png +48x48/apps/multimedia-volume-control.png +48x48/apps/office-adobe-reader.png +48x48/apps/office-organizer.png +48x48/apps/office-pim.png +48x48/apps/preferences-desktop-accessibility.png +48x48/apps/preferences-desktop-font.png +48x48/apps/preferences-desktop-multimedia.png +48x48/apps/preferences-desktop-theme.png +48x48/apps/preferences-desktop-wallpaper.png +48x48/apps/system-file-manager.png +48x48/apps/system-software-update.png +48x48/apps/system-users.png +48x48/apps/utilities-terminal.png +48x48/categories/applications-games.png +48x48/categories/applications-graphics.png +48x48/categories/applications-internet.png +48x48/categories/applications-multimedia.png +48x48/categories/applications-office.png +48x48/categories/applications.png +48x48/categories/applications-system.png +48x48/categories/applications-utilities.png +48x48/categories/preferences-desktop-personal.png +48x48/categories/preferences-desktop.png +48x48/categories/preferences.png +48x48/categories/preferences-system-network.png +48x48/categories/preferences-system.png +48x48/categories/system-help.png +48x48/devices/camera-photo.png +48x48/devices/camera-video.png +48x48/devices/computer.png +48x48/devices/drive-harddisk.png +48x48/devices/drive-optical.png +48x48/devices/drive-removable-media.png +48x48/devices/input-mouse.png +48x48/devices/media-flash.png +48x48/devices/media-floppy.png +48x48/devices/media-optical.png +48x48/devices/network-wired.png +48x48/devices/network-wireless.png +48x48/devices/printer.png +48x48/devices/scanner.png +48x48/devices/usb.png +48x48/devices/video-display.png +48x48/mimetypes/application-pdf.png +48x48/mimetypes/application-quicktime.png +48x48/mimetypes/application-x-executable.png +48x48/mimetypes/audio-x-generic.png +48x48/mimetypes/empty-x-encrypted.png +48x48/mimetypes/empty-x-generic.png +48x48/mimetypes/empty-x-locked.png +48x48/mimetypes/empty-x-temporary.png +48x48/mimetypes/font-x-generic.png +48x48/mimetypes/image-x-generic.png +48x48/mimetypes/package-x-generic.png +48x48/mimetypes/text-ascii.png +48x48/mimetypes/text-html.png +48x48/mimetypes/text-x-generic.png +48x48/mimetypes/text-x-generic-template.png +48x48/mimetypes/text-x-script.png +48x48/mimetypes/unknown-x-temporary.png +48x48/mimetypes/video-x-generic.png +48x48/mimetypes/x-office-calendar.png +48x48/mimetypes/x-office-spreadsheet.png +48x48/places/archive-folder.png +48x48/places/document-folder.png +48x48/places/folder.png +48x48/places/folder-remote.png +48x48/places/html-folder.png +48x48/places/network-server.png +48x48/places/network-workgroup.png +48x48/places/services.png +48x48/places/user-desktop.png +48x48/places/user-home.png +48x48/places/user-trash-empty.png +48x48/places/user-trash-full.png +48x48/places/user-trash.png +48x48/places/www.png +48x48/status/dialog-password.png +64x64/actions/help-contents.png +64x64/actions/help-faq.png +64x64/apps/accessories-alarm.png +64x64/apps/accessories-archiver.png +64x64/apps/accessories-calculator.png +64x64/apps/accessories-character-map.png +64x64/apps/accessories-clipboard.png +64x64/apps/accessories-clock.png +64x64/apps/accessories-date.png +64x64/apps/accessories-dictionary.png +64x64/apps/accessories-disk-usage.png +64x64/apps/accessories-floppy.png +64x64/apps/accessories-magnifier.png +64x64/apps/accessories-notes.png +64x64/apps/accessories-terminal.png +64x64/apps/accessories-text-editor.png +64x64/apps/accessories-time-tracking.png +64x64/apps/accessories-tip.png +64x64/apps/graphics-image-viewer.png +64x64/apps/graphics-snapshot.png +64x64/apps/help-browser.png +64x64/apps/internet-download-manager.png +64x64/apps/internet-email-client.png +64x64/apps/internet-web-browser.png +64x64/apps/multimedia-movie-player.png +64x64/apps/multimedia-volume-control.png +64x64/apps/office-adobe-reader.png +64x64/apps/office-organizer.png +64x64/apps/office-pim.png +64x64/apps/preferences-desktop-accessibility.png +64x64/apps/preferences-desktop-font.png +64x64/apps/preferences-desktop-multimedia.png +64x64/apps/preferences-desktop-theme.png +64x64/apps/preferences-desktop-wallpaper.png +64x64/apps/system-file-manager.png +64x64/apps/system-software-update.png +64x64/apps/system-users.png +64x64/apps/utilities-terminal.png +64x64/categories/applications-games.png +64x64/categories/applications-graphics.png +64x64/categories/applications-internet.png +64x64/categories/applications-multimedia.png +64x64/categories/applications-office.png +64x64/categories/applications.png +64x64/categories/applications-system.png +64x64/categories/applications-utilities.png +64x64/categories/preferences-desktop-personal.png +64x64/categories/preferences-desktop.png +64x64/categories/preferences.png +64x64/categories/preferences-system-network.png +64x64/categories/preferences-system.png +64x64/categories/system-help.png +64x64/devices/camera-photo.png +64x64/devices/camera-video.png +64x64/devices/computer.png +64x64/devices/drive-harddisk.png +64x64/devices/drive-optical.png +64x64/devices/drive-removable-media.png +64x64/devices/input-mouse.png +64x64/devices/media-flash.png +64x64/devices/media-floppy.png +64x64/devices/media-optical.png +64x64/devices/network-wired.png +64x64/devices/network-wireless.png +64x64/devices/printer.png +64x64/devices/scanner.png +64x64/devices/usb.png +64x64/devices/video-display.png +64x64/mimetypes/application-pdf.png +64x64/mimetypes/application-quicktime.png +64x64/mimetypes/application-x-executable.png +64x64/mimetypes/audio-x-generic.png +64x64/mimetypes/empty-x-encrypted.png +64x64/mimetypes/empty-x-generic.png +64x64/mimetypes/empty-x-locked.png +64x64/mimetypes/empty-x-temporary.png +64x64/mimetypes/font-x-generic.png +64x64/mimetypes/image-x-generic.png +64x64/mimetypes/package-x-generic.png +64x64/mimetypes/text-ascii.png +64x64/mimetypes/text-html.png +64x64/mimetypes/text-x-generic.png +64x64/mimetypes/text-x-generic-template.png +64x64/mimetypes/text-x-script.png +64x64/mimetypes/unknown-x-temporary.png +64x64/mimetypes/video-x-generic.png +64x64/mimetypes/x-office-calendar.png +64x64/mimetypes/x-office-spreadsheet.png +64x64/places/archive-folder.png +64x64/places/document-folder.png +64x64/places/folder.png +64x64/places/folder-remote.png +64x64/places/html-folder.png +64x64/places/network-server.png +64x64/places/network-workgroup.png +64x64/places/services.png +64x64/places/user-desktop.png +64x64/places/user-home.png +64x64/places/user-trash-empty.png +64x64/places/user-trash-full.png +64x64/places/user-trash.png +64x64/places/www.png +64x64/status/dialog-password.png diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/freedesktop-to-qooxdoo.sh b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/freedesktop-to-qooxdoo.sh new file mode 100755 index 0000000000..2469874609 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/freedesktop-to-qooxdoo.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +INPUT=themes/freedesktop/use +OUTPUT=themes/qooxdoo/use + +echo ">>> Cleanup..." +rm -rf ${OUTPUT}/* + +echo ">>> Converting themes..." +for DIR in `find ${INPUT} -maxdepth 1 -mindepth 1 -type d ! -name .svn` +do + THEME=`basename $DIR` + echo " - $THEME" + + for ITEM in `cat data/qooxdoo_whitelist.dat` + do + SIZE=`echo $ITEM | cut -d"x" -f1` + SUBPATH=`echo $ITEM | cut -d"/" -f2-` + + SOURCE=${INPUT}/${THEME}/${ITEM} + TARGET=${OUTPUT}/${THEME}/${SIZE}/${SUBPATH} + TARGETDIR=`dirname $TARGET` + + if [ -r ${SOURCE} ] + then + if [ ! -r $TARGETDIR ]; then + mkdir -p $TARGETDIR + fi + cp -f ${SOURCE} ${TARGET} + else + echo " - Missing icon: $ITEM (Malformed whitelist!)" + fi + done +done diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/generate-whitelist.sh b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/generate-whitelist.sh new file mode 100755 index 0000000000..71ef709241 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/generate-whitelist.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +echo ">>> Indexing themes..." +mkdir -p temp +echo -n "" > temp/fd_content_all.txt +COUNT=0 +for DIR in `find themes/freedesktop/use -maxdepth 1 -mindepth 1 -type d ! -name .svn` +do + THEMENAME=`basename $DIR` + echo " - $THEMENAME" + find $DIR -name "*.png" | cut -d"/" -f5- >> temp/fd_content_all.txt + COUNT=$[$COUNT+1] +done + +echo ">>> Normalizing..." +cat temp/fd_content_all.txt | sort | uniq -c | grep "${COUNT} " | cut -d" " -f8 > data/qooxdoo_whitelist.dat + +echo ">>> Result..." +wc -l data/qooxdoo_whitelist.dat diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/kde-to-freedesktop.sh b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/kde-to-freedesktop.sh new file mode 100755 index 0000000000..95486c675b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/kde-to-freedesktop.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +OUTPUT=themes/freedesktop/use +CONVERT=./modules/kde-to-freedesktop.py + +echo ">>> Converting themes..." +chmod +x $CONVERT +mkdir -p $OUTPUT +for DIR in `find themes/kde/use -maxdepth 1 -mindepth 1 -type d ! -name .svn` +do + THEMENAME=`basename $DIR` + echo " * $THEMENAME" + ${CONVERT} -i $DIR -o ${OUTPUT}/${THEMENAME} +done diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/modules/fix-names.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/modules/fix-names.py new file mode 100755 index 0000000000..f52d881e94 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/modules/fix-names.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +# encoding: utf-8 +""" +fix-names.py +""" + +import os +import sys +import getopt + + +help_message = ''' +The help message goes here. +''' + + +class Usage(Exception): + def __init__(self, msg): + self.msg = msg + +def get_migration_patch(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image, qx_icon_path, tango_icon_path): + re = "" + for qx in qx_to_tango_map: + re += "(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\\\"\\'])%s\\.png([\\\"\\'])=\\1%s.png\\2\n" % (qx, qx_to_tango_map[qx]) + return re + + +def get_migration_info(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image, qx_icon_path, tango_icon_path): + re = "" + for qx in qx_not_in_tango: + re += "(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status) [/\\\"\\']%s\\.png[\\\"\\']=The image '%s.png' is no longer supported! Try to use a different icon.\n" % (qx, qx) + #re += "[/\\\"\\']%s\\.png[\\\"\\']=The image '%s.png' is no longer supported! Try to use a different icon.\n" % (qx, qx) + + re += "\n" + + for qx in qx_in_tango_without_image: + re += "(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\\\"\\']%s\\.png[\\\"\\']=The image '%s.png' is no longer supported! Try to use a different icon.\n" % (qx, qx) + #re += "\\b%s\\.png[\\\"\\']=The image '%s.png' should be renamed to '%s' but currently no icon for the default icon set exists!\n" % (qx, qx, qx_in_tango_without_image[qx]) + + return re + + +def get_html(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image, qx_icon_path, tango_icon_path): + html = """ + <html> + <body> + %s + </body> + </html> + """ + qx_to_tango_table = """ + <h2>qooxdoo to Tango mapping</h2> + <table> + %s + </table> + """ + rows = "" + for qx in qx_to_tango_map: + tango = qx_to_tango_map[qx] + rows += "<tr><td><img src='%s/%s.png'></img>%s</td><td><img src='%s/%s.png'></img>%s</td></tr>\n" % (qx_icon_path, qx, qx, tango_icon_path, tango, tango) + qx_to_tango_table = qx_to_tango_table % rows + + no_tango_icon_table = """ + <h2>qoxxdoo images tango equivalent but no tango icon</h2> + <table> + %s + </table> + """ + rows = "" + keys = qx_in_tango_without_image.keys() + keys.sort() + for qx in keys: + rows += "<tr><td><img src='%s/%s.png'></img>%s</td><td>%s</td></tr>\n" % (qx_icon_path, qx, qx, qx_in_tango_without_image[qx]) + no_tango_icon_table = no_tango_icon_table % rows + + no_tango_list = "<h2>qoxxdoo images without tango equivalent</h2>" + for qx in qx_not_in_tango: + no_tango_list += "<img src='%s/%s.png'></img>%s<br>\n" % (qx_icon_path, qx, qx) + + return html % (qx_to_tango_table + no_tango_icon_table + no_tango_list) + +def print_migration(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image): + pass + +def search_tango(filename, path): + for dirpath, dirs, files in os.walk(path): + if filename + ".png" in files: return os.path.join(dirpath.split(os.sep)[-1], filename) + return "" + +def fix_names(qx_icon_path, tango_icon_path): + qx_to_tango_map = {} + qx_not_in_tango = [] + qx_in_tango_without_image = {} + + lines = open(os.path.join(os.path.dirname(sys.argv[0]), "..", "data", "qooxdoo_freedesktop.dat")).readlines() + for line in lines: + line = line.strip(); + if line == "" or line[0] == "#": continue + if not "=" in line: + qx_not_in_tango.append(line) + continue + #qx = line + #tango = line + + (qx, tango) = map(lambda x: x.strip(), line.split("=")) + + if os.path.exists(os.path.join(tango_icon_path, tango + ".png")): + qx_to_tango_map[qx] = tango + else: + qx_in_tango_without_image[qx] = tango + + return ( + qx_to_tango_map, + qx_not_in_tango, + qx_in_tango_without_image + ) + +def main(argv=None): + tool_path = os.path.join(os.path.dirname(sys.argv[0]), "..") + if argv is None: + argv = sys.argv + try: + try: + opts, args = getopt.getopt(argv[1:], "ho:t:q:v", ["help", "output=", "tango-icon-path=", "qooxdoo-icon-path="]) + except getopt.error, msg: + raise Usage(msg) + + # option processing + tango_icon_path = os.path.join(tool_path, "themes/qooxdoo/nuvola/16x16") + qx_icon_path = os.path.join(tool_path, "../../source/resource/icon/nuvola/16") + output = "" + for option, value in opts: + if option == "-v": + verbose = True + if option in ("-h", "--help"): + raise Usage(help_message) + if option in ("-o", "--output"): + output = value + if option in ("-t", "--tango-icon-path"): + tango_icon_path = value + if option in ("-q", "--qooxdoo-icon-path"): + qx_icon_path = value + + if not output in ["html", "patch", "info", "debug"]: + raise Usage("invalid parameter for output.") + + (qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image) = fix_names(qx_icon_path, tango_icon_path) + + if output == "html": + print get_html(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image, qx_icon_path, tango_icon_path) + elif output == "info": + print get_migration_info(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image, qx_icon_path, tango_icon_path) + elif output == "patch": + print get_migration_patch(qx_to_tango_map, qx_not_in_tango, qx_in_tango_without_image, qx_icon_path, tango_icon_path) + elif output == "debug": + print qx_not_in_tango + + except Usage, err: + print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg) + print >> sys.stderr, "\t for help use --help" + return 2 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/modules/kde-to-freedesktop.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/modules/kde-to-freedesktop.py new file mode 100755 index 0000000000..51310bd6f0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/modules/kde-to-freedesktop.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import os +import sys +import shutil +import optparse + +def rmgeneric(path, __func__): + try: + __func__(path) + except OSError, (errno, strerror): + print ERROR_STR % {'path' : path, 'error': strerror } + + +def removeall(path): + if not os.path.isdir(path): + return + + files=os.listdir(path) + + for x in files: + fullpath=os.path.join(path, x) + if os.path.isfile(fullpath): + f=os.remove + rmgeneric(fullpath, f) + elif os.path.isdir(fullpath): + removeall(fullpath) + f=os.rmdir + rmgeneric(fullpath, f) + + + +def copy_file(kde, fd, options): + img_sizes = [16, 22, 32, 48, 64, 72, 96, 128] + found = [] + notfound = [] + + if options.verbose: + print " - Processing: %s -> %s" % (kde, fd) + + for size in img_sizes: + kde_file = "%s/%sx%s/%s.png" % (options.input, size, size, kde) + fd_file = "%s/%sx%s/%s.png" % (options.output, size, size, fd) + + if os.path.exists(kde_file): + fd_dir = os.path.dirname(fd_file) + if not os.path.exists(fd_dir): + os.makedirs(fd_dir) + + shutil.copyfile(kde_file, fd_file) + found.append(size) + + else: + notfound.append(size) + + if options.verbose: + dbg = " " + for size in img_sizes: + if size in found: + ret = "Y" + else: + ret = "N" + dbg += " [%s] %s" % (ret, size) + + print dbg + + + +def main(): + parser = optparse.OptionParser("usage: %prog [options]") + parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=False, help="Quiet output mode.") + parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Verbose output mode.") + parser.add_option("--input", "-i", action="store", dest="input", metavar="DIRECTORY", help="Input directory") + parser.add_option("--output", "-o", action="store", dest="output", metavar="DIRECTORY", help="Output directory") + + (options, args) = parser.parse_args(sys.argv[1:]) + + if options.input == None or options.output == None: + basename = os.path.basename(sys.argv[0]) + print "You must define both, the input and output folders!" + print "usage: %s [options]" % basename + print "Try '%s -h' or '%s --help' to show the help message." % (basename, basename) + sys.exit(1) + + print " - Cleaning up..." + removeall(options.output) + + dat = open("%s/../data/kde_freedesktop.dat" % os.path.dirname(sys.argv[0])) + + print " - Copying files..." + for line in dat.readlines(): + line = line.strip(); + + if line == "" or line[0] == "#": + continue + + if not line[0] in ["+", "*"]: + continue + + line = line[1:] + + (fd, kde) = map(lambda x: x.strip(), line.split("=")) + copy_file(kde, fd, options) + + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/normalize-kde-themes.sh b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/normalize-kde-themes.sh new file mode 100755 index 0000000000..976c466111 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/normalize-kde-themes.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +SIZES="16 22 24 32 48 64 72 96 128" + +echo ">>> Cleaning up old symlinks" +find themes/kde/use -type l | xargs rm -f + +echo ">>> Symlinking identical images..." +for DIR in `find themes/kde/use -maxdepth 1 -mindepth 1 -type d ! -name .svn` +do + THEMENAME=`basename $DIR` + echo " * $THEMENAME" + + for SIZE in $SIZES + do + for ITEM in `cat data/kde_normalize.dat` + do + NAME1=`echo $ITEM | cut -d"=" -f1` + NAME2=`echo $ITEM | cut -d"=" -f2 | sed s:"=":"":g` + + FILE1=$DIR/${SIZE}x${SIZE}/$NAME1.png + FILE2=$DIR/${SIZE}x${SIZE}/$NAME2.png + + if [ -r ${FILE1} ] + then + if [ ! -r ${FILE2} -a ! -L ${FILE2} ]; then + echo " - Linking: $SIZE/$NAME1 -> $SIZE/$NAME2" + mkdir -p `dirname ${FILE2}` + ln -s ${FILE1} ${FILE2} + fi + fi + + if [ -r ${FILE2} ] + then + if [ ! -r ${FILE1} -a ! -L ${FILE1} ]; then + echo " - Linking: $SIZE/$NAME2 -> $SIZE/$NAME1" + mkdir -p `dirname ${FILE1}` + ln -s ${FILE2} ${FILE1} + fi + fi + done + done +done diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/prepare-kde-themes.sh b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/prepare-kde-themes.sh new file mode 100755 index 0000000000..62c8073429 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/prepare-kde-themes.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +BASESIZES="16 22 32" + +echo ">>> Indexing themes..." +mkdir -p temp +echo -n "" > temp/kde_content_all.txt +COUNT=0 +for DIR in `find themes/kde/use -maxdepth 1 -mindepth 1 -type d ! -name .svn` +do + THEMENAME=`basename $DIR` + echo " - $THEMENAME" + find $DIR -name "*.png" | cut -d"/" -f5- >> temp/kde_content_all.txt + COUNT=$[$COUNT+1] +done + +echo ">>> Building common list..." +cat temp/kde_content_all.txt | sort | uniq -c | sort > temp/kde_content_count.txt +cat temp/kde_content_count.txt | grep "$COUNT " | cut -d" " -f8 | cut -d"." -f1 > temp/kde_content_common.txt +cat temp/kde_content_count.txt | grep "$[$COUNT-1] " | cut -d" " -f8 | cut -d"." -f1 > temp/kde_content_common_less.txt + +echo ">>> Building list for base sizes..." +echo -n "" > temp/kde_content_common_base_temp.txt +for BASESIZE in $BASESIZES; do + echo " * $BASESIZE" + grep ${BASESIZE}x${BASESIZE} temp/kde_content_common.txt | cut -d"/" -f2- | sort | uniq > temp/kde_content_common_${BASESIZE}.txt + cat temp/kde_content_common_${BASESIZE}.txt >> temp/kde_content_common_base_temp.txt +done + +echo ">>> Normalizing list..." +cat temp/kde_content_common_base_temp.txt | sort | uniq > temp/kde_content_common_base.txt + +echo ">>> Preparing replacement map..." +cat data/kde_freedesktop.dat | cut -s -d"=" -f2 | sort | uniq > temp/kde_content_assigned.txt + +echo ">>> Finding differences..." +diff temp/kde_content_common_base.txt temp/kde_content_assigned.txt > temp/kde_content_assigned.diff + +echo ">>> Unassigned images..." +grep "^<" temp/kde_content_assigned.diff | cut -d" " -f2- + +echo ">>> Unavailable images (hopefully empty)..." +grep "^>" temp/kde_content_assigned.diff | cut -d" " -f2- diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/scalable-to-png.sh b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/scalable-to-png.sh new file mode 100755 index 0000000000..f0fd4200e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/icon/scalable-to-png.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +which rsvg-convert > /dev/null || exit 1 + +SIZES="16 22 24 32 48 64 72 96 128" +FORMAT=png + +for TYPE in kde +do + INPUT=themes/${TYPE}/scalable + OUTPUT=themes/${TYPE}/use + + for THEME in `find $INPUT -maxdepth 1 -mindepth 1 -type d ! -name .svn` + do + THEMENAME=`basename $THEME` + echo ">>> Processing $THEMENAME ($TYPE)" + + mkdir -p $OUTPUT + + for DIR in `find ${THEME}/scalable -maxdepth 1 -mindepth 1 -type d ! -name .svn` + do + CAT=`basename $DIR` + echo " * Category ${CAT}" + + echo " - Creating directories..." + for SIZE in $SIZES; do + mkdir -p ${OUTPUT}/${THEMENAME}/${SIZE}x${SIZE}/${CAT} + done + + echo " - Rendering files..." + for SVG in `find $DIR -name "*.svg"` + do + SVGNAME=`basename $SVG` + RENNAME=`echo $SVGNAME | sed s:svg:$FORMAT:g` + + for SIZE in $SIZES; do + rsvg-convert $SVG -o ${OUTPUT}/${THEMENAME}/${SIZE}x${SIZE}/${CAT}/${RENNAME} -a -w $SIZE -h $SIZE -f $FORMAT + done + done + done + done +done diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/apiviewer.mk b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/apiviewer.mk new file mode 100644 index 0000000000..535770c18f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/apiviewer.mk @@ -0,0 +1,28 @@ +################################################################################
+#
+# qooxdoo - the new era of web development
+#
+# http://qooxdoo.org
+#
+# Copyright:
+# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org
+#
+# License:
+# LGPL: http://www.gnu.org/licenses/lgpl.html
+# EPL: http://www.eclipse.org/org/documents/epl-v10.php
+# See the LICENSE file in the project's top-level directory for details.
+#
+# Authors:
+# * Sebastian Werner (wpbasti)
+# * Andreas Ecker (ecker)
+# * Fabian Jakobs (fjakobs)
+#
+################################################################################
+
+#
+# API Paths
+#
+APIVIEWER_NAMESPACE = apiviewer
+APIVIEWER_PATH = $(QOOXDOO_PATH)/frontend/application/apiviewer
+APIVIEWER_SOURCE_PATH = $(APIVIEWER_PATH)/source
+APIVIEWER_FILES = index.html
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/application.mk b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/application.mk new file mode 100644 index 0000000000..94d1f9b614 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/application.mk @@ -0,0 +1,385 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################### +# INCLUDE EXTERNAL MAKEFILES +################################################################################### + +include $(QOOXDOO_PATH)/frontend/framework/tool/make/framework.mk +include $(QOOXDOO_PATH)/frontend/framework/tool/make/apiviewer.mk + + + +#################################################################################### +# BASIC SETTINGS +#################################################################################### + +# +# Location of your qooxdoo distribution +# Could be relative from this location or absolute +# +ifndef QOOXDOO_PATH + QOOXDOO_PATH = PLEASE_DEFINE_QOOXDOO_PATH +endif + +# +# The same as above, but from the webserver point of view +# Starting point is the application HTML file of the source folder. +# In most cases just add a "/.." compared to above +# +ifndef QOOXDOO_URI + QOOXDOO_URI = $(QOOXDOO_PATH)/.. +endif + +# +# Namespace of your application e.g. custom +# +ifndef APPLICATION_NAMESPACE + APPLICATION_NAMESPACE = custom +endif + +# +# Titles used in your API viewer and during the build process +# +ifndef APPLICATION_MAKE_TITLE + APPLICATION_MAKE_TITLE = CUSTOM +endif + +ifndef APPLICATION_API_TITLE + APPLICATION_API_TITLE = Custom +endif + +# +# Files that will be copied into the build directory +# (space separated list) (no default) +# +# ifndef APPLICATION_FILES +# APPLICATION_FILES = index.html +# endif + +# +# Locales to use (space separated list) +# +ifndef APPLICATION_LOCALES + APPLICATION_LOCALES = C +else + APPLICATION_LOCALES += C +endif + + + + + + +#################################################################################### +# ADVANCED SETTINGS +#################################################################################### + +# +# Define folder path +# +ifndef APPLICATION_PATH + APPLICATION_PATH = . +endif + +# +# Define deep folder paths +# +ifndef APPLICATION_SOURCE_PATH + APPLICATION_SOURCE_PATH = $(APPLICATION_PATH)/source +endif + +ifndef APPLICATION_BUILD_PATH + APPLICATION_BUILD_PATH = $(APPLICATION_PATH)/build +endif + +ifndef APPLICATION_API_PATH + APPLICATION_API_PATH = $(APPLICATION_PATH)/api +endif + +# +# Define the publishing location +# Could be any rsync compatible url/path +# +ifndef APPLICATION_PUBLISH_PATH + APPLICATION_PUBLISH_PATH = $(APPLICATION_PATH)/publish +endif + +# +# Define the debug location +# Could be any rsync compatible url/path +# +ifndef APPLICATION_DEBUG_PATH + APPLICATION_DEBUG_PATH = $(APPLICATION_PATH)/debug +endif + +# +# Relation from HTML file to the top level directory (source or build). +# +ifndef APPLICATION_PAGE_TO_TOPLEVEL + APPLICATION_PAGE_TO_TOPLEVEL = . +endif + +# +# Configure resource handling +# +ifndef APPLICATION_RESOURCE_FILTER + APPLICATION_RESOURCE_FILTER = false +endif + +# +# Customize your build +# +ifndef APPLICATION_COMPLETE_BUILD + APPLICATION_COMPLETE_BUILD = false +endif + +ifndef APPLICATION_COMPLETE_SOURCE + APPLICATION_COMPLETE_SOURCE = true +endif + +ifndef APPLICATION_COMPLETE_API + APPLICATION_COMPLETE_API = true +endif + +# +# Customize your build +# +ifndef APPLICATION_LINEBREAKS_BUILD + APPLICATION_LINEBREAKS_BUILD = true +endif + +ifndef APPLICATION_LINEBREAKS_SOURCE + APPLICATION_LINEBREAKS_SOURCE = true +endif + +# +# Configure optimizer +# +ifndef APPLICATION_OPTIMIZE_STRINGS + APPLICATION_OPTIMIZE_STRINGS = true +endif + +ifndef APPLICATION_OPTIMIZE_VARIABLES + APPLICATION_OPTIMIZE_VARIABLES = true +endif + +# +# Include support for widgets +# +ifndef APPLICATION_ENABLE_GUI + APPLICATION_ENABLE_GUI = true +endif + +# +# Redefine folder names (inside build/source) +# It is not recommended to change these fundamental settings. +# +ifndef APPLICATION_SCRIPT_FOLDERNAME + APPLICATION_SCRIPT_FOLDERNAME = script +endif + +ifndef APPLICATION_CLASS_FOLDERNAME + APPLICATION_CLASS_FOLDERNAME = class +endif + +ifndef APPLICATION_TRANSLATION_FOLDERNAME + APPLICATION_TRANSLATION_FOLDERNAME = translation +endif + +# +# Name of the generated script +# +ifndef APPLICATION_SCRIPT_FILENAME + APPLICATION_SCRIPT_FILENAME = $(APPLICATION_NAMESPACE).js +endif + +# +# Full application classname +# +ifndef APPLICATION_CLASSNAME + APPLICATION_CLASSNAME = $(APPLICATION_NAMESPACE).Application +endif + +# +# Translation path +# +ifndef APPLICATION_TRANSLATION_PATH + APPLICATION_TRANSLATION_PATH = $(APPLICATION_SOURCE_PATH)/$(APPLICATION_TRANSLATION_FOLDERNAME) +endif + +# +# Namespace of translation classes +# +ifndef APPLICATION_TRANSLATION_CLASS_NAMESPACE + APPLICATION_TRANSLATION_CLASS_NAMESPACE = $(APPLICATION_NAMESPACE).$(APPLICATION_TRANSLATION_FOLDERNAME) +endif + +# +# Directory of translation classes +# +ifndef APPLICATION_TRANSLATION_CLASS_PATH + APPLICATION_TRANSLATION_CLASS_PATH = $(APPLICATION_SOURCE_PATH)/$(APPLICATION_CLASS_FOLDERNAME)/$(APPLICATION_NAMESPACE)/$(APPLICATION_TRANSLATION_FOLDERNAME) +endif + +# +# Settings for more advanced users +# +ifndef APPLICATION_ADDITIONAL_CLASS_PATH + APPLICATION_ADDITIONAL_CLASS_PATH = +endif + +ifndef APPLICATION_ADDITIONAL_CLASS_URI + APPLICATION_ADDITIONAL_CLASS_URI = +endif + +ifndef APPLICATION_ADDITIONAL_RESOURCE + APPLICATION_ADDITIONAL_RESOURCE = +endif + +# +# Template to patch (e.g. XHTML mode) +# + +# (no default) + +#ifndef APPLICATION_TEMPLATE_INPUT +# APPLICATION_TEMPLATE_INPUT = +#endif + +ifndef APPLICATION_TEMPLATE_OUTPUT + APPLICATION_TEMPLATE_OUTPUT = $(APPLICATION_TEMPLATE_INPUT).out +endif + +ifndef APPLICATION_TEMPLATE_REPLACE + APPLICATION_TEMPLATE_REPLACE = <!-- qooxdoo-script-block --> +endif + + + + + + +################################################################################### +# COMPUTED DEFAULTS +################################################################################### + +COMPUTED_COMMON_INIT = + +COMPUTED_SOURCE_INCLUDE = +COMPUTED_SOURCE_LINEBREAKS = + +COMPUTED_BUILD_INCLUDE = +COMPUTED_BUILD_OPTIMIZATIONS = +COMPUTED_BUILD_LINEBREAKS = + +COMPUTED_API_INCLUDE = + + + + + + +################################################################################### +# PROCESSING APPLICATION SETTINGS +################################################################################### + +COMPUTED_CLASS_PATH = --class-path $(FRAMEWORK_SOURCE_PATH)/class \ + --class-path $(APPLICATION_SOURCE_PATH)/$(APPLICATION_CLASS_FOLDERNAME) \ + $(APPLICATION_ADDITIONAL_CLASS_PATH) + +COMPUTED_CLASS_URI = --class-uri $(FRAMEWORK_SOURCE_URI)/class \ + --class-uri $(APPLICATION_PAGE_TO_TOPLEVEL)/$(APPLICATION_CLASS_FOLDERNAME) \ + $(APPLICATION_ADDITIONAL_CLASS_URI) + +COMPUTED_RESOURCE = --copy-resources \ + --resource-input $(FRAMEWORK_SOURCE_PATH)/resource \ + --resource-output $(APPLICATION_BUILD_PATH)/resource/qx \ + --define-runtime-setting qx.manager.object.AliasManager.resourceUri:$(APPLICATION_PAGE_TO_TOPLEVEL)/resource/qx \ + --resource-input $(APPLICATION_SOURCE_PATH)/resource \ + --resource-output $(APPLICATION_BUILD_PATH)/resource/$(APPLICATION_NAMESPACE) \ + --define-runtime-setting $(APPLICATION_CLASSNAME).resourceUri:$(APPLICATION_PAGE_TO_TOPLEVEL)/resource/$(APPLICATION_NAMESPACE) \ + $(APPLICATION_ADDITIONAL_RESOURCE) + + +COMPUTED_FRAMEWORK_LOCALE_INCLUDE := $(APPLICATION_LOCALES:%= --include qx.locale.data.% ) +COMPUTED_FRAMEWORK_TRANSLATION_INCLUDE := $(APPLICATION_LOCALES:%= --include $(FRAMEWORK_TRANSLATION_CLASS_NAMESPACE).% ) +COMPUTED_APPLICATION_TRANSLATION_INCLUDE := $(APPLICATION_LOCALES:%= --include $(APPLICATION_TRANSLATION_CLASS_NAMESPACE).% ) + + +ifeq ($(APPLICATION_COMPLETE_SOURCE),false) + COMPUTED_SOURCE_INCLUDE = --include $(APPLICATION_CLASSNAME) \ + $(COMPUTED_FRAMEWORK_LOCALE_INCLUDE) \ + $(COMPUTED_FRAMEWORK_TRANSLATION_INCLUDE) \ + $(COMPUTED_APPLICATION_TRANSLATION_INCLUDE) +endif + +ifneq ($(APPLICATION_COMPLETE_BUILD),true) + COMPUTED_BUILD_INCLUDE = --include $(APPLICATION_CLASSNAME) \ + $(COMPUTED_FRAMEWORK_LOCALE_INCLUDE) \ + $(COMPUTED_FRAMEWORK_TRANSLATION_INCLUDE) \ + $(COMPUTED_APPLICATION_TRANSLATION_INCLUDE) +endif + +ifeq ($(APPLICATION_COMPLETE_API),false) + COMPUTED_API_INCLUDE = --include $(APPLICATION_CLASSNAME) +endif + +ifeq ($(APPLICATION_OPTIMIZE_STRINGS),true) + COMPUTED_BUILD_OPTIMIZATIONS += --optimize-strings +endif + +ifeq ($(APPLICATION_OPTIMIZE_VARIABLES),true) + COMPUTED_BUILD_OPTIMIZATIONS += --optimize-variables +endif + +ifeq ($(APPLICATION_ENABLE_GUI),false) + COMPUTED_COMMON_INIT = --define-runtime-setting qx.core.Init.component:qx.component.init.BasicInitComponent +endif + +ifeq ($(APPLICATION_RESOURCE_FILTER),true) + COMPUTED_RESOURCE += --enable-resource-filter +endif + +ifeq ($(APPLICATION_LINEBREAKS_SOURCE),true) + COMPUTED_SOURCE_LINEBREAKS = --add-new-lines --add-file-ids +endif + +ifeq ($(APPLICATION_LINEBREAKS_BUILD),true) + COMPUTED_BUILD_LINEBREAKS = --add-new-lines --add-file-ids +endif + +ifneq ($(APPLICATION_TEMPLATE_INPUT),) + COMPUTED_TEMPLATE = --source-template-input-file $(APPLICATION_SOURCE_PATH)/$(APPLICATION_TEMPLATE_INPUT) --source-template-output-file $(APPLICATION_SOURCE_PATH)/$(APPLICATION_TEMPLATE_OUTPUT) + + ifneq ($(APPLICATION_TEMPLATE_REPLACE),) + COMPUTED_TEMPLATE += --source-template-replace "$(APPLICATION_TEMPLATE_REPLACE)" + endif +endif + + + + +################################################################################### +# INCLUDE EXTERNAL MAKEFILES +################################################################################### + +include $(QOOXDOO_PATH)/frontend/framework/tool/make/impl.mk diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/framework.mk b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/framework.mk new file mode 100644 index 0000000000..d38594f7dd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/framework.mk @@ -0,0 +1,98 @@ +################################################################################
+#
+# qooxdoo - the new era of web development
+#
+# http://qooxdoo.org
+#
+# Copyright:
+# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org
+#
+# License:
+# LGPL: http://www.gnu.org/licenses/lgpl.html
+# EPL: http://www.eclipse.org/org/documents/epl-v10.php
+# See the LICENSE file in the project's top-level directory for details.
+#
+# Authors:
+# * Sebastian Werner (wpbasti)
+# * Andreas Ecker (ecker)
+# * Fabian Jakobs (fjakobs)
+#
+################################################################################
+
+#
+# Framework paths
+#
+FRAMEWORK_PATH = $(QOOXDOO_PATH)/frontend/framework
+FRAMEWORK_NAMESPACE = qx
+FRAMEWORK_SOURCE_PATH = $(FRAMEWORK_PATH)/source
+FRAMEWORK_CACHE_PATH = $(FRAMEWORK_PATH)/.cache
+FRAMEWORK_CLASS_FOLDERNAME = class
+
+FRAMEWORK_LOCALE_PATH = $(FRAMEWORK_SOURCE_PATH)/locale
+FRAMEWORK_LOCALE_CLASS_PATH = $(FRAMEWORK_SOURCE_PATH)/$(FRAMEWORK_CLASS_FOLDERNAME)/$(FRAMEWORK_NAMESPACE)/locale/data
+
+FRAMEWORK_TRANSLATION_PATH = $(FRAMEWORK_SOURCE_PATH)/translation
+FRAMEWORK_TRANSLATION_CLASS_NAMESPACE = $(FRAMEWORK_NAMESPACE).locale.translation
+FRAMEWORK_TRANSLATION_CLASS_PATH = $(FRAMEWORK_SOURCE_PATH)/$(FRAMEWORK_CLASS_FOLDERNAME)/$(FRAMEWORK_NAMESPACE)/locale/translation
+
+FRAMEWORK_TOOL_PATH = $(FRAMEWORK_PATH)/tool
+
+
+#
+# Framework config
+#
+FRAMEWORK_VERSION := $(shell cat $(QOOXDOO_PATH)/VERSION)
+FRAMEWORK_SVNINFO := $(shell python $(FRAMEWORK_TOOL_PATH)/modules/svninfo.py `dirname $(QOOXDOO_PATH)`)
+
+ifneq ($(FRAMEWORK_SVNINFO),"")
+ FRAMEWORK_FULL_VERSION = $(FRAMEWORK_VERSION) $(FRAMEWORK_SVNINFO)
+else
+ FRAMEWORK_FULL_VERSION = $(FRAMEWORK_VERSION)
+endif
+
+
+
+#
+# Framework URIs
+#
+FRAMEWORK_URI = $(QOOXDOO_URI)/frontend/framework
+FRAMEWORK_SOURCE_URI = $(FRAMEWORK_URI)/source
+FRAMEWORK_CLDR_DOWNLOAD_URI = http://unicode.org/cldr/data/common/main
+
+
+#
+# Configure commands
+#
+CMD_LINE = echo "----------------------------------------------------------------------------"
+CMD_NICE = nice -n 10
+CMD_PYTHON = $(CMD_NICE) python
+CMD_GENERATOR = $(CMD_PYTHON) $(FRAMEWORK_TOOL_PATH)/generator.py --cache-directory $(FRAMEWORK_CACHE_PATH) --version "$(FRAMEWORK_FULL_VERSION)"
+CMD_CLDR = $(CMD_PYTHON) $(FRAMEWORK_TOOL_PATH)/modules/cldr.py
+CMD_MSGFMT = $(CMD_PYTHON) $(FRAMEWORK_TOOL_PATH)/modules/msgfmt.py
+CMD_CHECKLOCALES = $(CMD_PYTHON) $(FRAMEWORK_TOOL_PATH)/modules/checklocales.py
+CMD_REMOVE = $(CMD_NICE) rm -rf
+CMD_FIND = $(CMD_NICE) find
+CMD_ZIP = $(CMD_NICE) zip
+CMD_TAR = $(CMD_NICE) tar
+CMD_ZIP_CREATE = $(CMD_ZIP) -rq
+CMD_TAR_CREATE = $(CMD_TAR) cfzp
+CMD_DIR = $(CMD_NICE) mkdir -p
+CMD_ANY2DOS = | xargs $(CMD_PYTHON) $(FRAMEWORK_TOOL_PATH)/modules/textutil.py --command any2Dos
+CMD_ANY2UNIX = | xargs $(CMD_PYTHON) $(FRAMEWORK_TOOL_PATH)/modules/textutil.py --command any2Unix
+CMD_MKEXEC = $(CMD_NICE) chmod a+rx
+
+# Optimized for remote sync (ssh etc.)
+CMD_SYNC_ONLINE = $(CMD_NICE) rsync --checksum --compress --recursive --delete --inplace --links --safe-links --exclude .svn
+
+# Optimized for local sync (same computer, filesystem)
+CMD_SYNC_OFFLINE = $(CMD_NICE) rsync --recursive --delete --inplace --links --safe-links --exclude .svn
+
+
+
+
+#
+# Configure files
+#
+FILES_TEXT = \( -name "*.py" -o -name "*.sh" -o -name "*.js" -o -name "*.html" -o -name "*.css" -o -name "*.xml" -o -name Makefile -o -name AUTHORS -o -name LICENSE -o -name README -o -name RELEASENOTES -o -name TODO \)
+FILES_TEMP = \( -name "*.pyc" -o -name "*.bak" -o -name "*.old" -o -name "*~" -o -name "messages.pot" \)
+FILES_EXEC = \( -name "*.py" -o -name "*.sh" \)
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/impl.mk b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/impl.mk new file mode 100644 index 0000000000..1b5179230b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/impl.mk @@ -0,0 +1,431 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################### +# EXEC TARGETS +################################################################################### + +# +# Cleanup targets +# + + +exec-clean: + @echo " * Cleaning up..." + @$(CMD_REMOVE) $(APPLICATION_SOURCE_PATH)/$(APPLICATION_SCRIPT_FOLDERNAME)/$(APPLICATION_SCRIPT_FILENAME) + @$(CMD_REMOVE) $(APPLICATION_BUILD_PATH)/$(APPLICATION_SCRIPT_FOLDERNAME)/$(APPLICATION_SCRIPT_FILENAME) + @$(CMD_REMOVE) $(APPLICATION_TRANSLATION_PATH)/messages.pot + @$(CMD_REMOVE) $(FRAMEWORK_TRANSLATION_PATH)/messages.pot + +exec-distclean: + @echo " * Cleaning up..." + @$(CMD_FIND) . $(FILES_TEMP) -exec $(CMD_REMOVE) {} \; + @$(CMD_REMOVE) $(APPLICATION_SOURCE_PATH)/$(APPLICATION_SCRIPT_FOLDERNAME) + @$(CMD_REMOVE) $(APPLICATION_BUILD_PATH) + @$(CMD_REMOVE) $(APPLICATION_API_PATH) + @$(CMD_REMOVE) $(APPLICATION_DEBUG_PATH) + @$(CMD_REMOVE) $(APPLICATION_TRANSLATION_CLASS_PATH) + @$(CMD_REMOVE) $(APPLICATION_TRANSLATION_PATH)/messages.pot + @$(CMD_REMOVE) $(FRAMEWORK_TRANSLATION_PATH)/messages.pot + @$(CMD_REMOVE) $(FRAMEWORK_CACHE_PATH) + @$(CMD_REMOVE) $(FRAMEWORK_LOCALE_CLASS_PATH) + @$(CMD_REMOVE) $(FRAMEWORK_TRANSLATION_CLASS_PATH) + + + + + +# +# Generator targets +# + +exec-script-source: + @$(CMD_GENERATOR) \ + $(COMPUTED_COMMON_INIT) \ + $(COMPUTED_CLASS_PATH) \ + $(COMPUTED_CLASS_URI) \ + --generate-source-script \ + $(COMPUTED_TEMPLATE) \ + --source-script-file $(APPLICATION_SOURCE_PATH)/$(APPLICATION_SCRIPT_FOLDERNAME)/$(APPLICATION_SCRIPT_FILENAME) \ + --define-runtime-setting $(FRAMEWORK_NAMESPACE).manager.object.AliasManager.resourceUri:$(FRAMEWORK_SOURCE_URI)/resource \ + $(COMPUTED_SOURCE_INCLUDE) \ + $(COMPUTED_SOURCE_LINEBREAKS) + +exec-script-build: + @$(CMD_GENERATOR) \ + $(COMPUTED_COMMON_INIT) \ + $(COMPUTED_CLASS_PATH) \ + $(COMPUTED_RESOURCE) \ + --generate-compiled-script \ + --compiled-script-file $(APPLICATION_BUILD_PATH)/$(APPLICATION_SCRIPT_FOLDERNAME)/$(APPLICATION_SCRIPT_FILENAME) \ + $(COMPUTED_BUILD_INCLUDE) \ + $(COMPUTED_BUILD_OPTIMIZATIONS) \ + $(COMPUTED_BUILD_LINEBREAKS) + +exec-resources-build: + @$(CMD_GENERATOR) \ + $(COMPUTED_COMMON_INIT) \ + $(COMPUTED_CLASS_PATH) \ + $(COMPUTED_RESOURCE) \ + $(COMPUTED_BUILD_INCLUDE) + + + + +# +# Utility targets +# +exec-pretty: + @$(CMD_GENERATOR) \ + --include-without-dependencies $(APPLICATION_NAMESPACE).* \ + --pretty-print \ + $(COMPUTED_CLASS_PATH) + +exec-fix: + @$(CMD_GENERATOR) \ + --include-without-dependencies $(APPLICATION_NAMESPACE).* \ + --fix-source \ + $(COMPUTED_CLASS_PATH) + + + + + + + +# +# Debug targets +# +exec-tokenizer: + @$(CMD_GENERATOR) \ + --include-without-dependencies $(APPLICATION_NAMESPACE).* \ + --store-tokens \ + --token-output-directory $(APPLICATION_DEBUG_PATH)/tokens \ + $(COMPUTED_CLASS_PATH) + +exec-treegenerator: + @$(CMD_GENERATOR) \ + --include-without-dependencies $(APPLICATION_NAMESPACE).* \ + --store-tree \ + --tree-output-directory $(APPLICATION_DEBUG_PATH)/tree \ + $(COMPUTED_CLASS_PATH) + + + + + + + +check-locales: + @echo $(APPLICATION_LOCALES) | $(CMD_CHECKLOCALES) + +ifdef APPLICATION_LOCALES + +exec-localization: check-locales exec-framework-localization +exec-translation: check-locales exec-framework-translation exec-application-translation + +else + +exec-localization: exec-none +exec-translation: exec-none + +endif + + + + + +exec-framework-localization: + @echo + @echo " PREPARING LOCALIZATION" + @$(CMD_LINE) + @mkdir -p $(FRAMEWORK_CACHE_PATH) + @mkdir -p $(FRAMEWORK_LOCALE_CLASS_PATH) + @echo " * Processing locales..." + @for LOC in $(APPLICATION_LOCALES); do \ + echo " - Locale: $$LOC"; \ + mod=0; \ + if [ ! -r $(FRAMEWORK_CACHE_PATH)/$$LOC.xml -a -r $(FRAMEWORK_LOCALE_PATH)/$$LOC.xml ]; then \ + echo " - Copying $$LOC.xml..."; \ + cp -f $(FRAMEWORK_LOCALE_PATH)/$$LOC.xml $(FRAMEWORK_CACHE_PATH)/$$LOC.xml; \ + mod=1; \ + fi; \ + if [ ! -r $(FRAMEWORK_CACHE_PATH)/$$LOC.xml ]; then \ + echo " - Downloading $$LOC.xml..."; \ + (which wget > /dev/null 2>&1 && wget $(FRAMEWORK_CLDR_DOWNLOAD_URI)/$$LOC.xml -q -P $(FRAMEWORK_CACHE_PATH)) || \ + (which curl > /dev/null 2>&1 && curl $(FRAMEWORK_CLDR_DOWNLOAD_URI)/$$LOC.xml -s -o $(FRAMEWORK_CACHE_PATH)/$$LOC.xml); \ + mod=1; \ + if [ ! -r $(FRAMEWORK_CACHE_PATH)/$$LOC.xml ]; then \ + echo " - Download failed! Please install wget (preferred) or curl."; \ + exit 1; \ + fi; \ + fi; \ + if [ ! -r $(FRAMEWORK_LOCALE_CLASS_PATH)/$$LOC.js -o $$mod -eq 1 ]; then \ + echo " - Generating $$LOC.js..."; \ + $(CMD_CLDR) -o $(FRAMEWORK_LOCALE_CLASS_PATH) $(FRAMEWORK_CACHE_PATH)/$$LOC.xml; \ + fi; \ + done + +exec-framework-translation: + @echo + @echo " PREPARING FRAMEWORK TRANSLATION" + @$(CMD_LINE) + @echo " * Processing source code..." + @which xgettext > /dev/null 2>&1 || (echo " - Please install gettext tools (xgettext)" && exit 1) + @which msginit > /dev/null 2>&1 || (echo " - Please install gettext tools (msginit)" && exit 1) + @which msgmerge > /dev/null 2>&1 || (echo " - Please install gettext tools (msgmerge)" && exit 1) + + @mkdir -p $(FRAMEWORK_TRANSLATION_PATH) + @mkdir -p $(FRAMEWORK_TRANSLATION_CLASS_PATH) + + @rm -f $(FRAMEWORK_TRANSLATION_PATH)/messages.pot + @touch $(FRAMEWORK_TRANSLATION_PATH)/messages.pot + @for file in `find $(FRAMEWORK_SOURCE_PATH)/$(FRAMEWORK_CLASS_FOLDERNAME) -name "*.js"`; do \ + LC_ALL=C xgettext --language=Java --from-code=UTF-8 \ + -kthis.trc -kthis.tr -kthis.marktr -kthis.trn:1,2 \ + -kManager.trc -kManager.tr -kManager.marktr -kManager.trn:1,2 \ + --sort-by-file --add-comments=TRANSLATION \ + -o $(FRAMEWORK_TRANSLATION_PATH)/messages.pot \ + `find $(FRAMEWORK_SOURCE_PATH)/$(FRAMEWORK_CLASS_FOLDERNAME) -name "*.js"` 2>&1 | grep -v warning; \ + break; done + + @echo " * Processing translations..." + @for LOC in $(APPLICATION_LOCALES); do \ + echo " - Translation: $$LOC"; \ + if [ ! -r $(FRAMEWORK_TRANSLATION_PATH)/$$LOC.po ]; then \ + echo " - Generating initial translation file..."; \ + msginit --locale $$LOC --no-translator -i $(FRAMEWORK_TRANSLATION_PATH)/messages.pot -o $(FRAMEWORK_TRANSLATION_PATH)/$$LOC.po > /dev/null 2>&1; \ + else \ + echo " - Merging translation file..."; \ + msgmerge --update -q $(FRAMEWORK_TRANSLATION_PATH)/$$LOC.po $(FRAMEWORK_TRANSLATION_PATH)/messages.pot; \ + fi; \ + echo " - Generating catalog..."; \ + mkdir -p $(FRAMEWORK_TRANSLATION_PATH); \ + $(CMD_MSGFMT) \ + -n $(FRAMEWORK_TRANSLATION_CLASS_NAMESPACE) \ + -d $(FRAMEWORK_TRANSLATION_CLASS_PATH) \ + $(FRAMEWORK_TRANSLATION_PATH)/$$LOC.po; \ + done + @rm -rf $(FRAMEWORK_TRANSLATION_PATH)/*~ + +exec-application-translation: + @echo + @echo " PREPARING APPLICATION TRANSLATION" + @$(CMD_LINE) + @echo " * Processing source code..." + + @which xgettext > /dev/null 2>&1 || (echo " - Please install gettext tools (xgettext)" && exit 1) + @which msginit > /dev/null 2>&1 || (echo " - Please install gettext tools (msginit)" && exit 1) + @which msgmerge > /dev/null 2>&1 || (echo " - Please install gettext tools (msgmerge)" && exit 1) + + @mkdir -p $(APPLICATION_TRANSLATION_PATH) + @mkdir -p $(APPLICATION_TRANSLATION_CLASS_PATH) + + @rm -f $(APPLICATION_TRANSLATION_PATH)/messages.pot + @touch $(APPLICATION_TRANSLATION_PATH)/messages.pot + @for file in `find $(APPLICATION_SOURCE_PATH)/$(APPLICATION_CLASS_FOLDERNAME) -name "*.js"`; do \ + LC_ALL=C xgettext --language=Java --from-code=UTF-8 \ + -kthis.trc -kthis.tr -kthis.marktr -kthis.trn:1,2 \ + -kManager.trc -kManager.tr -kManager.marktr -kManager.trn:1,2 \ + --sort-by-file --add-comments=TRANSLATION \ + -o $(APPLICATION_TRANSLATION_PATH)/messages.pot \ + `find $(APPLICATION_SOURCE_PATH)/$(APPLICATION_CLASS_FOLDERNAME) -name "*.js"` 2>&1 | grep -v warning; \ + break; done + + @echo " * Processing translations..." + @for LOC in $(APPLICATION_LOCALES); do \ + echo " - Translation: $$LOC"; \ + if [ ! -r $(APPLICATION_TRANSLATION_PATH)/$$LOC.po ]; then \ + echo " - Generating initial translation file..."; \ + msginit --locale $$LOC --no-translator -i $(APPLICATION_TRANSLATION_PATH)/messages.pot -o $(APPLICATION_TRANSLATION_PATH)/$$LOC.po > /dev/null 2>&1; \ + else \ + echo " - Merging translation file..."; \ + msgmerge --update -q $(APPLICATION_TRANSLATION_PATH)/$$LOC.po $(APPLICATION_TRANSLATION_PATH)/messages.pot; \ + fi; \ + echo " - Generating catalog..."; \ + mkdir -p $(APPLICATION_TRANSLATION_PATH); \ + $(CMD_MSGFMT) \ + -n $(APPLICATION_TRANSLATION_CLASS_NAMESPACE) \ + -d $(APPLICATION_TRANSLATION_CLASS_PATH) \ + $(APPLICATION_TRANSLATION_PATH)/$$LOC.po; \ + done + @rm -rf $(APPLICATION_TRANSLATION_PATH)/*~ + + + + + + + +# +# File copy targets +# + +exec-files-build: + @echo + @echo " COPYING OF FILES" + @$(CMD_LINE) + @echo " * Copying files..." + @mkdir -p $(APPLICATION_BUILD_PATH) + @for file in $(APPLICATION_FILES); do \ + echo " - Processing $$file"; \ + cp -Rf $(APPLICATION_SOURCE_PATH)/$$file $(APPLICATION_BUILD_PATH)/$$file; \ + done + +exec-files-api: + @echo + @echo " COPYING OF FILES" + @$(CMD_LINE) + @echo " * Copying files..." + @mkdir -p $(APPLICATION_API_PATH) + @for file in $(APIVIEWER_FILES); do \ + echo " - Processing $$file"; \ + cp -Rf $(APIVIEWER_SOURCE_PATH)/$$file $(APPLICATION_API_PATH)/$$file; \ + done + + + + + + + +# +# API targets +# + +exec-api-data: + @$(CMD_GENERATOR) \ + --generate-api-documentation \ + --api-documentation-json-file $(APPLICATION_API_PATH)/script/apidata.js \ + $(COMPUTED_CLASS_PATH) \ + $(COMPUTED_API_INCLUDE) + +exec-api-build: + @$(CMD_GENERATOR) \ + --class-path $(FRAMEWORK_SOURCE_PATH)/class \ + --class-path $(APIVIEWER_SOURCE_PATH)/class \ + --include apiviewer \ + --generate-compiled-script \ + --compiled-script-file $(APPLICATION_API_PATH)/script/$(APIVIEWER_NAMESPACE).js \ + --optimize-strings --optimize-variables \ + --copy-resources \ + --resource-input $(FRAMEWORK_SOURCE_PATH)/resource \ + --resource-output $(APPLICATION_API_PATH)/resource/$(FRAMEWORK_NAMESPACE) \ + --resource-input $(APIVIEWER_SOURCE_PATH)/resource \ + --resource-output $(APPLICATION_API_PATH)/resource/$(APIVIEWER_NAMESPACE) \ + --enable-resource-filter \ + --define-runtime-setting $(FRAMEWORK_NAMESPACE).manager.object.AliasManager.resourceUri:resource/$(FRAMEWORK_NAMESPACE) \ + --define-runtime-setting $(APIVIEWER_NAMESPACE).Application.resourceUri:resource/$(APIVIEWER_NAMESPACE) \ + --define-runtime-setting $(APIVIEWER_NAMESPACE).Viewer.title:$(APPLICATION_API_TITLE) + + + + + + + +# +# Publish targets +# +exec-publish: + @echo " * Syncing files..." + @$(CMD_SYNC_ONLINE) $(APPLICATION_BUILD_PATH)/* $(APPLICATION_PUBLISH_PATH) + + + + + + + +# +# None helper target +# +exec-none: + @true + + + + + + +################################################################################### +# INFO TARGETS +################################################################################### + +info-build: + @echo + @echo "****************************************************************************" + @echo " GENERATING BUILD VERSION OF $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" + +info-source: + @echo + @echo "****************************************************************************" + @echo " GENERATING SOURCE VERSION OF $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" + +info-api: + @echo + @echo "****************************************************************************" + @echo " GENERATING API VIEWER FOR $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" + +info-pretty: + @echo + @echo "****************************************************************************" + @echo " PRETTIFYING $(APPLICATION_MAKE_TITLE) CLASSES" + @echo "****************************************************************************" + +info-fix: + @echo + @echo "****************************************************************************" + @echo " FIXING $(APPLICATION_MAKE_TITLE) CLASSES" + @echo "****************************************************************************" + +info-help: + @echo + @echo "****************************************************************************" + @echo " HELP FOR $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" + +info-clean: + @echo + @echo "****************************************************************************" + @echo " CLEANING UP $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" + +info-distclean: + @echo + @echo "****************************************************************************" + @echo " CLEANING UP $(APPLICATION_MAKE_TITLE)" COMPLETELY + @echo "****************************************************************************" + +info-publish: + @echo + @echo "****************************************************************************" + @echo " PUBLISHING $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" + +info-debug: + @echo + @echo "****************************************************************************" + @echo " CREATING DEBUG DATA FOR $(APPLICATION_MAKE_TITLE)" + @echo "****************************************************************************" diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/project.mk b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/project.mk new file mode 100644 index 0000000000..6e850cdb78 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/project.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +warning: + @echo + @echo "****************************************************************************" + @echo " WARNING" + @echo "----------------------------------------------------------------------------" + @echo " This file 'project.mk' has been renamed to 'application.mk'." + @echo " between release 0.6.4 and 0.6.5. You have to migrate manually:" + @echo " Please replace all occurrences of 'project.mk' in your Makefiles with" + @echo " 'application.mk'." + @echo "****************************************************************************" + + + +source: warning +build: warning +api: warning +all: warning + +include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/targets.mk b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/targets.mk new file mode 100644 index 0000000000..d785d8614e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/make/targets.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +################################################################################### +# TARGETS +################################################################################### + +# +# Target definitions +# + +.PHONY: source build api all locales pretty fix help clean distclean publish debug + +source: info-source exec-localization exec-translation exec-script-source +build: info-build exec-localization exec-translation exec-script-build exec-files-build +api: info-api exec-localization exec-translation exec-api-build exec-api-data exec-files-api +all: source build api + +locales: exec-localization exec-translation + +pretty: info-pretty exec-pretty +fix: info-fix exec-fix + +help: info-help + +clean: info-clean exec-clean +distclean: info-distclean exec-distclean + +publish: build info-publish exec-publish + +debug: info-debug exec-tokenizer exec-treegenerator diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.5.2/info/01-changes.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.5.2/info/01-changes.dat new file mode 100644 index 0000000000..5d3870e9f7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.5.2/info/01-changes.dat @@ -0,0 +1,2 @@ +QxWindowManager=QxWindowManager was converted from a singleton to a normal class to allow multiple usage. This is useful for example to implement something like virtual desktops. +QxAtom=Was renamed to QxFooBar (Only a test) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/info/01-windowevents.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/info/01-windowevents.dat new file mode 100644 index 0000000000..2555ce0d46 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/info/01-windowevents.dat @@ -0,0 +1,6 @@ +\.addEventListener\(\s*"resize"=Possible use of old resize event. When used to detect a window resize it must be renamed to "windowresize".
+\.addEventListener\(\s*"focus"=Possible use of old focus event. When used to detect a window resize it must be renamed to "windowfocus".
+\.addEventListener\(\s*"blur"=Possible use of old blur event. When used to detect a window resize it must be renamed to "windowblur".
+\.removeEventListener\(\s*"resize"=Possible use of old resize event. When used to detect a window resize it must be renamed to "windowresize".
+\.removeEventListener\(\s*"focus"=Possible use of old focus event. When used to detect a window resize it must be renamed to "windowfocus".
+\.removeEventListener\(\s*"blur"=Possible use of old blur event. When used to detect a window resize it must be renamed to "windowblur".
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/patches/01-xml.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/patches/01-xml.dat new file mode 100644 index 0000000000..9bdd530e05 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/patches/01-xml.dat @@ -0,0 +1 @@ +\bqx\.lang\.XmlEmu\.createXmlDom\b=qx.lang.Xml.createXmlDom
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/patches/02-application.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/patches/02-application.dat new file mode 100644 index 0000000000..5f71764537 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.1/patches/02-application.dat @@ -0,0 +1 @@ +\bqx\.core\.Init\.getInstance\(\)\.setApplication\(\s*new\s+=qx.core.Init.getInstance().setApplication(
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/info/01-nativewindow.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/info/01-nativewindow.dat new file mode 100644 index 0000000000..e7d408a5db --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/info/01-nativewindow.dat @@ -0,0 +1,2 @@ +\bqx\.client\.NativeWindow\b=NativeWindow now also supports "load" and "close" events. + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/info/02-functionextension.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/info/02-functionextension.dat new file mode 100644 index 0000000000..8e901f6933 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/info/02-functionextension.dat @@ -0,0 +1 @@ +\.closure\s*\(=Extension Function.prototype.closure has been removed. diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/patches/01-parent.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/patches/01-parent.dat new file mode 100644 index 0000000000..e5d5aec288 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.2/patches/01-parent.dat @@ -0,0 +1,2 @@ +\.getFocusManager\s*\(=.getFocusHandler( +\.setFocusManager\s*\(=.setFocusHandler( diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/01-constants.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/01-constants.dat new file mode 100644 index 0000000000..763a7b99e7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/01-constants.dat @@ -0,0 +1,293 @@ +\bqx\.constant\.Core\.EMPTY\b=""
+\bqx\.constant\.Core\.SPACE\b=" "
+\bqx\.constant\.Core\.SLASH\b="/"
+\bqx\.constant\.Core\.DOT\b="."
+\bqx\.constant\.Core\.ZERO\b="0"
+\bqx\.constant\.Core\.QUOTE='"'
+\bqx\.constant\.Core\.NEWLINE\b="\\n"
+\bqx\.constant\.Core\.SINGLEQUOTE\b="'"
+\bqx\.constant\.Core\.STAR\b="*"
+\bqx\.constant\.Core\.PLUS\b="+"
+\bqx\.constant\.Core\.MINUS\b="-"
+\bqx\.constant\.Core\.COMMA\b=","
+\bqx\.constant\.Core\.DASH\b="-"
+\bqx\.constant\.Core\.UNDERLINE\b="_"
+\bqx\.constant\.Core\.SEMICOLON\b=";"
+\bqx\.constant\.Core\.COLON\b=":"
+\bqx\.constant\.Core\.EQUAL\b="\="
+\bqx\.constant\.Core\.AMPERSAND\b="&"
+\bqx\.constant\.Core\.QUESTIONMARK\b="?"
+\bqx\.constant\.Core\.HASH\b="#"
+\bqx\.constant\.Core\.SMALLER\b="<"
+\bqx\.constant\.Core\.BIGGER\b=">"
+\bqx\.constant\.Core\.PERCENT\b="%"
+\bqx\.constant\.Core\.PIXEL\b="px"
+\bqx\.constant\.Core\.MILLISECONDS\b="ms"
+\bqx\.constant\.Core\.FLEX\b="1*"
+\bqx\.constant\.Core\.ZEROPIXEL\b="0px"
+\bqx\.constant\.Core\.HUNDREDPERCENT\b="100%"
+\bqx\.constant\.Core\.YES\b="yes"
+\bqx\.constant\.Core\.NO\b="no"
+\bqx\.constant\.Core\.ON\b="on"
+\bqx\.constant\.Core\.OFF\b="off"
+\bqx\.constant\.Core\.SET\b="set"
+\bqx\.constant\.Core\.GET\b="get"
+\bqx\.constant\.Core\.DEFAULT\b="default"
+\bqx\.constant\.Core\.AUTO\b="auto"
+\bqx\.constant\.Core\.NONE\b="none"
+\bqx\.constant\.Core\.DISABLED\b="disabled"
+\bqx\.constant\.Core\.HIDDEN\b="hidden"
+
+
+
+\bqx\.constant\.Event\.MOUSEOVER\b="mouseover"
+\bqx\.constant\.Event\.MOUSEMOVE\b="mousemove"
+\bqx\.constant\.Event\.MOUSEOUT\b="mouseout"
+\bqx\.constant\.Event\.MOUSEDOWN\b="mousedown"
+\bqx\.constant\.Event\.MOUSEUP\b="mouseup"
+\bqx\.constant\.Event\.MOUSEWHEEL\b="mousewheel"
+\bqx\.constant\.Event\.CLICK\b="click"
+\bqx\.constant\.Event\.DBLCLICK\b="dblclick"
+\bqx\.constant\.Event\.CONTEXTMENU\b="contextmenu"
+\bqx\.constant\.Event\.KEYDOWN\b="keydown"
+\bqx\.constant\.Event\.KEYPRESS\b="keypress"
+\bqx\.constant\.Event\.KEYINPUT\b="keyinput"
+\bqx\.constant\.Event\.KEYUP\b="keyup"
+\bqx\.constant\.Event\.BLUR\b="blur"
+\bqx\.constant\.Event\.FOCUS\b="focus"
+\bqx\.constant\.Event\.FOCUSIN\b="focusin"
+\bqx\.constant\.Event\.FOCUSOUT\b="focusout"
+\bqx\.constant\.Event\.SELECT\b="select"
+\bqx\.constant\.Event\.SCROLL\b="scroll"
+\bqx\.constant\.Event\.INPUT\b="input"
+\bqx\.constant\.Event\.CHANGE\b="change"
+\bqx\.constant\.Event\.RESIZE\b="resize"
+\bqx\.constant\.Event\.CHANGESELECTION\b="changeSelection"
+\bqx\.constant\.Event\.INTERVAL\b="interval"
+\bqx\.constant\.Event\.EXECUTE\b="execute"
+\bqx\.constant\.Event\.CREATE\b="create"
+\bqx\.constant\.Event\.LOAD\b="load"
+\bqx\.constant\.Event\.ERROR\b="error"
+\bqx\.constant\.Event\.SUBMIT\b="submit"
+\bqx\.constant\.Event\.UNLOAD\b="unload"
+\bqx\.constant\.Event\.BEFOREUNLOAD\b="beforeunload"
+\bqx\.constant\.Event\.TREEOPENWITHCONTENT\b="treeOpenWithContent"
+\bqx\.constant\.Event\.TREEOPENWHILEEMPTY\b="treeOpenWhileEmpty"
+\bqx\.constant\.Event\.TREECLOSE\b="treeClose"
+\bqx\.constant\.Event\.BEFOREAPPEAR\b="beforeAppear"
+\bqx\.constant\.Event\.APPEAR\b="appear"
+\bqx\.constant\.Event\.BEFOREDISAPPEAR\b="beforeDisappear"
+\bqx\.constant\.Event\.DISAPPEAR\b="disappear"
+\bqx\.constant\.Event\.BEFOREINSERTDOM\b="beforeInsertDom"
+\bqx\.constant\.Event\.INSERTDOM\b="insertDom"
+\bqx\.constant\.Event\.BEFOREREMOVEDOM\b="beforeRemoveDom"
+\bqx\.constant\.Event\.REMOVEDOM\b="removeDom"
+\bqx\.constant\.Event\.DRAGDROP\b="dragdrop"
+\bqx\.constant\.Event\.DRAGOVER\b="dragover"
+\bqx\.constant\.Event\.DRAGOUT\b="dragout"
+\bqx\.constant\.Event\.DRAGMOVE\b="dragmove"
+\bqx\.constant\.Event\.DRAGSTART\b="dragstart"
+\bqx\.constant\.Event\.DRAGEND\b="dragend"
+\bqx\.constant\.Event\.CREATED\b="created"
+\bqx\.constant\.Event\.CONFIGURED\b="configured"
+\bqx\.constant\.Event\.QUEUED\b="queued"
+\bqx\.constant\.Event\.SENDING\b="sending"
+\bqx\.constant\.Event\.RECEIVING\b="receiving"
+\bqx\.constant\.Event\.COMPLETED\b="completed"
+\bqx\.constant\.Event\.ABORTED\b="aborted"
+\bqx\.constant\.Event\.FAILED\b="failed"
+\bqx\.constant\.Event\.TIMEOUT\b="timeout"
+\bqx\.constant\.Event\.DIALOGOK\b="dialogok"
+\bqx\.constant\.Event\.DIALOGCANCEL\b="dialogcancel"
+\bqx\.constant\.Event\.DIALOGCLOSE\b="dialogclose"
+\bqx\.constant\.Event\.DIALOGPREVIOUS\b="dialogprevious"
+\bqx\.constant\.Event\.DIALOGNEXT\b="dialognext"
+\bqx\.constant\.Event\.DIALOGFIRST\b="dialogfirst"
+\bqx\.constant\.Event\.DIALOGLAST\b="dialoglast"
+
+
+
+\bqx\.constant\.Html\.AMPERSAND\b="&"
+\bqx\.constant\.Html\.SMALLER\b="<"
+\bqx\.constant\.Html\.BIGGER\b=">"
+\bqx\.constant\.Html\.QUOTE\b="""
+\bqx\.constant\.Html\.SPACE\b=" "
+
+
+
+\bqx\.constant\.Layout\.ORIENTATION_HORIZONTAL\b="horizontal"
+\bqx\.constant\.Layout\.ORIENTATION_VERTICAL\b="vertical"
+\bqx\.constant\.Layout\.ALIGN_LEFT\b="left"
+\bqx\.constant\.Layout\.ALIGN_LEFT_REVERSED\b="left-reversed"
+\bqx\.constant\.Layout\.ALIGN_CENTER\b="center"
+\bqx\.constant\.Layout\.ALIGN_CENTER_REVERSED\b="center-reversed"
+\bqx\.constant\.Layout\.ALIGN_RIGHT\b="right"
+\bqx\.constant\.Layout\.ALIGN_RIGHT_REVERSED\b="right-reversed"
+\bqx\.constant\.Layout\.ALIGN_TOP\b="top"
+\bqx\.constant\.Layout\.ALIGN_TOP_REVERSED\b="top-reversed"
+\bqx\.constant\.Layout\.ALIGN_MIDDLE\b="middle"
+\bqx\.constant\.Layout\.ALIGN_MIDDLE_REVERSED\b="middle-reversed"
+\bqx\.constant\.Layout\.ALIGN_BOTTOM\b="bottom"
+\bqx\.constant\.Layout\.ALIGN_BOTTOM_REVERSED\b="bottom-reversed"
+
+
+
+\bqx\.constant\.Mime\.JAVASCRIPT\b="text/javascript"
+\bqx\.constant\.Mime\.JSON\b="text/json"
+\bqx\.constant\.Mime\.XML\b="application/xml"
+\bqx\.constant\.Mime\.TEXT\b="text/plain"
+\bqx\.constant\.Mime\.HTML\b="text/html"
+
+
+
+\bqx\.constant\.Net\.NAMESPACE_SVG\b=qx.xml.Namespace.SVG
+\bqx\.constant\.Net\.NAMESPACE_SMIL\b=qx.xml.Namespace.SMIL
+\bqx\.constant\.Net\.NAMESPACE_MML\b=qx.xml.Namespace.MML
+\bqx\.constant\.Net\.NAMESPACE_CML\b=qx.xml.Namespace.CML
+\bqx\.constant\.Net\.NAMESPACE_XLINK\b=qx.xml.Namespace.XLINK
+\bqx\.constant\.Net\.NAMESPACE_XHTML\b=qx.xml.Namespace.XHTML
+\bqx\.constant\.Net\.NAMESPACE_XUL\b=qx.xml.Namespace.XUL
+\bqx\.constant\.Net\.NAMESPACE_XBL\b=qx.xml.Namespace.XBL
+\bqx\.constant\.Net\.NAMESPACE_FO\b=qx.xml.Namespace.FO
+\bqx\.constant\.Net\.NAMESPACE_XSL\b=qx.xml.Namespace.XSL
+\bqx\.constant\.Net\.NAMESPACE_XSLT\b=qx.xml.Namespace.XSLT
+\bqx\.constant\.Net\.NAMESPACE_XI\b=qx.xml.Namespace.XI
+\bqx\.constant\.Net\.NAMESPACE_XFORMS\b=qx.xml.Namespace.XFORMS
+\bqx\.constant\.Net\.NAMESPACE_SAXON\b=qx.xml.Namespace.SAXON
+\bqx\.constant\.Net\.NAMESPACE_XALAN\b=qx.xml.Namespace.XALAN
+\bqx\.constant\.Net\.NAMESPACE_XSD\b=qx.xml.Namespace.XSD
+\bqx\.constant\.Net\.NAMESPACE_DT\b=qx.xml.Namespace.DT
+\bqx\.constant\.Net\.NAMESPACE_XSI\b=qx.xml.Namespace.XSI
+\bqx\.constant\.Net\.NAMESPACE_RDF\b=qx.xml.Namespace.RDF
+\bqx\.constant\.Net\.NAMESPACE_RDFS\b=qx.xml.Namespace.RDFS
+\bqx\.constant\.Net\.NAMESPACE_DC\b=qx.xml.Namespace.DC
+\bqx\.constant\.Net\.NAMESPACE_DCQ\b=qx.xml.Namespace.DCQ
+\bqx\.constant\.Net\.NAMESPACE_SOAPENV\b=qx.xml.Namespace.SOAPENV
+\bqx\.constant\.Net\.NAMESPACE_WSDL\b=qx.xml.Namespace.WSDL
+\bqx\.constant\.Net\.NAMESPACE_ADOBESVGEXTENSIONS\b=qx.xml.Namespace.ADOBESVGEXTENSIONS
+\bqx\.constant\.Net\b=qx.xml.Namespace
+\bqx\.constant\.Net\.STATE_CREATED\b="created"
+\bqx\.constant\.Net\.STATE_CONFIGURED\b="configured"
+\bqx\.constant\.Net\.STATE_QUEUED\b="queued"
+\bqx\.constant\.Net\.STATE_SENDING\b="sending"
+\bqx\.constant\.Net\.STATE_RECEIVING\b="receiving"
+\bqx\.constant\.Net\.STATE_COMPLETED\b="completed"
+\bqx\.constant\.Net\.STATE_ABORTED\b="aborted"
+\bqx\.constant\.Net\.STATE_FAILED\b="failed"
+\bqx\.constant\.Net\.STATE_TIMEOUT\b="timeout"
+\bqx\.constant\.Net\.PROTOCOL_HTTP\b=qx.net.Protocol.HTTP
+\bqx\.constant\.Net\.PROTOCOL_HTTPS\b=qx.net.Protocol.HTTPS
+\bqx\.constant\.Net\.PROTOCOL_FTP\b=qx.net.Protocol.FTP
+\bqx\.constant\.Net\.PROTOCOL_FILE\b=qx.net.Protocol.FILE
+\bqx\.constant\.Net\.URI_HTTP\b=qx.net.Protocol.URI_HTTP
+\bqx\.constant\.Net\.URI_HTTPS\b=qx.net.Protocol.URI_HTTPS
+\bqx\.constant\.Net\.URI_FTP\b=qx.net.Protocol.URI_FTP
+\bqx\.constant\.Net\.URI_FILE\b=qx.net.Protocol.URI_FILE
+\bqx\.constant\.Net\.METHOD_GET\b=qx.net.Http.METHOD_GET
+\bqx\.constant\.Net\.METHOD_POST\b=qx.net.Http.METHOD_POST
+\bqx\.constant\.Net\.METHOD_PUT\b=qx.net.Http.METHOD_PUT
+\bqx\.constant\.Net\.METHOD_HEAD\b=qx.net.Http.METHOD_HEAD
+\bqx\.constant\.Net\.METHOD_DELETE\b=qx.net.Http.METHOD_DELETE
+\bqx\.constant\.Net\b=qx.net.Protocol
+
+
+
+\bqx\.constant\.Style\.PROPERTY_FILTER\b="filter"
+\bqx\.constant\.Style\.PROPERTY_ZINDEX\b="zIndex"
+\bqx\.constant\.Style\.PROPERTY_DISPLAY\b="display"
+\bqx\.constant\.Style\.PROPERTY_POSITION\b="position"
+\bqx\.constant\.Style\.PROPERTY_VISIBILITY\b="visibility"
+\bqx\.constant\.Style\.PROPERTY_DISABLED\b="disabled"
+\bqx\.constant\.Style\.PROPERTY_LINEHEIGHT\b="lineHeight"
+\bqx\.constant\.Style\.PROPERTY_TEXTALIGN\b="textAlign"
+\bqx\.constant\.Style\.PROPERTY_WHITESPACE\b="whiteSpace"
+\bqx\.constant\.Style\.PROPERTY_COLOR\b="color"
+\bqx\.constant\.Style\.PROPERTY_BACKGROUNDCOLOR\b="backgroundColor"
+\bqx\.constant\.Style\.PROPERTY_HEIGHT\b="height"
+\bqx\.constant\.Style\.PROPERTY_WIDTH\b="width"
+\bqx\.constant\.Style\.PROPERTY_TOP\b="top"
+\bqx\.constant\.Style\.PROPERTY_BOTTOM\b="bottom"
+\bqx\.constant\.Style\.PROPERTY_LEFT\b="left"
+\bqx\.constant\.Style\.PROPERTY_RIGHT\b="right"
+\bqx\.constant\.Style\.PROPERTY_PADDING\b="padding"
+\bqx\.constant\.Style\.PROPERTY_PADDINGTOP\b="paddingTop"
+\bqx\.constant\.Style\.PROPERTY_PADDINGRIGHT\b="paddingRight"
+\bqx\.constant\.Style\.PROPERTY_PADDINGBOTTOM\b="paddingBottom"
+\bqx\.constant\.Style\.PROPERTY_PADDINGLEFT\b="paddingLeft"
+\bqx\.constant\.Style\.PROPERTY_MARGIN\b="margin"
+\bqx\.constant\.Style\.PROPERTY_MARGINTOP\b="marginTop"
+\bqx\.constant\.Style\.PROPERTY_MARGINRIGHT\b="marginRight"
+\bqx\.constant\.Style\.PROPERTY_MARGINBOTTOM\b="marginBottom"
+\bqx\.constant\.Style\.PROPERTY_MARGINLEFT\b="marginLeft"
+\bqx\.constant\.Style\.PROPERTY_OVERFLOW_BOTH\b="overflow"
+\bqx\.constant\.Style\.PROPERTY_OVERFLOW_TEXT\b="textOverflow"
+\bqx\.constant\.Style\.PROPERTY_OVERFLOW_HORIZONTAL\b="overflowX"
+\bqx\.constant\.Style\.PROPERTY_OVERFLOW_VERTICAL\b="overflowY"
+\bqx\.constant\.Style\.POSITION_ABSOLUTE\b="absolute"
+\bqx\.constant\.Style\.POSITION_RELATIVE\b="relative"
+\bqx\.constant\.Style\.POSITION_STATIC\b="static"
+\bqx\.constant\.Style\.POSITION_FIXED\b="fixed"
+\bqx\.constant\.Style\.CURSOR_WAIT\b="wait"
+\bqx\.constant\.Style\.CURSOR_PROGRESS\b="progress"
+\bqx\.constant\.Style\.CURSOR_DEFAULT\b="default"
+\bqx\.constant\.Style\.OVERFLOW_AUTO\b="auto"
+\bqx\.constant\.Style\.OVERFLOW_HIDDEN\b="hidden"
+\bqx\.constant\.Style\.OVERFLOW_BOTH\b="scroll"
+\bqx\.constant\.Style\.OVERFLOW_HORIZONTAL\b="scrollX"
+\bqx\.constant\.Style\.OVERFLOW_VERTICAL\b="scrollY"
+\bqx\.constant\.Style\.OVERFLOW_ELLIPSIS\b="ellipsis"
+\bqx\.constant\.Style\.OVERFLOW_MOZ_NONE\b="-moz-scrollbars-none"
+\bqx\.constant\.Style\.OVERFLOW_MOZ_HORIZONTAL\b="-moz-scrollbars-horizontal"
+\bqx\.constant\.Style\.OVERFLOW_MOZ_VERTICAL\b="-moz-scrollbars-vertical"
+\bqx\.constant\.Style\.FOCUS_OUTLINE\b="1px dotted invert"
+
+
+
+\bqx\.constant\.Tags\.H1\b="h1"
+\bqx\.constant\.Tags\.H2\b="h2"
+\bqx\.constant\.Tags\.H3\b="h3"
+\bqx\.constant\.Tags\.H4\b="h4"
+\bqx\.constant\.Tags\.H5\b="h5"
+\bqx\.constant\.Tags\.H6\b="h6"
+\bqx\.constant\.Tags\.P\b="p"
+\bqx\.constant\.Tags\.DIV\b="div"
+\bqx\.constant\.Tags\.SPAN\b="span"
+\bqx\.constant\.Tags\.BODY\b="body"
+\bqx\.constant\.Tags\.EM\b="em"
+\bqx\.constant\.Tags\.I\b="i"
+\bqx\.constant\.Tags\.STRONG\b="strong"
+\bqx\.constant\.Tags\.B\b="b"
+\bqx\.constant\.Tags\.UL\b="ul"
+\bqx\.constant\.Tags\.OL\b="ol"
+\bqx\.constant\.Tags\.LI\b="li"
+\bqx\.constant\.Tags\.TABLE\b="table"
+\bqx\.constant\.Tags\.TD\b="td"
+\bqx\.constant\.Tags\.TR\b="tr"
+\bqx\.constant\.Tags\.THEAD\b="thead"
+\bqx\.constant\.Tags\.TBODY\b="tbody"
+\bqx\.constant\.Tags\.TFOOT\b="tfoot"
+
+
+
+\bqx\.constant\.Type\.UNDEFINED\b="undefined"
+\bqx\.constant\.Type\.NUMBER\b="number"
+\bqx\.constant\.Type\.STRING\b="string"
+\bqx\.constant\.Type\.BOOLEAN\b="boolean"
+\bqx\.constant\.Type\.FUNCTION\b="function"
+\bqx\.constant\.Type\.OBJECT\b="object"
+
+
+
+\bqx\.constant\.Node\.ELEMENT=qx.dom.DomNode.ELEMENT
+\bqx\.constant\.Node\.ATTRIBUTE=qx.dom.DomNode.ATTRIBUTE
+\bqx\.constant\.Node\.TEXT=qx.dom.DomNode.TEXT
+\bqx\.constant\.Node\.CDATA_SECTION=qx.dom.DomNode.CDATA_SECTION
+\bqx\.constant\.Node\.ENTITY_REFERENCE=qx.dom.DomNode.ENTITY_REFERENCE
+\bqx\.constant\.Node\.ENTITY=qx.dom.DomNode.ENTITY
+\bqx\.constant\.Node\.PROCESSING_INSTRUCTION=qx.dom.DomNode.PROCESSING_INSTRUCTION
+\bqx\.constant\.Node\.COMMENT=qx.dom.DomNode.COMMENT
+\bqx\.constant\.Node\.DOCUMENT=qx.dom.DomNode.DOCUMENT
+\bqx\.constant\.Node\.DOCUMENT_TYPE=qx.dom.DomNode.DOCUMENT_TYPE
+\bqx\.constant\.Node\.DOCUMENT_FRAGMENT=qx.dom.DomNode.DOCUMENT_FRAGMENT
+\bqx\.constant\.Node\.NOTATION=qx.dom.DomNode.NOTATION
+
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/02-oo.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/02-oo.dat new file mode 100644 index 0000000000..5b5b92efa2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/02-oo.dat @@ -0,0 +1,54 @@ +\bqx\.OO\.PROPERTY_WIDTH\b="width"
+\bqx\.OO\.PROPERTY_HEIGHT\b="height"
+\bqx\.OO\.PROPERTY_MINWIDTH\b="minWidth"
+\bqx\.OO\.PROPERTY_MINHEIGHT\b="minHeight"
+\bqx\.OO\.PROPERTY_MAXWIDTH\b="maxWidth"
+\bqx\.OO\.PROPERTY_MAXHEIGHT\b="maxHeight"
+\bqx\.OO\.PROPERTY_LEFT\b="left"
+\bqx\.OO\.PROPERTY_RIGHT\b="right"
+\bqx\.OO\.PROPERTY_TOP\b="top"
+\bqx\.OO\.PROPERTY_BOTTOM\b="bottom"
+\bqx\.OO\.PROPERTY_VISIBILITY\b="visibility"
+\bqx\.OO\.PROPERTY_DISPLAY\b="display"
+\bqx\.OO\.PROPERTY_PARENT\b="parent"
+\bqx\.OO\.PROPERTY_ZINDEX\b="zIndex"
+
+\bqx\.OO\.C_SET\b="set"
+\bqx\.OO\.C_GET\b="get"
+\bqx\.OO\.C_APPLY\b="apply"
+\bqx\.OO\.C_RESET\b="reset"
+\bqx\.OO\.C_FORCE\b="force"
+\bqx\.OO\.C_TOGGLE\b="toggle"
+\bqx\.OO\.C_CHANGE\b="change"
+\bqx\.OO\.C_STORE\b="store"
+\bqx\.OO\.C_RETRIEVE\b="retrieve"
+\bqx\.OO\.C_PRIVATECHANGE\b="_change"
+\bqx\.OO\.C_INVALIDATE\b="_invalidate"
+\bqx\.OO\.C_INVALIDATED\b="_invalidated"
+\bqx\.OO\.C_RECOMPUTE\b="_recompute"
+\bqx\.OO\.C_CACHED\b="_cached"
+\bqx\.OO\.C_COMPUTE\b="_compute"
+\bqx\.OO\.C_COMPUTED\b="_computed"
+\bqx\.OO\.C_UNITDETECTION\b="_unitDetection"
+
+\bqx\.OO\.C_GLOBALPROPERTYREF\b="PROPERTY_"
+
+\bqx\.OO\.C_UNIT_VALUE\b="Value"
+\bqx\.OO\.C_UNIT_PARSED\b="Parsed"
+\bqx\.OO\.C_UNIT_TYPE\b="Type"
+\bqx\.OO\.C_UNIT_TYPE_NULL\b="TypeNull"
+\bqx\.OO\.C_UNIT_TYPE_PIXEL\b="TypePixel"
+\bqx\.OO\.C_UNIT_TYPE_PERCENT\b="TypePercent"
+\bqx\.OO\.C_UNIT_TYPE_AUTO\b="TypeAuto"
+\bqx\.OO\.C_UNIT_TYPE_FLEX\b="TypeFlex"
+
+\bqx\.OO\.C_GETDEFAULT\b="getDefault"
+\bqx\.OO\.C_SETDEFAULT\b="setDefault"
+\bqx\.OO\.C_RETRIEVEDEFAULT\b="retrieveDefault"
+\bqx\.OO\.C_STOREDEFAULT\b="storeDefault"
+
+\bqx\.OO\.C_VALUE\b="_value"
+\bqx\.OO\.C_NULL\b="_null"
+\bqx\.OO\.C_EVAL\b="_eval"
+\bqx\.OO\.C_CHECK\b="_check"
+\bqx\.OO\.C_MODIFY\b="_modify"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/03-widget.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/03-widget.dat new file mode 100644 index 0000000000..763f17b557 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/03-widget.dat @@ -0,0 +1,68 @@ +\bqx\.ui\.core\.Widget\.JOB_INITIAL\b="initial"
+\bqx\.ui\.core\.Widget\.JOB_VISIBLE\b="visible"
+\bqx\.ui\.core\.Widget\.JOB_LOCATION\b="location"
+\bqx\.ui\.core\.Widget\.JOB_LOCATIONX\b="locationX"
+\bqx\.ui\.core\.Widget\.JOB_LOCATIONY\b="locationY"
+\bqx\.ui\.core\.Widget\.JOB_ADDCHILD\b="addChild"
+\bqx\.ui\.core\.Widget\.JOB_REMOVECHILD\b="removeChild"
+\bqx\.ui\.core\.Widget\.JOB_FRAMEWIDTH\b="frameWidth"
+\bqx\.ui\.core\.Widget\.JOB_FRAMEHEIGHT\b="frameHeight"
+\bqx\.ui\.core\.Widget\.JOB_PREFERREDINNERWIDTH\b="preferredInnerWidth"
+\bqx\.ui\.core\.Widget\.JOB_PREFERREDINNERHEIGHT\b="preferredInnerHeight"
+\bqx\.ui\.core\.Widget\.PROPERTY_CLASSNAME\b="className"
+\bqx\.ui\.core\.Widget\.PROPERTY_BORDERX\b="borderX"
+\bqx\.ui\.core\.Widget\.PROPERTY_BORDERWIDTHX\b="borderWidthX"
+\bqx\.ui\.core\.Widget\.PROPERTY_BORDERY\b="borderY"
+\bqx\.ui\.core\.Widget\.PROPERTY_BORDERWIDTHY\b="borderWidthY"
+\bqx\.ui\.core\.Widget\.PROPERTY_PARENT_PADDINGLEFT\b="parentPaddingLeft"
+\bqx\.ui\.core\.Widget\.PROPERTY_PARENT_PADDINGRIGHT\b="parentPaddingRight"
+\bqx\.ui\.core\.Widget\.PROPERTY_PARENT_PADDINGTOP\b="parentPaddingTop"
+\bqx\.ui\.core\.Widget\.PROPERTY_PARENT_PADDINGBOTTOM\b="parentPaddingBottom"
+\bqx\.ui\.core\.Widget\.STATE_OVER\b="over"
+\bqx\.ui\.core\.Widget\.STATE_FOCUSED\b="focused"
+\bqx\.ui\.core\.Widget\.STATE_DISABLED\b="disabled"
+\bqx\.ui\.core\.Widget\.FOCUS_OUTLINE\b="1px dotted invert"
+\bqx\.ui\.core\.Widget\.FOCUS_NONE\b="0px none"
+\bqx\.ui\.core\.Widget\.TAB_PROPERTY_UNSELECTABLE\b="unselectable"
+\bqx\.ui\.core\.Widget\.TAB_PROPERTY_TABINDEX\b="tabIndex"
+\bqx\.ui\.core\.Widget\.TAB_PROPERTY_USERFOCUS\b="userFocus"
+\bqx\.ui\.core\.Widget\.TAB_PROPERTY_MOZUSERFOCUS\b="MozUserFocus"
+\bqx\.ui\.core\.Widget\.TAB_VALUE_IGNORE\b="ignore"
+\bqx\.ui\.core\.Widget\.TAB_VALUE_NORMAL\b="normal"
+\bqx\.ui\.core\.Widget\.TAB_VALUE_ON\b="on"
+\bqx\.ui\.core\.Widget\.SEL_VALUE_ON\b="on"
+\bqx\.ui\.core\.Widget\.SEL_PROPERTY_UNSELECTABLE\b="unselectable"
+\bqx\.ui\.core\.Widget\.SEL_PROPERTY_USERSELECT\b="userSelect"
+\bqx\.ui\.core\.Widget\.SEL_PROPERTY_MOZUSERSELECT\b="MozUserSelect"
+\bqx\.ui\.core\.Widget\.SEL_PROPERTY_KHTMLUSERSELECT\b="KhtmlUserSelect"
+\bqx\.ui\.core\.Widget\.OPACITY_FILTER_START\b="Alpha(Opacity\="
+\bqx\.ui\.core\.Widget\.OPACITY_FILTER_STOP\b=")"
+\bqx\.ui\.core\.Widget\.OPACITY_FILTER_REGEXP = /Alpha\(Opacity\=([0-9]{1,3})\)/
+\bqx\.ui\.core\.Widget\.OPACITY_PROPERTY_CSS3\b="opacity"
+\bqx\.ui\.core\.Widget\.OPACTIY_PROPERTY_MOZ\b="MozOpacity"
+\bqx\.ui\.core\.Widget\.OPACITY_PROPERTY_MOZ\b="MozOpacity"
+\bqx\.ui\.core\.Widget\.OPACITY_PROPERTY_KHTML\b="KhtmlOpacity"
+\bqx\.ui\.core\.Widget\.CURSOR_PROPERTY\b="cursor"
+\bqx\.ui\.core\.Widget\.CURSOR_VALUE_POINTER\b="pointer"
+\bqx\.ui\.core\.Widget\.CURSOR_VALUE_HAND\b="hand"
+\bqx\.ui\.core\.Widget\.BACKGROUNDIMG_PROPERTY\b="backgroundImage"
+\bqx\.ui\.core\.Widget\.BACKGROUNDIMG_VALUE_START\b="url("
+\bqx\.ui\.core\.Widget\.BACKGROUNDIMG_VALUE_STOP\b=")"
+\bqx\.ui\.core\.Widget\.BACKGROUNDIMG_REGEXP1 = /^url\(/i
+\bqx\.ui\.core\.Widget\.BACKGROUNDIMG_REGEXP2 = /\)$/
+\bqx\.ui\.core\.Widget\.CLIP_PROPERTY\b="clip"
+\bqx\.ui\.core\.Widget\.CLIP_VALUE_START\b="rect("
+\bqx\.ui\.core\.Widget\.CLIP_VALUE_STOP\b=")"
+\bqx\.ui\.core\.Widget\.SCROLL_PROPERTY\b="overflow"
+\bqx\.ui\.core\.Widget\.SCROLL_PROPERTYX\b="overflowX"
+\bqx\.ui\.core\.Widget\.SCROLL_PROPERTYY\b="overflowY"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_AUTO\b="auto"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_HIDDEN\b="hidden"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_SCROLL\b="scroll"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_SCROLLX\b="scrollX"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_SCROLLY\b="scrollY"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_MOZNONE\b="-moz-scrollbars-none"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_MOZSCROLLX\b="-moz-scrollbars-horizontal"
+\bqx\.ui\.core\.Widget\.SCROLL_VALUE_MOZSCROLLY\b="-moz-scrollbars-vertical"
+\bqx\.ui\.core\.Widget\.INLINE_EVENTTYPE\b="propertychange"
+\bqx\.ui\.core\.Widget\.INLINE_EVENTTYPE_PROPERTY\b="value"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/04-nativewindow.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/04-nativewindow.dat new file mode 100644 index 0000000000..6d3a136a57 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/04-nativewindow.dat @@ -0,0 +1,12 @@ +\bqx\.client\.NativeWindow\.PROPERTY_DEPENDENT\b="dependent"
+\bqx\.client\.NativeWindow\.PROPERTY_WIDTH\b="width"
+\bqx\.client\.NativeWindow\.PROPERTY_HEIGHT\b="height"
+\bqx\.client\.NativeWindow\.PROPERTY_LEFT\b="left"
+\bqx\.client\.NativeWindow\.PROPERTY_TOP\b="top"
+\bqx\.client\.NativeWindow\.PROPERTY_RESIZABLE\b="resizable"
+\bqx\.client\.NativeWindow\.PROPERTY_STATUS\b="status"
+\bqx\.client\.NativeWindow\.PROPERTY_LOCATION\b="location"
+\bqx\.client\.NativeWindow\.PROPERTY_MENUBAR\b="menubar"
+\bqx\.client\.NativeWindow\.PROPERTY_TOOLBAR\b="toolbar"
+\bqx\.client\.NativeWindow\.PROPERTY_SCROLLBARS\b="scrollbars"
+\bqx\.client\.NativeWindow\.PROPERTY_MODAL\b="modal"
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/05-font.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/05-font.dat new file mode 100644 index 0000000000..63cefbabaa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/05-font.dat @@ -0,0 +1,10 @@ +\bqx\.renderer\.font\.Font\.STYLE_BOLD\b="bold"
+\bqx\.renderer\.font\.Font\.STYLE_NORMAL\b="normal"
+\bqx\.renderer\.font\.Font\.STYLE_ITALIC\b="italic"
+\bqx\.renderer\.font\.Font\.STYLE_UNDERLINE\b="underline"
+\bqx\.renderer\.font\.Font\.STYLE_STRIKEOUT\b="strikeout"
+\bqx\.renderer\.font\.Font\.PROPERTY_FAMILY\b="fontFamily"
+\bqx\.renderer\.font\.Font\.PROPERTY_SIZE\b="fontSize"
+\bqx\.renderer\.font\.Font\.PROPERTY_WEIGHT\b="fontWeight"
+\bqx\.renderer\.font\.Font\.PROPERTY_STYLE\b="fontStyle"
+\bqx\.renderer\.font\.Font\.PROPERTY_DECORATION\b="textDecoration"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/06-border.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/06-border.dat new file mode 100644 index 0000000000..58ed0f27dd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/06-border.dat @@ -0,0 +1,17 @@ +\bqx\.renderer\.border\.Border\.STYLE_GROOVE\b="groove"
+\bqx\.renderer\.border\.Border\.STYLE_RIDGE\b="ridge"
+\bqx\.renderer\.border\.Border\.STYLE_INSET\b="inset"
+\bqx\.renderer\.border\.Border\.STYLE_OUTSET\b="outset"
+\bqx\.renderer\.border\.Border\.STYLE_SOLID\b="solid"
+\bqx\.renderer\.border\.Border\.STYLE_DOTTED\b="dotted"
+\bqx\.renderer\.border\.Border\.STYLE_DASHED\b="dashed"
+\bqx\.renderer\.border\.Border\.STYLE_DOUBLE\b="double"
+\bqx\.renderer\.border\.Border\.STYLE_NONE\b="none"
+\bqx\.renderer\.border\.Border\.POSITION_TOP\b="top"
+\bqx\.renderer\.border\.Border\.POSITION_RIGHT\b="right"
+\bqx\.renderer\.border\.Border\.POSITION_BOTTOM\b="bottom"
+\bqx\.renderer\.border\.Border\.POSITION_LEFT\b="left"
+\bqx\.renderer\.border\.Border\.BORDER_NONE\b="0px none"
+\bqx\.renderer\.border\.Border\.baseColor\b="threedlightshadow"
+\bqx\.renderer\.border\.Border\.stylePart\b="Style"
+\bqx\.renderer\.border\.Border\.colorPart\b="Color"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/07-color.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/07-color.dat new file mode 100644 index 0000000000..30003e9577 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/07-color.dat @@ -0,0 +1,2 @@ +\bqx\.renderer\.color\.Color\.RGBCSS_START\b="rgb("
+\bqx\.renderer\.color\.Color\.RGBCSS_STOP\b=")"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/08-image.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/08-image.dat new file mode 100644 index 0000000000..5bf6e48390 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/08-image.dat @@ -0,0 +1,7 @@ +qx\.ui\.basic\.Image\.ATTR_ALT\b="alt"
+qx\.ui\.basic\.Image\.ATTR_TITLE\b="title"
+qx\.ui\.basic\.Image\.BORDER_NONE\b="0 none"
+qx\.ui\.basic\.Image\.RESET_VALIGN\b="top"
+qx\.ui\.basic\.Image\.IMGLOADER_START\b="progid:DXImageTransform.Microsoft.AlphaImageLoader(src\='"
+qx\.ui\.basic\.Image\.IMGLOADER_STOP\b="',sizingMethod\='scale')"
+qx\.ui\.basic\.Image\.FILTER_GRAY\b="Gray() Alpha(Opacity\=30)"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/09-tree.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/09-tree.dat new file mode 100644 index 0000000000..6b8e84ba75 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/09-tree.dat @@ -0,0 +1,8 @@ +\bqx\.ui\.tree\.AbstractTreeElement\.INDENT_CODE_1\b="<img style\=\"position:absolute;top:0px;left:"
+\bqx\.ui\.tree\.AbstractTreeElement\.INDENT_CODE_2\b="px\" src\=\""
+\bqx\.ui\.tree\.AbstractTreeElement\.INDENT_CODE_3\b="\" />"
+\bqx\.ui\.tree\.AbstractTreeElement\.IMG_EXTENSION\b="gif"
+\bqx\.ui\.treefullcontrol\.AbstractTreeElement\.INDENT_CODE_1\b="<img style\=\"position:absolute;top:0px;left:"
+\bqx\.ui\.treefullcontrol\.AbstractTreeElement\.INDENT_CODE_2\b="px\" src\=\""
+\bqx\.ui\.treefullcontrol\.AbstractTreeElement\.INDENT_CODE_3\b="\" />"
+\bqx\.ui\.treefullcontrol\.AbstractTreeElement\.IMG_EXTENSION\b="gif"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/10-table.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/10-table.dat new file mode 100644 index 0000000000..ed63f48058 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/10-table.dat @@ -0,0 +1,25 @@ +\bqx\.ui\.table\.DefaultDataCellRenderer\.INTERNAL_STYLE_ALIGN_RIGHT=";text-align:right"
+\bqx\.ui\.table\.DefaultDataCellRenderer\.INTERNAL_STYLE_BOLD=";font-weight:bold"
+\bqx\.ui\.table\.DefaultDataCellRenderer\.INTERNAL_STYLE_ITALIC=";font-style:italic"
+
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_START\b='<div style\="position:absolute;font-family:\'Segoe UI\', Corbel, Calibri, Tahoma, \'Lucida Sans Unicode\', sans-serif;font-size:11px;left:0px;top:'
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_WIDTH\b='px;width:'
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_HEIGHT\b='px;height:'
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_BG_COLOR\b='px;background-color:'
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_COLOR\b=';color:'
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_START_END\b='">'
+\bqx\.ui\.table\.TablePane\.ARRAY_JOIN_ROW_DIV_END\b='</div>'
+
+\bqx\.ui\.table\.TablePane\.CONTENT_CELL_STYLE_LEFT\b='position:absolute;left:'
+\bqx\.ui\.table\.TablePane\.CONTENT_CELL_STYLE_WIDTH\b='px;top:0px;width:'
+\bqx\.ui\.table\.TablePane\.CONTENT_CELL_STYLE_HEIGHT\b='px; height:'
+
+\bqx\.ui\.table\.TablePane\.TABLE_START\b='<table cellspacing\="0" cellpadding\="0" style\="table-layout:fixed;font-family:\'Segoe UI\', Corbel, Calibri, Tahoma, \'Lucida Sans Unicode\', sans-serif;font-size:11px;width:'
+\bqx\.ui\.table\.TablePane\.TABLE_COLGROUP\b='px"><colgroup>'
+\bqx\.ui\.table\.TablePane\.TABLE_COL\b='<col width\="'
+\bqx\.ui\.table\.TablePane\.TABLE_COLEND\b='"/>'
+\bqx\.ui\.table\.TablePane\.TABLE_TBODY\b='</colgroup><tbody>'
+\bqx\.ui\.table\.TablePane\.TABLE_TR\b='<tr style\="height:'
+\bqx\.ui\.table\.TablePane\.TABLE_BGCOLOR\b='px;background-color:'
+\bqx\.ui\.table\.TablePane\.TABLE_TR_END\b='</tr>'
+\bqx\.ui\.table\.TablePane\.TABLE_TBODY_END\b='</tbody></table>'
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/11-embed.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/11-embed.dat new file mode 100644 index 0000000000..bc740fc9fd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/11-embed.dat @@ -0,0 +1,8 @@ +\bqx\.ui\.embed\.IconHtmlEmbed\.START_IMAGE\b="<img src\=\""
+\bqx\.ui\.embed\.IconHtmlEmbed\.START_STYLE\b="\" style\=\"vertical-align:middle;"
+\bqx\.ui\.embed\.IconHtmlEmbed\.STYLE_MARGIN\b="margin-right:"
+\bqx\.ui\.embed\.IconHtmlEmbed\.STYLE_WIDTH\b="width:"
+\bqx\.ui\.embed\.IconHtmlEmbed\.STYLE_HEIGHT\b="height:"
+\bqx\.ui\.embed\.IconHtmlEmbed\.PIXEL_UNIT\b="px;"
+\bqx\.ui\.embed\.IconHtmlEmbed\.FILTER_START\b="filter:"
+\bqx\.ui\.embed\.IconHtmlEmbed\.STOP_IMAGE\b="\"/>"
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/12-label.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/12-label.dat new file mode 100644 index 0000000000..32cb319a21 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/12-label.dat @@ -0,0 +1,21 @@ +\bqx\.ui\.basic\.Label\.COPY_STYLEPROPERTY\b="styleproperty"
+\bqx\.ui\.basic\.Label\.COPY_COMPUTEDELEMENT\b="computedelement"
+\bqx\.ui\.basic\.Label\.COPY_LOCALELEMENT\b="localelement"
+\bqx\.ui\.basic\.Label\.OVERFLOW_HIDDEN\b="hidden"
+\bqx\.ui\.basic\.Label\.OVERFLOW_ELLIPSIS\b="ellipsis"
+\bqx\.ui\.basic\.Label\.INNER_TEXT\b="innerText"
+\bqx\.ui\.basic\.Label\.INNER_HTML\b="innerHTML"
+\bqx\.ui\.basic\.Label\.MNEMONIC_OUT_START\b="(<span style\=\"text-decoration:underline\">"
+\bqx\.ui\.basic\.Label\.MNEMONIC_OUT_STOP\b="</span>)"
+\bqx\.ui\.basic\.Label\.MNEMONIC_IN_START\b="<span style\=\"text-decoration:underline\">"
+\bqx\.ui\.basic\.Label\.MNEMONIC_IN_STOP\b="</span>"
+\bqx\.ui\.basic\.Label\.MNEMONIC_TEST1\b="^(((<([^>]|"
+\bqx\.ui\.basic\.Label\.MNEMONIC_TEST2\b=")+>)|(&([^;]|"
+\bqx\.ui\.basic\.Label\.MNEMONIC_TEST3\b=")+;)|[^&"
+\bqx\.ui\.basic\.Label\.MNEMONIC_TEST4\b="])*)("
+\bqx\.ui\.basic\.Label\.MNEMONIC_TEST5\b=")"
+\bqx\.ui\.basic\.Label\.MNEMONIC_REGMODE\b="i"
+\bqx\.ui\.basic\.Label\.BR\b="<br/>"
+\bqx\.ui\.basic\.Label\.CODE1\b="&#x"
+\bqx\.ui\.basic\.Label\.CODE2\b="&#"
+\bqx\.ui\.basic\.Label\.TOSTRHELPER\b="0x"
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/13-window.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/13-window.dat new file mode 100644 index 0000000000..99c71f2d20 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/13-window.dat @@ -0,0 +1,8 @@ +\bqx\.ui\.window\.Window\.MODE_OPAQUE\b="opaque"
+\bqx\.ui\.window\.Window\.MODE_LAZYOPAQUE\b="lazyopaque"
+\bqx\.ui\.window\.Window\.MODE_FRAME\b="frame"
+\bqx\.ui\.window\.Window\.MODE_TRANSLUCENT\b="translucent"
+\bqx\.ui\.window\.Window\.MODE_MINIMIZED\b="minimized"
+\bqx\.ui\.window\.Window\.MODE_MAXIMIZED\b="maximized"
+\bqx\.ui\.window\.Window\.STATE_ACTIVE\b="active"
+\bqx\.ui\.window\.Window\.STATE_MAXIMIZED\b="maximized"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/14-colorselector.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/14-colorselector.dat new file mode 100644 index 0000000000..1741cebc20 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/14-colorselector.dat @@ -0,0 +1,11 @@ +\bqx\.ui\.component\.ColorSelector\.CONTEXT_RED_MODIFIER\b="redModifier"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_GREEN_MODIFIER\b="greenModifier"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_BLUE_MODIFIER\b="blueModifier"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_HUE_MODIFIER\b="hueModifier"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_SATURATION_MODIFIER\b="saturationModifier"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_BRIGHTNESS_MODIFIER\b="brightnessModifier"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_HSB_SPINNER\b="hsbSpinner"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_RGB_SPINNER\b="rgbSpinner"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_HEX_FIELD\b="hexField"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_HUE_SATURATION_FIELD\b="hueSaturationField"
+\bqx\.ui\.component\.ColorSelector\.CONTEXT_BRIGHTNESS_FIELD\b="brightnessField"
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/15-datechooser.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/15-datechooser.dat new file mode 100644 index 0000000000..cd78f336d5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/15-datechooser.dat @@ -0,0 +1,5 @@ +\bqx\.ui\.component\.DateChooser\.STATE_HEADER\b="header"
+\bqx\.ui\.component\.DateChooser\.STATE_WEEKEND\b="weekend"
+\bqx\.ui\.component\.DateChooser\.STATE_OTHER_MONTH\b="otherMonth"
+\bqx\.ui\.component\.DateChooser\.STATE_SELECTED\b="selected"
+\bqx\.ui\.component\.DateChooser\.STATE_TODAY\b="today"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/16-button.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/16-button.dat new file mode 100644 index 0000000000..953137b8dc --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/16-button.dat @@ -0,0 +1,3 @@ +\bqx\.ui\.form\.Button\.STATE_CHECKED\b="checked"
+\bqx\.ui\.form\.Button\.STATE_PRESSED\b="pressed"
+\bqx\.ui\.form\.Button\.STATE_ABANDONED\b="abandoned"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/17-selection.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/17-selection.dat new file mode 100644 index 0000000000..5dcc3754d7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/17-selection.dat @@ -0,0 +1,3 @@ +\bqx\.manager\.selection\.SelectionManager\.STATE_SELECTED\b="selected"
+\bqx\.manager\.selection\.SelectionManager\.STATE_ANCHOR\b="anchor"
+\bqx\.manager\.selection\.SelectionManager\.STATE_LEAD\b="lead"
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/40-classnames.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/40-classnames.dat new file mode 100644 index 0000000000..5b43fdb3ab --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.3/patches/40-classnames.dat @@ -0,0 +1,74 @@ +\bqx\.dom\.DomDimension\b=qx.dom.Dimension
+\bqx\.dom\.DomElement\b=qx.dom.Element
+\bqx\.dom\.DomElementFromPoint\b=qx.dom.ElementFromPoint
+\bqx\.dom\.DomEventRegistration\b=qx.dom.EventRegistration
+\bqx\.dom\.DomIframe\b=qx.dom.Iframe
+\bqx\.dom\.DomLocation\b=qx.dom.Location
+\bqx\.dom\.DomNode\b=qx.dom.Node
+\bqx\.dom\.DomOffset\b=qx.dom.Offset
+\bqx\.dom\.DomScroll\b=qx.dom.Scroll
+\bqx\.dom\.DomScrollIntoView\b=qx.dom.ScrollIntoView
+\bqx\.dom\.DomStyle\b=qx.dom.Style
+\bqx\.dom\.DomStyleSheet\b=qx.dom.StyleSheet
+\bqx\.dom\.DomWindow\b=qx.dom.Window
+
+\bqx\.io\.image\.ImagePreloaderSystem\b=qx.io.image.PreloaderSystem
+\bqx\.io\.image\.ImagePreloader\b=qx.io.image.Preloader
+
+\bqx\.io\.remote\.RemoteExchange\b=qx.io.remote.Exchange
+\bqx\.io\.remote\.RemoteRequest\b=qx.io.remote.Request
+\bqx\.io\.remote\.RemoteRequestQueue\b=qx.io.remote.RequestQueue
+\bqx\.io\.remote\.RemoteResponse\b=qx.io.remote.Response
+
+\bqx\.lang\.Xml\b=qx.xml.Core
+
+\bqx\.theme\.appearance\.DefaultAppearanceTheme\b=qx.theme.appearance.Classic
+\bqx\.theme\.color\.SystemColorTheme\b=qx.theme.color.System
+\bqx\.theme\.color\.WindowsClassicColorTheme\b=qx.theme.color.WindowsClassic
+\bqx\.theme\.color\.WindowsLunaBlueColorTheme\b=qx.theme.color.WindowsLunaBlue
+\bqx\.theme\.color\.WindowsLunaGreenColorTheme\b=qx.theme.color.WindowsLunaGreen
+\bqx\.theme\.color\.WindowsLunaSilverColorTheme\b=qx.theme.color.WindowsLunaSilver
+\bqx\.theme\.color\.WindowsRoyaleColorTheme\b=qx.theme.color.WindowsRoyale
+\bqx\.theme\.icon\.NuvolaIconTheme\b=qx.theme.icon.Nuvola
+\bqx\.theme\.icon\.CrystalSvgIconTheme\b=qx.theme.icon.CrystalSvg
+\bqx\.theme\.widget\.WindowsWidgetTheme\b=qx.theme.widget.Windows
+
+\bqx\.ui\.listview\.ListViewHeaderSeparator\b=qx.ui.listview.HeaderSeparator
+\bqx\.ui\.listview\.ListViewHeaderCell\b=qx.ui.listview.HeaderCell
+\bqx\.ui\.listview\.ListViewHeader\b=qx.ui.listview.Header
+\bqx\.ui\.listview\.ListViewContentCellText\b=qx.ui.listview.ContentCellText
+\bqx\.ui\.listview\.ListViewContentCellLink\b=qx.ui.listview.ContentCellLink
+\bqx\.ui\.listview\.ListViewContentCellImage\b=qx.ui.listview.ContentCellImage
+\bqx\.ui\.listview\.ListViewContentCellIconHtml\b=qx.ui.listview.ContentCellIconHtml
+\bqx\.ui\.listview\.ListViewContentCellHtml\b=qx.ui.listview.ContentCellHtml
+
+\bqx\.ui\.menu\.MenuRadioButton\b=qx.ui.menu.RadioButton
+\bqx\.ui\.menu\.MenuLayout\b=qx.ui.menu.Layout
+\bqx\.ui\.menu\.MenuCheckBox\b=qx.ui.menu.CheckBox
+\bqx\.ui\.menu\.MenuButton\b=qx.ui.menu.Button
+\bqx\.ui\.menu\.MenuSeparator\b=qx.ui.menu.Separator
+\bqx\.ui\.menu\.MenuBar\b=qx.ui.menubar.MenuBar
+\bqx\.ui\.menu\.MenuBarButton\b=qx.ui.menubar.Button
+
+\bqx\.ui\.pageview\.buttonview\.ButtonViewPage\b=qx.ui.pageview.buttonview.Page
+\bqx\.ui\.pageview\.buttonview\.ButtonViewPane\b=qx.ui.pageview.buttonview.Pane
+\bqx\.ui\.pageview\.buttonview\.ButtonViewBar\b=qx.ui.pageview.buttonview.Bar
+\bqx\.ui\.pageview\.buttonview\.ButtonViewButton\b=qx.ui.pageview.buttonview.Button
+
+\bqx\.ui\.pageview\.tabview\.TabViewBar\b=qx.ui.pageview.tabview.Bar
+\bqx\.ui\.pageview\.tabview\.TabViewButton\b=qx.ui.pageview.tabview.Button
+\bqx\.ui\.pageview\.tabview\.TabViewPage\b=qx.ui.pageview.tabview.Page
+\bqx\.ui\.pageview\.tabview\.TabViewPane\b=qx.ui.pageview.tabview.Pane
+
+\bqx\.ui\.toolbar\.ToolBarButton\b=qx.ui.toolbar.Button
+\bqx\.ui\.toolbar\.ToolBarCheckBox\b=qx.ui.toolbar.CheckBox
+\bqx\.ui\.toolbar\.ToolBarMenuButton\b=qx.ui.toolbar.MenuButton
+\bqx\.ui\.toolbar\.ToolBarPart\b=qx.ui.toolbar.Part
+\bqx\.ui\.toolbar\.ToolBarPartHandle\b=qx.ui.toolbar.PartHandle
+\bqx\.ui\.toolbar\.ToolBarRadioButton\b=qx.ui.toolbar.RadioButton
+\bqx\.ui\.toolbar\.ToolBarSeparator\b=qx.ui.toolbar.Separator
+
+\bqx\.ui\.pageview\.AbstractPageViewBar\b=qx.ui.pageview.AbstractBar
+\bqx\.ui\.pageview\.AbstractPageViewButton\b=qx.ui.pageview.AbstractButton
+\bqx\.ui\.pageview\.AbstractPageViewPage\b=qx.ui.pageview.AbstractPage
+\bqx\.ui\.pageview\.AbstractPageViewPane\b=qx.ui.pageview.AbstractPane
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.4/info/01-locale.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.4/info/01-locale.dat new file mode 100644 index 0000000000..47259359e1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.4/info/01-locale.dat @@ -0,0 +1,23 @@ +\bqx\.ui\.component\.DateChooser\.getStartOfWeek\b=Property startOfWeek has been removed. Please use the new localization features instead. +\bqx\.ui\.component\.DateChooser\.setStartOfWeek\b=Property startOfWeek has been removed. Please use the new localization features instead. + +\bqx\.util\.format\.NumberFormat\.GROUPING_SEPARATOR\b=The static field GROUPING_SEPARATOR has been removed. Use qx.locale.Number.getGroupSeperator() instead. + +\bqx\.util\.format\.NumberFormat\.SHORT_DATE_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateFormat(”short”) instead. +\bqx\.util\.format\.NumberFormat\.SHORT_DATE_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateFormat(”short”) instead. +\bqx\.util\.format\.NumberFormat\.MEDIUM_DATE_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateFormat(”medium”) instead. +\bqx\.util\.format\.NumberFormat\.LONG_DATE_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateFormat(”long”) instead. +\bqx\.util\.format\.NumberFormat\.FULL_DATE_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateFormat(”full”) instead. +\bqx\.util\.format\.NumberFormat\.SHORT_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateTimeFormat(”HHmm”, “HH:mm”) instead. +\bqx\.util\.format\.NumberFormat\.MEDIUM_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateTimeFormat(”HHmm”, “HH:mm”) instead. +\bqx\.util\.format\.NumberFormat\.LONG_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateTimeFormat(”HHmmss”, “HH:mm:ss”) instead. +\bqx\.util\.format\.NumberFormat\.FULL_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateTimeFormat(”HHmmsszz”, “HH:mm:ss zz”) instead. +\bqx\.util\.format\.NumberFormat\.SHORT_DATE_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized qx.locale.Date.getDateFormat(”short”) + " " + qx.locale.Date.getDateTimeFormat(”HHmm”, “HH:mm”) instead. +\bqx\.util\.format\.NumberFormat\.MEDIUM_DATE_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized qx.locale.Date.getDateFormat(”medium”) + " " + qx.locale.Date.getDateTimeFormat(”HHmm”, “HH:mm”) instead. +\bqx\.util\.format\.NumberFormat\.LONG_DATE_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized qx.locale.Date.getDateFormat(”long”) + " " + qx.locale.Date.getDateTimeFormat(”HHmmss”, “HH:mm:ss”) instead. +\bqx\.util\.format\.NumberFormat\.FULL_DATE_TIME_FORMAT\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDateFormat(”full”) + " " + qx.locale.Date.getDateTimeFormat(”HHmmsszz”, “HH:mm:ss zz”) instead. +\bqx\.util\.format\.NumberFormat\.FULL_MONTH_NAMES\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getMonthNames(”wide”) instead. +\bqx\.util\.format\.NumberFormat\.SHORT_MONTH_NAMES\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getMonthNames(”abbreviated”) instead. +\bqx\.util\.format\.NumberFormat\.SHORT_DAY_OF_WEEK_NAMES\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDayNames(”narrow”) instead. +\bqx\.util\.format\.NumberFormat\.MEDIUM_DAY_OF_WEEK_NAMES\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDayNames(”abbreviated”) instead. +\bqx\.util\.format\.NumberFormat\.FULL_DAY_OF_WEEK_NAMES\b=The static fields of NumberFormat have been removed. Please use the localized method qx.locale.Date.getDayNames(”wide”) instead. diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.4/info/02-deprecated.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.4/info/02-deprecated.dat new file mode 100644 index 0000000000..f67b0d6f58 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.4/info/02-deprecated.dat @@ -0,0 +1,11 @@ +\b\.getKeyCode\b=The use of the keyCode property of qx.client.Command and qx.event.type.KeyEvent is deprecated. Use keyIdentifier instead! +\b\.setKeyCode\b=The use of the keyCode property of qx.client.Command and qx.event.type.KeyEvent is deprecated. Use keyIdentifier instead! + +\b\.getCtrlKey\b=The use of the getCtrlKey method of qx.event.type.DomEvent is deprecated. Use isCtrlPressed instead! +\b\.getAltKey\b=The use of the getAltKey method of qx.event.type.DomEvent is deprecated. Use isAltPressed instead! +\b\.getShiftKey\b=The use of the getShiftKey method of qx.event.type.DomEvent is deprecated. Use isShiftPressed instead! + +\bqx\.event\.type\.KeyEvent\.keys\b=Deprecated. Convert Your code to use keyIdentifier if possible. +\b\.getMaxTotalRequests\b=The use of the maxTotalRequests property of qx.io.remote.RequestQueue is deprecated. It will be removed in release 0.7! + +\bqx\.util\.Textile"\b=Deprecated module. Will be removed with qooxdoo 0.7.
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/01-mime.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/01-mime.dat new file mode 100644 index 0000000000..681428b20d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/01-mime.dat @@ -0,0 +1 @@ +(?<!type = )(?<!type=)[\"\']text\/javascript[\"\']=Better use qx.util.Mime.JAVASCRIPT (Please ignore for <script> tags)
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/02-iconcleanup.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/02-iconcleanup.dat new file mode 100644 index 0000000000..6c52cd31b1 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/02-iconcleanup.dat @@ -0,0 +1,171 @@ +128/3d.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/antivirus.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/babelfish.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/back.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/block-device.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/down.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/favourite.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/file-print.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/forward.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/home.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/mac.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/penguin.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/reload.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/tux.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/up.png[\"\']=This icon was deprecated because of theme compatibility considerations +128/vectorgraphics.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/3d.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/antivirus.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/appearance.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/appointment.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/babelfish.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/block-device.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/cam.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/comment.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/contents.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/context-help.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/database.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/delete-table-cell.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/delete-table-col.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/delete-table.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/delete-table-row.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/documentinfo.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/emoticon.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/favorites.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/favourite.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/file-find.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/fileshare.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/flag.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/font-size-down.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/font-size-up.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/format-decrease-indent.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/format-increase-indent.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/funct.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/goto.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/group-event.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/hardware.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/idea.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/inbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/insert-table-col.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/insert-table.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/insert-table-row.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/instant-available.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/instant-away.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/launch.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/mac.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/mousecursor.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/outbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/penguin.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/remove-comment.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/search.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/server.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/sound.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/text-bottom.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/text-color.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/text-strike.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/text-sub.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/text-super.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/text-top.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/trash.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/tux.png[\"\']=This icon was deprecated because of theme compatibility considerations +16/vectorgraphics.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/antivirus.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/appearance.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/appointment.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/babelfish.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/block-device.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/contents.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/delete-table-col.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/delete-table-row.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/effect.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/favourite.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/file-find.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/flowchart.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/font-size-down.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/font-size-up.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/format-decrease-indent.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/format-increase-indent.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/funct.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/idea.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/inbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/insert-table-col.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/insert-table-row.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/instant-available.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/instant-away.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/launch.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/look-and-feel.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/mac.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/movieplayer.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/outbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/penguin.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/search.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/server.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/services.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/text-strike.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/tux.png[\"\']=This icon was deprecated because of theme compatibility considerations +22/vectorgraphics.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/3d.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/antivirus.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/appearance.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/appointment.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/babelfish.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/block-device.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/cam.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/delete-table-col.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/delete-table-row.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/favorites.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/favourite.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/file-find.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/fileshare.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/funct.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/goto.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/hardware.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/inbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/insert-table-col.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/insert-table-row.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/instant-available.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/instant-away.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/launch.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/mac.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/outbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/penguin.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/search.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/server.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/sound.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/tux.png[\"\']=This icon was deprecated because of theme compatibility considerations +32/vectorgraphics.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/3d.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/antivirus.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/babelfish.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/block-device.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/favorites.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/favourite.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/fileshare.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/hardware.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/inbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/instant-available.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/instant-away.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/mac.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/outbox.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/penguin.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/server.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/tux.png[\"\']=This icon was deprecated because of theme compatibility considerations +48/vectorgraphics.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/3d.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/antivirus.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/babelfish.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/back.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/block-device.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/down.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/favourite.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/file-print.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/fileshare.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/forward.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/hardware.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/home.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/mac.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/penguin.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/reload.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/tux.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/up.png[\"\']=This icon was deprecated because of theme compatibility considerations +64/vectorgraphics.png[\"\']=This icon was deprecated because of theme compatibility considerations diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/03-icons.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/03-icons.dat new file mode 100644 index 0000000000..3e427c0147 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/info/03-icons.dat @@ -0,0 +1,73 @@ +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]bell\.png[\"\'\)]=The image 'bell.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]bitmapgraphics\.png[\"\'\)]=The image 'bitmapgraphics.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]bookmark-toolbar\.png[\"\'\)]=The image 'bookmark-toolbar.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]bookmark\.png[\"\'\)]=The image 'bookmark.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]bug\.png[\"\'\)]=The image 'bug.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]cache\.png[\"\'\)]=The image 'cache.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]char-device\.png[\"\'\)]=The image 'char-device.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]chart\.png[\"\'\)]=The image 'chart.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]color-fill\.png[\"\'\)]=The image 'color-fill.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]color-line\.png[\"\'\)]=The image 'color-line.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]connect-creating\.png[\"\'\)]=The image 'connect-creating.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]connect-established\.png[\"\'\)]=The image 'connect-established.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]cookie\.png[\"\'\)]=The image 'cookie.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]core\.png[\"\'\)]=The image 'core.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]energy\.png[\"\'\)]=The image 'energy.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]flowchart\.png[\"\'\)]=The image 'flowchart.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]folder-important\.png[\"\'\)]=The image 'folder-important.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mime-manual\.png[\"\'\)]=The image 'mime-manual.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mime-rpm\.png[\"\'\)]=The image 'mime-rpm.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]no\.png[\"\'\)]=The image 'no.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]notify\.png[\"\'\)]=The image 'notify.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]paint\.png[\"\'\)]=The image 'paint.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]partitions\.png[\"\'\)]=The image 'partitions.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]pda\.png[\"\'\)]=The image 'pda.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]pipe\.png[\"\'\)]=The image 'pipe.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]presentation\.png[\"\'\)]=The image 'presentation.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]queue\.png[\"\'\)]=The image 'queue.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]signature\.png[\"\'\)]=The image 'signature.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]style\.png[\"\'\)]=The image 'style.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]tab-duplicate\.png[\"\'\)]=The image 'tab-duplicate.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]tab-new-raised\.png[\"\'\)]=The image 'tab-new-raised.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]tab-new\.png[\"\'\)]=The image 'tab-new.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]tab-remove\.png[\"\'\)]=The image 'tab-remove.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]view-bottom\.png[\"\'\)]=The image 'view-bottom.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]view-choose\.png[\"\'\)]=The image 'view-choose.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]view-left-right\.png[\"\'\)]=The image 'view-left-right.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]view-right\.png[\"\'\)]=The image 'view-right.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]view-sidetree\.png[\"\'\)]=The image 'view-sidetree.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]view-top-bottom\.png[\"\'\)]=The image 'view-top-bottom.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]wizard\.png[\"\'\)]=The image 'wizard.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]wordprocessor\.png[\"\'\)]=The image 'wordprocessor.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]control-center\.png[\"\'\)]=The image 'control-center.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]locale\.png[\"\'\)]=The image 'locale.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]folder-locked\.png[\"\'\)]=The image 'folder-locked.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]misc\.png[\"\'\)]=The image 'misc.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-forward\.png[\"\'\)]=The image 'mail-forward.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]toys\.png[\"\'\)]=The image 'toys.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mime-document\.png[\"\'\)]=The image 'mime-document.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-send\.png[\"\'\)]=The image 'mail-send.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-get\.png[\"\'\)]=The image 'mail-get.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]icons\.png[\"\'\)]=The image 'icons.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-delete\.png[\"\'\)]=The image 'mail-delete.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]bookmark-folder\.png[\"\'\)]=The image 'bookmark-folder.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]attach\.png[\"\'\)]=The image 'attach.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]memory\.png[\"\'\)]=The image 'memory.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-find\.png[\"\'\)]=The image 'mail-find.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]keyboard-layout\.png[\"\'\)]=The image 'keyboard-layout.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]exec\.png[\"\'\)]=The image 'exec.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]iconthemes\.png[\"\'\)]=The image 'iconthemes.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]important\.png[\"\'\)]=The image 'important.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]connect-no\.png[\"\'\)]=The image 'connect-no.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-reply-all\.png[\"\'\)]=The image 'mail-reply-all.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-reply\.png[\"\'\)]=The image 'mail-reply.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]info\.png[\"\'\)]=The image 'info.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mime-card\.png[\"\'\)]=The image 'mime-card.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]rotate\.png[\"\'\)]=The image 'rotate.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]tablet\.png[\"\'\)]=The image 'tablet.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]opera\.png[\"\'\)]=The image 'opera.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]email\.png[\"\'\)]=The image 'email.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]mail-new\.png[\"\'\)]=The image 'mail-new.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]joystick\.png[\"\'\)]=The image 'joystick.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]modem\.png[\"\'\)]=The image 'modem.png' is no longer supported! Try to use a different icon. +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)[/\"\'\(]folder-favorite\.png[\"\'\)]=The image 'folder-favorite.png' is no longer supported! Try to use a different icon. diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/01-locale.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/01-locale.dat new file mode 100644 index 0000000000..d7a06cf835 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/01-locale.dat @@ -0,0 +1,2 @@ +\bqx\.locale\.Number\.getDecimalSeperator\b=qx.locale.Number.getDecimalSeparator +\bqx\.locale\.Number\.getGroupSeperator\b=qx.locale.Number.getGroupSeparator diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/02-spinner.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/02-spinner.dat new file mode 100644 index 0000000000..45afa1dc63 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/02-spinner.dat @@ -0,0 +1,8 @@ +\bqx\.setComputedIncrementAmount\b=.setIncrementAmount +\bqx\.getComputedIncrementAmount\b=.getIncrementAmount + +\bqx\.setWheelComputedIncrementAmount\b=.setWheelIncrementAmount +\bqx\.getWheelComputedIncrementAmount\b=.getWheelIncrementAmount + +\bqx\.setPageComputedIncrementAmount\b=.setPageIncrementAmount +\bqx\.getPageComputedIncrementAmount\b=.getPageIncrementAmount diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/03-api.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/03-api.dat new file mode 100644 index 0000000000..b2a33f7441 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/03-api.dat @@ -0,0 +1,22 @@ +@param\s+([a-zA-Z0-9_\$]+)\s*\((.*?)\)=@param \1 {\2}
+@return\s+\((.*?)\)=@return {\1}
+
+@return\s+{string=@return {String
+@return\s+{float=@return {Float
+@return\s+{int=@return {Integer
+@return\s+{integer=@return {Integer
+@return\s+{boolean=@return {Boolean
+@return\s+{float=@return {Float
+@return\s+{double=@return {Double
+@return\s+{object=@return {Object
+@return\s+{map=@return {Map
+
+@param\s+([a-zA-Z0-9_$]+)\s+{string=@param \1 {String
+@param\s+([a-zA-Z0-9_$]+)\s+{float=@param \1 {Float
+@param\s+([a-zA-Z0-9_$]+)\s+{int=@param \1 {Integer
+@param\s+([a-zA-Z0-9_$]+)\s+{integer=@param \1 {Integer
+@param\s+([a-zA-Z0-9_$]+)\s+{boolean=@param \1 {Boolean
+@param\s+([a-zA-Z0-9_$]+)\s+{float=@param \1 {Float
+@param\s+([a-zA-Z0-9_$]+)\s+{double=@param \1 {Double
+@param\s+([a-zA-Z0-9_$]+)\s+{object=@param \1 {Object
+@param\s+([a-zA-Z0-9_$]+)\s+{map=@param \1 {Map
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/04-string.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/04-string.dat new file mode 100644 index 0000000000..0e01e7788d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/04-string.dat @@ -0,0 +1,14 @@ +\bqx\.lang\.String\.add\b=qx.lang.String.addListItem +\bqx\.lang\.String\.remove\b=qx.lang.String.removeListItem + +\bqx\.ui\.table\.DefaultDataCellRenderer\.escapeHtml\b=qx.util.StringEscape.escapeHtml +\bqx\.lang\.String\.escapeRegexpChars\b=qx.util.StringEscape.escapeRegexpChars + +# StringUtil never existed, so correct this mistake afterwards +\bqx\.ui\.basic\.Label\.htmlToText\b=qx.util.StringUtil.htmlToText +\bqx\.ui\.basic\.Label\.textToHtml\b=qx.util.StringUtil.textToHtml +\bqx\.util\.StringUtil\.htmlToText\b=qx.html.String.toText +\bqx\.util\.StringUtil\.textToHtml\b=qx.html.String.fromText + +\bqx\.ui\.basic\.Label\.htmlToText\b=qx.html.String.toText +\bqx\.ui\.basic\.Label\.textToHtml\b=qx.html.String.fromText diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/05-xml.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/05-xml.dat new file mode 100644 index 0000000000..65f88d0656 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/05-xml.dat @@ -0,0 +1,139 @@ +################# +# qx.html.String +################# + +\bqx\.util\.StringEscape\.HTML_ENTITIES_TO_CHARCODE\b=qx.html.Entity.TO_CHARCODE +\bqx\.util\.StringEscape\.HTML_CHARCODE_TO_ENTITIES\b=qx.html.Entity.FROM_CHARCODE + +\bqx\.util\.StringEscape\.escapeHtml\b=qx.html.String.escape +\bqx\.util\.StringEscape\.unescapeHtml\b=qx.html.String.unescape + +\bqx\.util\.StringEscape\.textToHtml\b=qx.html.String.fromText +\bqx\.util\.StringEscape\.htmlToText\b=qx.html.String.toText + + +################ +# qx.xml.String +################ + +\bqx\.util\.StringEscape\.XML_ENTITIES_TO_CHARCODE\b=qx.xml.Entity.TO_CHARCODE +\bqx\.util\.StringEscape\.XML_CHARCODE_TO_ENTITIES\b=qx.xml.Entity.FROM_CHARCODE + +\bqx\.util\.StringEscape\.escapeXml\b=qx.xml.String.escape +\bqx\.util\.StringEscape\.unescapeXml\b=qx.xml.String.unescape + + +################ +# qx.dom.String +################ + +\bqx\.util\.StringEscape\._escape\b=qx.dom.String.escapeEntities +\bqx\.util\.StringEscape\._unescape\b=qx.dom.String.unescapeEntities + +\bqx\.lang\.String\.stripTags\b=qx.dom.String.stripTags + + +################# +# qx.lang.String +################# + +\bqx\.util\.StringEscape\.escapeRegexpChars\b=qx.lang.String.escapeRegexpChars + + +##################### +# qx.dom --> qx.html +##################### + +\bqx\.dom\.Dimension\b=qx.html.Dimension +\bqx\.dom\.ElementFromPoint\b=qx.html.ElementFromPoint +\bqx\.dom\.EventRegistration\b=qx.html.EventRegistration +\bqx\.dom\.Iframe\b=qx.html.Iframe +\bqx\.dom\.Location\b=qx.html.Location +\bqx\.dom\.Offset\b=qx.html.Offset +\bqx\.dom\.ScrollIntoView\b=qx.html.ScrollIntoView +\bqx\.dom\.Scroll\b=qx.html.Scroll +\bqx\.dom\.Style\b=qx.html.Style +\bqx\.dom\.StyleSheet\b=qx.html.StyleSheet +\bqx\.dom\.Window\b=qx.html.Window + + +############### +# xml.Document +############### + +\bqx\.xml\.Core\.createXmlDocument\b=qx.xml.Document.create +\bqx\.xml\.Core\.isDocument\b=qx.xml.Document.isDocument +\bqx\.xml\.Core\.parse\b=qx.xml.Document.fromString + + +############## +# xml.Element +############## + +\bqx\.xml\.Core\.serialize\b=qx.xml.Element.serialize +\bqx\.xml\.Core\.selectSingleNode\b=qx.xml.Element.selectSingleNode +\bqx\.xml\.Core\.selectNodes\b=qx.xml.Element.selectNodes +\bqx\.xml\.Core\.getElementsByTagNameNS\b=qx.xml.Element.getElementsByTagNameNS + +############## +# xml.Element +############## + +\bqx\.xml\.Core\.getTextContent\b=qx.dom.Element.getTextContent + + +################## +# net.HttpRequest +################## + +\bqx\.xml\.Core\.createXmlHttpRequest\b=qx.net.HttpRequest.create + + +############# +# html.Form +############# + +\bqx\.util\.FormUtil\b=qx.html.Form + + +############### +# html.Textile +############### + +\bqx\.util\.Textile\b=qx.html.Textile + + +################ +# lang.Function +################ + +\bqx\.util\.Return\b=qx.lang.Function + + +##################### +# util.StringBuilder +##################### + +\bqx\.type\.StringBuilder\b=qx.util.StringBuilder + + +############## +# core.Client +############## + +\bqx\.sys\.Client\b=qx.core.Client + + +################## +# util.GuiBuilder +################## + +\bqx\.client\.Builder\b=qx.util.GuiBuilder + + +###### +# log +###### + +\bqx\.dev\.log\b=qx.log + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/06-mime.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/06-mime.dat new file mode 100644 index 0000000000..fd394282eb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/06-mime.dat @@ -0,0 +1,8 @@ +(?<!JSON: )[\"\']text\/json[\"\']=qx.util.Mime.JSON +(?<!JSON: )[\"\']application\/json[\"\']=qx.util.Mime.JSON +(?<!XML: )[\"\']application\/xml[\"\']=qx.util.Mime.XML +(?<!TEXT: )[\"\']text\/plain[\"\']=qx.util.Mime.TEXT +(?<!HTML: )[\"\']text\/html[\"\']=qx.util.Mime.HTML + +# text/javascript is not autmatically replaced with application/javascript. +# Instead, a info warning is given, see info/ folder. diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/07-icons.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/07-icons.dat new file mode 100644 index 0000000000..55a018e4b2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/07-icons.dat @@ -0,0 +1,114 @@ +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])help\.png([\"\'\)])=\1actions/help-about.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])encrypted\.png([\"\'\)])=\1actions/encrypt.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-image\.png([\"\'\)])=\1mimetypes/image-x-generic.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])themes\.png([\"\'\)])=\1apps/preferences-desktop-theme.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])colors\.png([\"\'\)])=\1actions/format-color.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])view-text\.png([\"\'\)])=\1actions/view-pane-text.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])find\.png([\"\'\)])=\1actions/edit-find.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])spellcheck\.png([\"\'\)])=\1actions/tools-check-spelling.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])movieplayer\.png([\"\'\)])=\1apps/multimedia-movie-player.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])desktop\.png([\"\'\)])=\1places/user-desktop.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])terminal\.png([\"\'\)])=\1apps/utilities-terminal.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])view-remove\.png([\"\'\)])=\1actions/view-pane-remove.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mail\.png([\"\'\)])=\1apps/internet-email-client.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])folder\.png([\"\'\)])=\1places/folder.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])look-and-feel\.png([\"\'\)])=\1apps/preferences-desktop-theme.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-archive\.png([\"\'\)])=\1mimetypes/package-x-generic.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-html\.png([\"\'\)])=\1mimetypes/text-html.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])background\.png([\"\'\)])=\1apps/preferences-desktop-wallpaper.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])view-tree\.png([\"\'\)])=\1actions/view-pane-tree.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])file-open\.png([\"\'\)])=\1actions/document-open.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-quicktime\.png([\"\'\)])=\1mimetypes/application-quicktime.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])password\.png([\"\'\)])=\1status/dialog-password.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])button-ok\.png([\"\'\)])=\1actions/dialog-ok.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])decrypted\.png([\"\'\)])=\1actions/decrypt.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mycomputer\.png([\"\'\)])=\1devices/computer.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])edit\.png([\"\'\)])=\1actions/edit.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])notes\.png([\"\'\)])=\1apps/accessories-notes.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])fonts\.png([\"\'\)])=\1apps/preferences-desktop-font.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])reload\.png([\"\'\)])=\1actions/view-refresh.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])button-cancel\.png([\"\'\)])=\1actions/dialog-cancel.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])file-new\.png([\"\'\)])=\1actions/document-new.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])settings\.png([\"\'\)])=\1categories/preferences.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])adobe-reader\.png([\"\'\)])=\1apps/office-adobe-reader.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])file-save\.png([\"\'\)])=\1actions/document-save.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])edit-cut\.png([\"\'\)])=\1actions/edit-cut.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])back\.png([\"\'\)])=\1actions/go-previous.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])devices\.png([\"\'\)])=\1devices/drive-harddisk.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])home\.png([\"\'\)])=\1actions/go-home.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])file-print\.png([\"\'\)])=\1actions/document-print.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])network\.png([\"\'\)])=\1categories/applications-internet.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])clock\.png([\"\'\)])=\1apps/accessories-clock.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-text\.png([\"\'\)])=\1mimetypes/text-x-generic.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])multimedia\.png([\"\'\)])=\1categories/applications-multimedia.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])viewmag-plus\.png([\"\'\)])=\1actions/zoom-in.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])clipboard\.png([\"\'\)])=\1apps/accessories-clipboard.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])exit\.png([\"\'\)])=\1actions/application-exit.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])run\.png([\"\'\)])=\1actions/system-run.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])dictionary\.png([\"\'\)])=\1apps/accessories-dictionary.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])undo\.png([\"\'\)])=\1actions/edit-undo.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-calendar\.png([\"\'\)])=\1mimetypes/x-office-calendar.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])trashcan-full\.png([\"\'\)])=\1places/user-trash-full.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])ok\.png([\"\'\)])=\1actions/dialog-ok.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])file-save-as\.png([\"\'\)])=\1actions/document-save-as.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])harddrive\.png([\"\'\)])=\1devices/drive-harddisk.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mixer\.png([\"\'\)])=\1apps/multimedia-volume-control.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])tv\.png([\"\'\)])=\1devices/video-display.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])games\.png([\"\'\)])=\1categories/applications-games.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])folder-open\.png([\"\'\)])=\1status/folder-open.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])edit-copy\.png([\"\'\)])=\1actions/edit-copy.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])viewmag\.png([\"\'\)])=\1actions/zoom.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])viewmag-minus\.png([\"\'\)])=\1actions/zoom-out.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])down\.png([\"\'\)])=\1actions/go-down.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])services\.png([\"\'\)])=\1places/services.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])trashcan-empty\.png([\"\'\)])=\1places/user-trash.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-shellscript\.png([\"\'\)])=\1mimetypes/text-x-script.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])cancel\.png([\"\'\)])=\1actions/dialog-cancel.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])apply\.png([\"\'\)])=\1actions/dialog-ok.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])redo\.png([\"\'\)])=\1actions/edit-redo.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])history-clear\.png([\"\'\)])=\1actions/history-clear.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])scanner\.png([\"\'\)])=\1devices/scanner.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-color\.png([\"\'\)])=\1actions/format-color.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])system\.png([\"\'\)])=\1categories/applications-system.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])camera\.png([\"\'\)])=\1devices/camera-photo.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])editor\.png([\"\'\)])=\1apps/accessories-text-editor.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])forward\.png([\"\'\)])=\1actions/go-next.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-sourcecode\.png([\"\'\)])=\1mimetypes/empty-x-generic.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-multimedia\.png([\"\'\)])=\1mimetypes/audio-x-generic.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-video\.png([\"\'\)])=\1mimetypes/video-x-generic.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])configure\.png([\"\'\)])=\1apps/preferences.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])floppy\.png([\"\'\)])=\1devices/media-floppy.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])viewmag-fit\.png([\"\'\)])=\1actions/zoom-best-fit.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])bookmark-add\.png([\"\'\)])=\1actions/favorite-add.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])graphics\.png([\"\'\)])=\1categories/applications-graphics.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])cdrom\.png([\"\'\)])=\1devices/media-optical.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-spreadsheet\.png([\"\'\)])=\1mimetypes/x-office-spreadsheet.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])netscape\.png([\"\'\)])=\1mimetypes/text-html.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])view-icon\.png([\"\'\)])=\1actions/view-pane-icon.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])edit-paste\.png([\"\'\)])=\1actions/edit-paste.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])view-multicolumn\.png([\"\'\)])=\1actions/view-pane-column.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])up\.png([\"\'\)])=\1actions/go-up.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])help-center\.png([\"\'\)])=\1apps/help-browser.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-script\.png([\"\'\)])=\1mimetypes/text-x-script.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])file-manager\.png([\"\'\)])=\1apps/system-file-manager.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])display\.png([\"\'\)])=\1devices/video-display.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])history\.png([\"\'\)])=\1actions/history.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])edit-delete\.png([\"\'\)])=\1actions/edit-delete.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-binary\.png([\"\'\)])=\1mimetypes/application-x-executable.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])calculator\.png([\"\'\)])=\1apps/accessories-calculator.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])accessibility\.png([\"\'\)])=\1apps/preferences-desktop-accessibility.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])organizer\.png([\"\'\)])=\1apps/office-organizer.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mouse\.png([\"\'\)])=\1devices/input-mouse.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])printer\.png([\"\'\)])=\1devices/printer.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])stop\.png([\"\'\)])=\1actions/stop.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])viewmag-original\.png([\"\'\)])=\1actions/zoom-original.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])utilities\.png([\"\'\)])=\1categories/applications-utilities.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])applications\.png([\"\'\)])=\1categories/applications.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])user\.png([\"\'\)])=\1apps/system-users.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])mime-pdf\.png([\"\'\)])=\1mimetypes/application-pdf.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])date\.png([\"\'\)])=\1apps/accessories-date.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])alarm\.png([\"\'\)])=\1apps/accessories-alarm.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])view-detailed\.png([\"\'\)])=\1actions/view-pane-detailed.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])magnifier\.png([\"\'\)])=\1actions/zoom.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])info\.png([\"\'\)])=\1status/dialog-information.png\2 +(?<!actions)(?<!apps)(?<!categories)(?<!devices)(?<!mimetypes)(?<!places)(?<!status)([/\"\'\(])error\.png([\"\'\)])=\1status/dialog-error.png\2 diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/08-genvar.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/08-genvar.dat new file mode 100644 index 0000000000..03ab1d1aa5 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6.5/patches/08-genvar.dat @@ -0,0 +1 @@ +\bqx\.SOURCE_BUILD\b=qx.IS_SOURCE diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/info/01-prototypes.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/info/01-prototypes.dat new file mode 100644 index 0000000000..2cdd4addd0 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/info/01-prototypes.dat @@ -0,0 +1,32 @@ +\.copy\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.clone\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.getFirst\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.getLast\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.insertAt\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.insertBefore\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.insertAfter\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.removeAt\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.removeAll\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.append\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.remove\b=Maybe old use of prototype function. Please use qx.lang.Array instead.
+\.contains\b=Maybe old use of prototype function. Please use qx.lang.Array/qx.lang.String instead.
+
+\.toCamelCase\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.trimLeft\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.trimRight\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.trim\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.stripTags\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.startsWith\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.endsWith\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.pad\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.toFirstUp\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+\.escapeRegexpChars\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+
+# All widget add/remove is affected. It's generally better to hide these because the string
+# methods are relatively rarely used.
+#\.add\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+#\.remove\b=Maybe old use of prototype function. Please use qx.lang.String instead.
+
+\.isInRange\b=Maybe old use of prototype function. Please use qx.lang.Number instead.
+\.isBetweenRange\b=Maybe old use of prototype function. Please use qx.lang.Number instead.
+\.limit\b=Maybe old use of prototype function. Please use qx.lang.Number instead.
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/info/02-obsolete.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/info/02-obsolete.dat new file mode 100644 index 0000000000..65e5496e21 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/info/02-obsolete.dat @@ -0,0 +1,3 @@ +\bQxSet\b=Does not exist anymore. Maybe qx.manager.object.ObjectManager can be used instead.
+\bQxTransport\b=Does not exist anymore. Please use qx.io.remote.RemoteRequest now.
+\bQxXmlHttpTransport\b=Does not exist anymore. Please use qx.io.remote.RemoteRequest now.
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/01-classnames.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/01-classnames.dat new file mode 100644 index 0000000000..4545fe3b7f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/01-classnames.dat @@ -0,0 +1,209 @@ +\bQxConst\b=qx.Const +\bQxClient\b=qx.sys.Client + +\bQxDefaultSettings\b=qx.core.DefaultSettings +\bQxSettings\b=qx.core.Settings +\bQxMain\b=qx.core.Main +\bQxObject\b=qx.core.Object +\bQxTarget\b=qx.core.Target +\bQxApplication\b=qx.core.Init + +\bQxRangeManager\b=qx.type.Range +\bQxSelectionStorage\b=qx.type.Selection +\bQxFlashPlayerVersion\b=qx.type.Version + +\bQxTimer\b=qx.client.Timer +\bQxNativeWindow\b=qx.client.NativeWindow +\bQxClientWindow\b=qx.client.ClientWindow +\bQxCommand\b=qx.client.Command +\bQxBuilder\b=qx.client.Builder + +\bQxDebug\b=qx.dev.Debug +\bQxTimeTracker\b=qx.dev.TimeTracker + +\bQxXmlExtras\b=qx.lang.Xml + +\bQxDataEvent\b=qx.event.type.DataEvent +\bQxDomEvent\b=qx.event.type.DomEvent +\bQxDragEvent\b=qx.event.type.DragEvent +\bQxEvent\b=qx.event.type.Event +\bQxFocusEvent\b=qx.event.type.FocusEvent +\bQxKeyEvent\b=qx.event.type.KeyEvent +\bQxMouseEvent\b=qx.event.type.MouseEvent + +\bQxDragAndDropManager\b=qx.event.handler.DragAndDropHandler +\bQxEventManager\b=qx.event.handler.EventHandler +\bQxFocusManager\b=qx.event.handler.FocusHandler + +\bQxRequest\b=qx.io.remote.RemoteRequest +\bQxRequestQueue\b=qx.io.remote.RemoteRequestQueue +\bQxResponse\b=qx.io.remote.RemoteResponse +\bQxCommonTransport\b=qx.io.remote.AbstractRemoteTransport +\bQxIframeTransport\b=qx.io.remote.IframeTransport +\bQxXmlhttpTransport\b=qx.io.remote.XmlhttpTransport + +\bQxCookie\b=qx.io.local.CookieApi +\bQxCookieStorage\b=qx.io.local.CookieTransport + +\bQxImagePreloader\b=qx.io.image.ImagePreloader +\bQxImagePreloaderSystem\b=qx.io.image.ImagePreloaderSystem + +\bQxParent\b=qx.ui.core.Parent +\bQxWidget\b=qx.ui.core.Widget +\bQxClientDocument\b=qx.ui.core.ClientDocument +\bQxBlocker\b=qx.ui.core.ClientDocumentBlocker + +\bQxAtom\b=qx.ui.basic.Atom +\bQxImage\b=qx.ui.basic.Image +\bQxLabel\b=qx.ui.basic.Label +\bQxTerminator\b=qx.ui.basic.Terminator +\bQxInline\b=qx.ui.basic.Inline +\bQxHorizontalSpacer\b=qx.ui.basic.HorizontalSpacer +\bQxVerticalSpacer\b=qx.ui.basic.VerticalSpacer + +\bQxBoxLayout\b=qx.ui.layout.BoxLayout +\bQxCanvasLayout\b=qx.ui.layout.CanvasLayout +\bQxDockLayout\b=qx.ui.layout.DockLayout +\bQxFlowLayout\b=qx.ui.layout.FlowLayout +\bQxHorizontalBoxLayout\b=qx.ui.layout.HorizontalBoxLayout +\bQxVerticalBoxLayout\b=qx.ui.layout.VerticalBoxLayout +\bQxGridLayout\b=qx.ui.layout.GridLayout + +\bQxTextField\b=qx.ui.form.TextField +\bQxTextArea\b=qx.ui.form.TextArea +\bQxPasswordField\b=qx.ui.form.PasswordField +\bQxSpinner\b=qx.ui.form.Spinner +\bQxButton\b=qx.ui.form.Button +\bQxRepeatButton\b=qx.ui.form.RepeatButton +\bQxComboBox\b=qx.ui.form.ComboBox +\bQxList\b=qx.ui.form.List +\bQxCheckBox\b=qx.ui.form.CheckBox +\bQxRadioButton\b=qx.ui.form.RadioButton +\bQxListItem\b=qx.ui.form.ListItem +\bQxInputCheckIcon\b=qx.ui.form.InputCheckSymbol + +\bQxFieldSet\b=qx.ui.groupbox.GroupBox +\bQxCheckBoxFieldSet\b=qx.ui.groupbox.CheckGroupBox +\bQxRadioButtonFieldSet\b=qx.ui.groupbox.RadioGroupBox + +\bQxListView\b=qx.ui.listview.ListView +\bQxListViewContentCellHtml\b=qx.ui.listview.ListViewContentCellHtml +\bQxListViewContentCellIconHtml\b=qx.ui.listview.ListViewContentCellIconHtml +\bQxListViewContentCellImage\b=qx.ui.listview.ListViewContentCellImage +\bQxListViewContentCellLink\b=qx.ui.listview.ListViewContentCellLink +\bQxListViewContentCellText\b=qx.ui.listview.ListViewContentCellText +\bQxListViewHeader\b=qx.ui.listview.ListViewHeader +\bQxListViewHeaderCell\b=qx.ui.listview.ListViewHeaderCell +\bQxListViewHeaderSeparator\b=qx.ui.listview.ListViewHeaderSeparator +\bQxListViewPane\b=qx.ui.listview.ListViewPane + +\bQxWindow\b=qx.ui.window.Window + +\bQxPopup\b=qx.ui.popup.Popup +\bQxPopupAtom\b=qx.ui.popup.PopupAtom +\bQxToolTip\b=qx.ui.popup.ToolTip + +\bQxMenu\b=qx.ui.menu.Menu +\bQxMenuBar\b=qx.ui.menu.MenuBar +\bQxMenuBarButton\b=qx.ui.menu.MenuBarButton +\bQxMenuButton\b=qx.ui.menu.MenuButton +\bQxMenuCheckBox\b=qx.ui.menu.MenuCheckBox +\bQxMenuLayout\b=qx.ui.menu.MenuLayout +\bQxMenuRadioButton\b=qx.ui.menu.MenuRadioButton +\bQxMenuSeparator\b=qx.ui.menu.MenuSeparator + +\bQxCommonView\b=qx.ui.pageview.AbstractPageView +\bQxCommonViewBar\b=qx.ui.pageview.AbstractPageViewBar +\bQxCommonViewButton\b=qx.ui.pageview.AbstractPageViewButton +\bQxCommonViewPage\b=qx.ui.pageview.AbstractPageViewPage +\bQxCommonViewPane\b=qx.ui.pageview.AbstractPageViewPane + +\bQxTabView\b=qx.ui.pageview.tabview.TabView +\bQxTabViewBar\b=qx.ui.pageview.tabview.TabViewBar +\bQxTabViewButton\b=qx.ui.pageview.tabview.TabViewButton +\bQxTabViewPage\b=qx.ui.pageview.tabview.TabViewPage +\bQxTabViewPane\b=qx.ui.pageview.tabview.TabViewPane + +\bQxBarView\b=qx.ui.pageview.buttonview.ButtonView +\bQxBarViewBar\b=qx.ui.pageview.buttonview.ButtonViewBar +\bQxBarViewButton\b=qx.ui.pageview.buttonview.ButtonViewButton +\bQxBarViewPage\b=qx.ui.pageview.buttonview.ButtonViewPage +\bQxBarViewPane\b=qx.ui.pageview.buttonview.ButtonViewPane + +\bQxToolBar\b=qx.ui.toolbar.ToolBar +\bQxToolBarButton\b=qx.ui.toolbar.ToolBarButton +\bQxToolBarCheckBox\b=qx.ui.toolbar.ToolBarCheckBox +\bQxToolBarMenuButton\b=qx.ui.toolbar.ToolBarMenuButton +\bQxToolBarPart\b=qx.ui.toolbar.ToolBarPart +\bQxToolBarPartHandle\b=qx.ui.toolbar.ToolBarPartHandle +\bQxToolBarRadioButton\b=qx.ui.toolbar.ToolBarRadioButton +\bQxToolBarSeparator\b=qx.ui.toolbar.ToolBarSeparator + +\bQxTree\b=qx.ui.tree.Tree +\bQxTreeElement\b=qx.ui.tree.AbstractTreeElement +\bQxTreeFile\b=qx.ui.tree.TreeFile +\bQxTreeFolder\b=qx.ui.tree.TreeFolder + +\bQxColorSelector\b=qx.ui.component.ColorSelector + +\bQxCanvasLayoutImpl\b=qx.renderer.layout.CanvasLayoutImpl +\bQxDockLayoutImpl\b=qx.renderer.layout.DockLayoutImpl +\bQxFlowLayoutImpl\b=qx.renderer.layout.FlowLayoutImpl +\bQxGridLayoutImpl\b=qx.renderer.layout.GridLayoutImpl +\bQxHorizontalBoxLayoutImpl\b=qx.renderer.layout.HorizontalBoxLayoutImpl +\bQxLayoutImpl\b=qx.renderer.layout.LayoutImpl +\bQxMenuButtonLayoutImpl\b=qx.renderer.layout.MenuButtonLayoutImpl +\bQxMenuLayoutImpl\b=qx.renderer.layout.MenuLayoutImpl +\bQxVerticalBoxLayoutImpl\b=qx.renderer.layout.VerticalBoxLayoutImpl + +\bQxBorder\.presets\b=qx.renderer.border.BorderPresets +\bQxBorderObject\.presets\b=qx.renderer.border.BorderPresets +\bQxBorder\b=qx.renderer.border.Border +\bQxBorderCache\b=qx.renderer.border.BorderCache +\bQxBorderObject\b=qx.renderer.border.BorderObject +\bQxBorderPresets\b=qx.renderer.border.BorderPresets + +\bQxColor\b=qx.renderer.color.Color +\bQxColorCache\b=qx.renderer.color.ColorCache +\bQxColorObject\b=qx.renderer.color.ColorObject +\bQxColorUtil\b=qx.util.ColorUtil + +\bQxFont\b=qx.renderer.font.Font +\bQxFontCache\b=qx.renderer.font.FontCache +\bQxFontObject\b=qx.renderer.font.FontObject + +\bQxAppearanceTheme\b=qx.renderer.theme.AppearanceTheme +\bQxColorTheme\b=qx.renderer.theme.ColorTheme +\bQxIconTheme\b=qx.renderer.theme.IconTheme +\bQxWidgetTheme\b=qx.renderer.theme.WidgetTheme + +\bQxManager\b=qx.manager.object.ObjectManager +\bQxAppearanceManager\b=qx.manager.object.AppearanceManager +\bQxColorManager\b=qx.manager.object.ColorManager +\bQxPopupManager\b=qx.manager.object.PopupManager +\bQxMenuManager\b=qx.manager.object.MenuManager +\bQxToolTipManager\b=qx.manager.object.ToolTipManager +\bQxWindowManager\b=qx.manager.object.WindowManager +\bQxImageManager\b=qx.manager.object.ImageManager +\bQxImagePreloaderManager\b=qx.manager.object.ImagePreloaderManager + +\bQxSelectionManager\b=qx.manager.selection.SelectionManager +\bQxDomSelectionManager\b=qx.manager.selection.DomSelectionManager +\bQxTreeSelectionManager\b=qx.manager.selection.TreeSelectionManager +\bQxVirtualSelectionManager\b=qx.manager.selection.VirtualSelectionManager +\bQxRadioManager\b=qx.manager.selection.RadioManager + +\bQxFlash\b=qx.ui.embed.Flash +\bQxIframe\b=qx.ui.embed.Iframe +\bQxGallery\b=qx.ui.embed.Gallery +\bQxGalleryList\b=qx.ui.embed.GalleryList +\bQxHtml\b=qx.ui.embed.HtmlEmbed +\bQxIconHtml\b=qx.ui.embed.IconHtmlEmbed +\bQxLink\b=qx.ui.embed.LinkEmbed +\bQxText\b=qx.ui.embed.TextEmbed +\bQxNode\b=qx.ui.embed.NodeEmbed + +\bQxTextile\b=qx.util.Textile.textilize +\bQxCompare\b=qx.util.Compare +\bQxFormUtils\b=qx.util.FormUtil + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/02-domapi.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/02-domapi.dat new file mode 100644 index 0000000000..bae7bf0be8 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/02-domapi.dat @@ -0,0 +1,38 @@ +qx.dom.getComputedOuter=qx.dom.DomDimension.getOuter +qx.dom.getComputedInner=qx.dom.DomDimension.getInner +qx.dom.getComputedArea=qx.dom.DomDimension.getArea +qx.dom.getComputedBox=qx.dom.DomDimension.getBox +qx.dom.getComputedInset=qx.dom.DomDimension.getInset +qx.dom.getComputedScrollBar=qx.dom.DomDimension.getScrollBar + +qx.dom.cleanElementWhitespace=qx.dom.DomElement.cleanWhitespace +qx.dom.isElementEmpty=qx.dom.DomElement.isEmpty + +qx.dom.getElementFromPoint=qx.dom.DomElementFromPoint.getElementFromPoint +qx.dom.getElementAbsolutePointChecker=qx.dom.DomElementFromPoint.getElementAbsolutePointChecker + +qx.dom.addEventListener=qx.dom.DomEventRegistration.addEventListener +qx.dom.removeEventListener=qx.dom.DomEventRegistration.removeEventListener + +qx.dom.getIframe=qx.dom.DomIframe.get + +qx.dom.getComputedPage=qx.dom.DomLocation.getPage +qx.dom.getComputedClient=qx.dom.DomLocation.getClient +qx.dom.getComputedScreen=qx.dom.DomLocation.getScreen + +qx.dom.getOffset=qx.dom.DomOffset.get +qx.dom.getScroll=qx.dom.DomScroll.get +qx.dom.scrollIntoView=qx.dom.DomScrollIntoView.scroll + +qx.dom.getComputedStyle=qx.dom.DomStyle.getStyle +qx.dom.getComputedBorder=qx.dom.DomStyle.getBorder +qx.dom.getComputedMargin=qx.dom.DomStyle.getMargin +qx.dom.getComputedPadding=qx.dom.DomStyle.getPadding + +qx.dom.createStyleElement=qx.dom.DomStyleSheet.createElement +qx.dom.addCssRule=qx.dom.DomStyleSheet.addRule +qx.dom.removeCssRule=qx.dom.DomStyleSheet.removeRule +qx.dom.removeAllCssRules=qx.dom.DomStyleSheet.removeAllRules + +qx.dom.getWindowInner=qx.dom.DomWindow.getInner +qx.dom.getClientScroll=qx.dom.DomWindow.getScroll diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/03-const.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/03-const.dat new file mode 100644 index 0000000000..ab9a842d8f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/03-const.dat @@ -0,0 +1,55 @@ +qx.Const.NAMESPACE_=qx.constant.Net.NAMESPACE_ +qx.Const.REQUEST_STATE_=qx.constant.Net.STATE_ +qx.Const.PROTOCOL_=qx.constant.Net.PROTOCOL_ +qx.Const.URI_=qx.constant.Net.URI_ +qx.Const.METHOD_=qx.constant.Net.METHOD_ +qx.Const.CORE_=qx.constant.Core. +qx.Const.NODE_=qx.constant.Node. +qx.Const.BORDER_STYLE_=qx.renderer.border.Border.STYLE_ +qx.Const.FONT_STYLE_=qx.renderer.font.Font.STYLE_ +qx.Const.HTML_=qx.constant.Html. +qx.Const.TYPEOF_=qx.constant.Type. +qx.Const.IMAGE_BLANK=qx.manager.object.ImageManager.BLANK +qx.Const.CURSOR_=qx.constant.Style.CURSOR_ +qx.Const.OVERFLOW_VALUE_=qx.constant.Style.OVERFLOW_ +qx.Const.MIMETYPE_=qx.constant.Mime. +qx.Const.ORIENTATION_=qx.constant.Layout.ORIENTATION_ +qx.Const.ALIGN_=qx.constant.Layout.ALIGN_ +qx.Const.STATE_OVER=qx.ui.core.Widget.STATE_OVER +qx.Const.STATE_FOCUSED=qx.ui.core.Widget.STATE_FOCUSED +qx.Const.STATE_DISABLED=qx.ui.core.Widget.STATE_DISABLED +qx.Const.STATE_CHECKED=qx.ui.form.Button.STATE_CHECKED +qx.Const.STATE_PRESSED=qx.ui.form.Button.STATE_PRESSED +qx.Const.STATE_ABANDONED=qx.ui.form.Button.STATE_ABANDONED +qx.Const.STATE_SELECTED=qx.manager.selection.SelectionManager.STATE_SELECTED +qx.Const.STATE_ANCHOR=qx.manager.selection.SelectionManager.STATE_ANCHOR +qx.Const.STATE_LEAD=qx.manager.selection.SelectionManager.STATE_LEAD +qx.Const.STATE_ACTIVE=qx.ui.window.Window.STATE_ACTIVE +qx.Const.STATE_MAXIMIZED=qx.ui.window.Window.STATE_MAXIMIZED + +qx.Const.PROPERTY_CLASSNAME=qx.ui.core.Widget.PROPERTY_CLASSNAME +qx.Const.PROPERTY_BORDERX=qx.ui.core.Widget.PROPERTY_BORDERX +qx.Const.PROPERTY_BORDERY=qx.ui.core.Widget.PROPERTY_BORDERY +qx.Const.PROPERTY_BORDERWIDTHX=qx.ui.core.Widget.PROPERTY_BORDERWIDTHX +qx.Const.PROPERTY_BORDERWIDTHY=qx.ui.core.Widget.PROPERTY_BORDERWIDTHY +qx.Const.PROPERTY_PARENT_PADDINGLEFT=qx.ui.core.Widget.PROPERTY_PARENT_PADDINGLEFT +qx.Const.PROPERTY_PARENT_PADDINGRIGHT=qx.ui.core.Widget.PROPERTY_PARENT_PADDINGRIGHT +qx.Const.PROPERTY_PARENT_PADDINGTOP=qx.ui.core.Widget.PROPERTY_PARENT_PADDINGTOP +qx.Const.PROPERTY_PARENT_PADDINGBOTTOM=qx.ui.core.Widget.PROPERTY_PARENT_PADDINGBOTTOM + +qx.Const.PROPERTY_FILTER=qx.constant.Style.PROPERTY_FILTER +qx.Const.PROPERTY_DISPLAY=qx.constant.Style.PROPERTY_DISPLAY +qx.Const.PROPERTY_POSITION=qx.constant.Style.PROPERTY_POSITION +qx.Const.PROPERTY_VISIBILITY=qx.constant.Style.PROPERTY_VISIBILITY +qx.Const.PROPERTY_DISABLED=qx.constant.Style.PROPERTY_DISABLED +qx.Const.PROPERTY_LINEHEIGHT=qx.constant.Style.PROPERTY_LINEHEIGHT +qx.Const.PROPERTY_TEXTALIGN=qx.constant.Style.PROPERTY_TEXTALIGN +qx.Const.PROPERTY_WHITESPACE=qx.constant.Style.PROPERTY_WHITESPACE +qx.Const.PROPERTY_PADDING=qx.constant.Style.PROPERTY_PADDING +qx.Const.PROPERTY_OVERFLOW_BOTH=qx.constant.Style.PROPERTY_OVERFLOW_BOTH +qx.Const.PROPERTY_OVERFLOW_TEXT=qx.constant.Style.PROPERTY_OVERFLOW_TEXT +qx.Const.PROPERTY_OVERFLOW_HORIZONTAL=qx.constant.Style.PROPERTY_OVERFLOW_HORIZONTAL +qx.Const.PROPERTY_OVERFLOW_VERTICAL=qx.constant.Style.PROPERTY_OVERFLOW_VERTICAL + +# Should be the last one +qx.Const.PROPERTY_=qx.OO.PROPERTY_
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/04-events.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/04-events.dat new file mode 100644 index 0000000000..7bdd26f42c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/04-events.dat @@ -0,0 +1,56 @@ +qx.Const.EVENT_TYPE_MOUSEOVER=qx.constant.Event.MOUSEOVER +qx.Const.EVENT_TYPE_MOUSEMOVE=qx.constant.Event.MOUSEMOVE +qx.Const.EVENT_TYPE_MOUSEOUT=qx.constant.Event.MOUSEOUT +qx.Const.EVENT_TYPE_MOUSEDOWN=qx.constant.Event.MOUSEDOWN +qx.Const.EVENT_TYPE_MOUSEUP=qx.constant.Event.MOUSEUP +qx.Const.EVENT_TYPE_MOUSEWHEEL=qx.constant.Event.MOUSEWHEEL +qx.Const.EVENT_TYPE_CLICK=qx.constant.Event.CLICK +qx.Const.EVENT_TYPE_DBLCLICK=qx.constant.Event.DBLCLICK +qx.Const.EVENT_TYPE_CONTEXTMENU=qx.constant.Event.CONTEXTMENU +qx.Const.EVENT_TYPE_KEYDOWN=qx.constant.Event.KEYDOWN +qx.Const.EVENT_TYPE_KEYPRESS=qx.constant.Event.KEYPRESS +qx.Const.EVENT_TYPE_KEYUP=qx.constant.Event.KEYUP + +qx.Const.EVENT_TYPE_BLUR=qx.constant.Event.BLUR +qx.Const.EVENT_TYPE_FOCUS=qx.constant.Event.FOCUS +qx.Const.EVENT_TYPE_SELECT=qx.constant.Event.SELECT +qx.Const.EVENT_TYPE_SCROLL=qx.constant.Event.SCROLL +qx.Const.EVENT_TYPE_INPUT=qx.constant.Event.INPUT +qx.Const.EVENT_TYPE_CHANGE=qx.constant.Event.CHANGE + +qx.Const.EVENT_TYPE_ERROR=qx.constant.Event.ERROR +qx.Const.EVENT_TYPE_RESIZE=qx.constant.Event.RESIZE +qx.Const.EVENT_TYPE_INTERVAL=qx.constant.Event.INTERVAL +qx.Const.EVENT_TYPE_EXECUTE=qx.constant.Event.EXECUTE +qx.Const.EVENT_TYPE_CREATE=qx.constant.Event.CREATE + +qx.Const.EVENT_TYPE_BEFOREAPPEAR=qx.constant.Event.BEFOREAPPEAR +qx.Const.EVENT_TYPE_APPEAR=qx.constant.Event.APPEAR +qx.Const.EVENT_TYPE_BEFOREDISAPPEAR=qx.constant.Event.BEFOREDISAPPEAR +qx.Const.EVENT_TYPE_DISAPPEAR=qx.constant.Event.DISAPPEAR +qx.Const.EVENT_TYPE_BEFOREINSERTDOM=qx.constant.Event.BEFOREINSERTDOM +qx.Const.EVENT_TYPE_INSERTDOM=qx.constant.Event.INSERTDOM +qx.Const.EVENT_TYPE_BEFOREREMOVEDOM=qx.constant.Event.BEFOREREMOVEDOM +qx.Const.EVENT_TYPE_REMOVEDOM=qx.constant.Event.REMOVEDOM + +qx.Const.EVENT_TYPE_LOAD=qx.constant.Event.LOAD +qx.Const.EVENT_TYPE_UNLOAD=qx.constant.Event.UNLOAD +qx.Const.EVENT_TYPE_BEFOREUNLOAD=qx.constant.Event.BEFOREUNLOAD +qx.Const.EVENT_TYPE_SUBMIT=qx.constant.Event.SUBMIT + +qx.Const.EVENT_TYPE_CREATED=qx.constant.Event.CREATED +qx.Const.EVENT_TYPE_CONFIGURED=qx.constant.Event.CONFIGURED +qx.Const.EVENT_TYPE_QUEUED=qx.constant.Event.QUEUED +qx.Const.EVENT_TYPE_SENDING=qx.constant.Event.SENDING +qx.Const.EVENT_TYPE_RECEIVING=qx.constant.Event.RECEIVING +qx.Const.EVENT_TYPE_COMPLETED=qx.constant.Event.COMPLETED +qx.Const.EVENT_TYPE_ABORTED=qx.constant.Event.ABORTED +qx.Const.EVENT_TYPE_FAILED=qx.constant.Event.FAILED +qx.Const.EVENT_TYPE_TIMEOUT=qx.constant.Event.TIMEOUT + +qx.Const.EVENT_TYPE_DRAGDROP=qx.constant.Event.DRAGDROP +qx.Const.EVENT_TYPE_DRAGOVER=qx.constant.Event.DRAGOVER +qx.Const.EVENT_TYPE_DRAGOUT=qx.constant.Event.DRAGOUT +qx.Const.EVENT_TYPE_DRAGMOVE=qx.constant.Event.DRAGMOVE +qx.Const.EVENT_TYPE_DRAGSTART=qx.constant.Event.DRAGSTART +qx.Const.EVENT_TYPE_DRAGEND=qx.constant.Event.DRAGEND diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/05-util.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/05-util.dat new file mode 100644 index 0000000000..d26a57a90f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/05-util.dat @@ -0,0 +1,47 @@ +\bQxUtil\.returnTrue\b = qx.util.Return.returnTrue +\bQxUtil\.returnFalse\b = qx.util.Return.returnFalse +\bQxUtil\.returnNull\b = qx.util.Return.returnNull +\bQxUtil\.returnThis\b = qx.util.Return.returnThis +\bQxUtil\.returnZero\b = qx.util.Return.returnZero +\bQxUtil\.returnNegativeIndex\b = qx.util.Return.returnNegativeIndex + +\bQxUtil\.isValid\b = qx.util.Validation.isValid +\bQxUtil\.isInvalid\b = qx.util.Validation.isInvalid +\bQxUtil\.isValidNumber\b = qx.util.Validation.isValidNumber +\bQxUtil\.isInvalidNumber\b = qx.util.Validation.isInvalidNumber +\bQxUtil\.isValidString\b = qx.util.Validation.isValidString +\bQxUtil\.isInvalidString\b = qx.util.Validation.isInvalidString +\bQxUtil\.isValidArray\b = qx.util.Validation.isValidArray +\bQxUtil\.isInvalidArray\b = qx.util.Validation.isInvalidArray +\bQxUtil\.isValidObject\b = qx.util.Validation.isValidObject +\bQxUtil\.isInvalidObject\b = qx.util.Validation.isInvalidObject +\bQxUtil\.isValidNode\b = qx.util.Validation.isValidNode +\bQxUtil\.isInvalidNode\b = qx.util.Validation.isInvalidNode +\bQxUtil\.isValidElement\b = qx.util.Validation.isValidElement +\bQxUtil\.isInvalidElement\b = qx.util.Validation.isInvalidElement +\bQxUtil\.isValidFunction\b = qx.util.Validation.isValidFunction +\bQxUtil\.isInvalidFunction\b = qx.util.Validation.isInvalidFunction +\bQxUtil\.isValidBoolean\b = qx.util.Validation.isValidBoolean +\bQxUtil\.isInvalidBoolean\b = qx.util.Validation.isInvalidBoolean +\bQxUtil\.isValidStringOrNumber\b = qx.util.Validation.isValidStringOrNumber +\bQxUtil\.isInvalidStringOrNumber\b = qx.util.Validation.isInvalidStringOrNumber + +\bQxUtil\._normalizeUmlautsRegExp\b = qx.util.Normalization._umlautsRegExp +\bQxUtil\._normalizeUmlautsShortData\b = qx.util.Normalization._umlautsShortData +\bQxUtil\._normalizeUmlautsShort\b = qx.util.Normalization._umlautsShort +\bQxUtil\.normalizeUmlautsShort\b = qx.util.Normalization.umlautsShort +\bQxUtil\._normalizeUmlautsLongData\b = qx.util.Normalization._umlautsLongData +\bQxUtil\._normalizeUmlautsLong\b = qx.util.Normalization._umlautsLong +\bQxUtil\.normalizeUmlautsLong\b = qx.util.Normalization.umlautsLong + +\bQxUtil\.isObjectEmpty\b = qx.lang.Object.isEmpty +\bQxUtil\.isObjectMinLength\b = qx.lang.Object.hasMinLength +\bQxUtil\.getObjectLength\b = qx.lang.Object.getLength +\bQxUtil\.convertObjectKeysToArray\b = qx.lang.Object.getKeys +\bQxUtil\.convertObjectKeysToString\b = qx.lang.Object.getKeysAsString +\bQxUtil\.convertObjectValuesToArray\b = qx.lang.Object.getValues +\bQxUtil\.convertArgumentsToArray\b = qx.lang.Array.fromArguments +\bQxUtil\.convertShortHandToArray\b = qx.lang.Array.fromShortHand +\bQxUtil\.mergeObjectWith\b = qx.lang.Object.mergeWith +\bQxUtil\.mergeObjects\b = qx.lang.Object.merge +\bQxUtil\.copyObject\b = qx.lang.Object.copy diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/06-main.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/06-main.dat new file mode 100644 index 0000000000..acbd2a652c --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.6/patches/06-main.dat @@ -0,0 +1,7 @@ +window.application.main\s*\=\s*function\(\)[^\0]*?\{\s* = qx.core.Init.getInstance().defineMain(function() {\n + +\}\;[\n\s]*<\/script> = });</script> + +#this\.getClientWindow\(\)\.getClientDocument\(\) = qx.ui.core.ClientDocument.getInstance() + +#this\.add = qx.ui.core.ClientDocument.getInstance().add
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.7/patch.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.7/patch.py new file mode 100755 index 0000000000..885cafda8d --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/migration/0.7/patch.py @@ -0,0 +1,381 @@ +#!/usr/bin/env python + +import sys, os + +# reconfigure path to import modules from modules subfolder +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), "../../modules")) + +import tree, compiler, comment + + + + + + +def getAssignment(elem): + if elem.parent.type == "right" and elem.parent.parent.type == "assignment": + return elem.parent.parent + + return None + + +def getName(elem): + # find last identifier + last = elem.getLastChild(False, True) + + if last.type == "identifier": + return last.get("name") + + +def getMode(var, classname): + # find last identifier + last = var.getLastChild(False, True) + prev = last.getPreviousSibling(False, True) + + if prev.type == "identifier": + mode = prev.get("name") + + if mode == "Proto": + return "members" + elif mode == "Class": + return "statics" + + combined = [] + length = var.getChildrenLength(True) + pos = length - 1 + for iden in var.children: + if iden.type == "identifier": + combined.append(iden.get("name")) + + # if variable starts with the classname and has one unique identifier afterwards + if ".".join(combined) == classname and pos == 1: + return "statics" + + pos -= 1 + + return None + + +def getNameOfAssignment(elem): + name = None + + if elem.hasChild("left"): + left = elem.getChild("left") + + if left.hasChild("variable"): + name = getName(left.getChild("variable")) + + return name + + +def getModeOfAssignment(elem, classname): + mode = None + + if elem.hasChild("left"): + left = elem.getChild("left") + + if left.hasChild("variable"): + var = left.getChild("variable") + mode = getMode(var, classname) + + return mode + + +def getAndRemovePropertyName(definition): + for keyValue in definition.children: + if keyValue.type == "keyvalue" and keyValue.get("key") == "name": + name = keyValue.getChild("value").getChild("constant").get("value") + keyValue.parent.removeChild(keyValue) + return name + + print " * Could not extract property name!" + return None + + +def createPair(key, value, commentParent=None): + par = tree.Node("keyvalue") + sub = tree.Node("value") + + par.set("key", key) + par.addChild(sub) + sub.addChild(value) + + if commentParent and commentParent.hasChild("commentsBefore"): + par.addChild(commentParent.getChild("commentsBefore")) + + return par + + +def patch(id, node): + if not node.hasChildren(): + return False + + classDefine, className, classMap, settingsMap, propertiesMap, membersMap, staticsMap = createClassDefine(id) + errorCounter = 0 + pos = 0 + + while node.hasChildren() and pos < len(node.children): + child = node.children[pos] + breakBefore = child.get("breakBefore") + pos += 1 + + # Add instance and static methods + if child.type == "assignment": + if child.hasChild("right"): + right = child.getChild("right") + elem = right.getFirstChild(True, True) + + name = getNameOfAssignment(child) + mode = getModeOfAssignment(child, id) + + if mode in [ "members", "statics" ]: + if mode == "members": + pair = createPair(name, elem, child) + + if breakBefore: + pair.set("breakBefore", True) + + membersMap.addChild(pair) + + elif mode == "statics": + # Special Handling of old singleton definition + if name == "getInstance": + pair = createPair("singleton", createConstant("boolean", "true")) + pair.addChild(createBlockComment("singleton")) + + if breakBefore: + pair.set("breakBefore", True) + + classMap.addChild(pair, 1) + + else: + pair = createPair(name, elem, child) + + if breakBefore: + pair.set("breakBefore", True) + + staticsMap.addChild(pair) + + node.removeChild(child) + pos -= 1 + + elif child.type == "call": + oper = child.getChild("operand") + var = oper.getChild("variable") + + if var: + lastIdentifier = var.getLastChild(False, True) + if lastIdentifier.type == "identifier": + name = lastIdentifier.get("name") + params = child.getChild("params") + + if name in [ "addProperty", "changeProperty", "addCachedProperty", "addFastProperty" ]: + definition = params.getFirstChild(False, True) + + if definition.type == "map": + if lastIdentifier.get("name") == "addFastProperty": + definition.addChild(createPair("fast", createConstant("boolean", "true"))) + elif lastIdentifier.get("name") == "addCachedProperty": + definition.addChild(createPair("cached", createConstant("boolean", "true"))) + + name = getAndRemovePropertyName(definition) + pair = createPair(name, definition, child) + + if breakBefore: + pair.set("breakBefore", True) + + propertiesMap.addChild(pair) + + node.removeChild(child) + pos -= 1 + + elif name == "setDefault": + nameNode = params.getChildByPosition(0, True) + valueNode = params.getChildByPosition(1, True) + + name = nameNode.get("value") + + pair = createPair(name, valueNode, child) + + if breakBefore: + pair.set("breakBefore", True) + + settingsMap.addChild(pair) + + node.removeChild(child) + pos -= 1 + + elif name == "defineClass": + if params.getFirstChild(False, True).get("value") != id: + print " - The class seems to have a wrong definition!" + + # 3 params = name, superclass, constructor + # 2 params = name, map + # 1 param = name + + # Move class comment + if child.hasChild("commentsBefore"): + classDefine.addChild(child.getChild("commentsBefore")) + + childrenLength = params.getChildrenLength(True) + + if childrenLength == 2: + statics_new = params.getChildByPosition(1, True, True) + + while statics_new.hasChildren(): + staticsMap.addChild(statics_new.getFirstChild()) + + node.removeChild(child) + pos -= 1 + + elif childrenLength == 3: + ext = params.getChildByPosition(1, True, True) + construct = params.getChildByPosition(2, True, True) + + extendPair = createPair("extend", ext) + constructPair = createPair("construct", construct) + + extendPair.addChild(createBlockComment("superclass")) + constructPair.addChild(createBlockComment("constructor")) + + classMap.addChild(extendPair, 0) + classMap.addChild(constructPair, 1) + + node.removeChild(child) + pos -= 1 + + elif name == "define": + print " - Class is already up-to-date." + return False + + # Post-Check + if child.parent == node: + # print " - Could not move element %s at line %s" % (child.type, child.get("line")) + errorCounter += 1 + + + # Remove empty maps + if settingsMap.getChildrenLength() == 0: + keyvalue = settingsMap.parent.parent + classMap.removeChild(keyvalue) + + if propertiesMap.getChildrenLength() == 0: + keyvalue = propertiesMap.parent.parent + classMap.removeChild(keyvalue) + + if membersMap.getChildrenLength() == 0: + keyvalue = membersMap.parent.parent + classMap.removeChild(keyvalue) + + if staticsMap.getChildrenLength() == 0: + keyvalue = staticsMap.parent.parent + classMap.removeChild(keyvalue) + + # Add new class definition + node.addChild(classDefine, 0) + + + + + if errorCounter > 0: + print " - Could not convert %s elements." % errorCounter + + # Debug + # print compiler.compile(node) + # print tree.nodeToXmlString(node) + + # Return Modification + return True + + +def createConstant(type, value): + constant = tree.Node("constant") + constant.set("constantType", type) + constant.set("value", value) + + if type == "string": + constant.set("detail", "doublequotes") + + return constant + + + +def createVariable(l): + var = tree.Node("variable") + + for name in l: + iden = tree.Node("identifier") + iden.set("name", name) + var.addChild(iden) + + return var + +def createClassDefineCore(id): + call = tree.Node("call") + oper = tree.Node("operand") + para = tree.Node("params") + con = createConstant("string", id) + args = tree.Node("map") + + call.addChild(oper) + call.addChild(para) + + oper.addChild(createVariable(["qx", "Clazz", "define"])) + + para.addChild(con) + para.addChild(args) + + return call, con, args + + +def createClassDefine(id): + classDefine, className, classMap = createClassDefineCore(id) + + settingsMap = tree.Node("map") + settingsPair = createPair("settings", settingsMap) + + propertiesMap = tree.Node("map") + propertiesPair = createPair("properties", propertiesMap) + + membersMap = tree.Node("map") + membersPair = createPair("members", membersMap) + + staticsMap = tree.Node("map") + staticsPair = createPair("statics", staticsMap) + + settingsPair.addChild(createBlockComment("settings")) + propertiesPair.addChild(createBlockComment("properties")) + membersPair.addChild(createBlockComment("members")) + staticsPair.addChild(createBlockComment("statics")) + + classMap.addChild(settingsPair) + classMap.addChild(propertiesPair) + classMap.addChild(membersPair) + classMap.addChild(staticsPair) + + return classDefine, className, classMap, settingsMap, propertiesMap, membersMap, staticsMap + + +def createBlockComment(txt): + l = "*****************************************************************************" + + s = "" + s += "/*\n" + s += "%s\n" % l + s += "**** %s %s\n" % (txt.upper(), "*" * (len(l) - len(txt) - 6)) + s += "%s\n" % l + s += "*/" + + bef = tree.Node("commentsBefore") + com = tree.Node("comment") + + bef.addChild(com) + + com.set("multiline", True) + com.set("connection", "before") + com.set("text", s) + com.set("detail", comment.getFormat(s)) + + return bef + + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/ElementPath.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/ElementPath.py new file mode 100644 index 0000000000..558b560aff --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/ElementPath.py @@ -0,0 +1,196 @@ +# +# ElementTree +# $Id: ElementPath.py 1858 2004-06-17 21:31:41Z Fredrik $ +# +# limited xpath support for element trees +# +# history: +# 2003-05-23 fl created +# 2003-05-28 fl added support for // etc +# 2003-08-27 fl fixed parsing of periods in element names +# +# Copyright (c) 2003-2004 by Fredrik Lundh. All rights reserved. +# +# fredrik@pythonware.com +# http://www.pythonware.com +# +# -------------------------------------------------------------------- +# The ElementTree toolkit is +# +# Copyright (c) 1999-2004 by Fredrik Lundh +# +# By obtaining, using, and/or copying this software and/or its +# associated documentation, you agree that you have read, understood, +# and will comply with the following terms and conditions: +# +# Permission to use, copy, modify, and distribute this software and +# its associated documentation for any purpose and without fee is +# hereby granted, provided that the above copyright notice appears in +# all copies, and that both that copyright notice and this permission +# notice appear in supporting documentation, and that the name of +# Secret Labs AB or the author not be used in advertising or publicity +# pertaining to distribution of the software without specific, written +# prior permission. +# +# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD +# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- +# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR +# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +# OF THIS SOFTWARE. +# -------------------------------------------------------------------- + +## +# Implementation module for XPath support. There's usually no reason +# to import this module directly; the <b>ElementTree</b> does this for +# you, if needed. +## + +import re + +xpath_tokenizer = re.compile( + "(::|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/:\[\]\(\)@=\s]+)|\s+" + ).findall + +class xpath_descendant_or_self: + pass + +## +# Wrapper for a compiled XPath. + +class Path: + + ## + # Create an Path instance from an XPath expression. + + def __init__(self, path): + tokens = xpath_tokenizer(path) + # the current version supports 'path/path'-style expressions only + self.path = [] + self.tag = None + if tokens and tokens[0][0] == "/": + raise SyntaxError("cannot use absolute path on element") + while tokens: + op, tag = tokens.pop(0) + if tag or op == "*": + self.path.append(tag or op) + elif op == ".": + pass + elif op == "/": + self.path.append(xpath_descendant_or_self()) + continue + else: + raise SyntaxError("unsupported path syntax (%s)" % op) + if tokens: + op, tag = tokens.pop(0) + if op != "/": + raise SyntaxError( + "expected path separator (%s)" % (op or tag) + ) + if self.path and isinstance(self.path[-1], xpath_descendant_or_self): + raise SyntaxError("path cannot end with //") + if len(self.path) == 1 and isinstance(self.path[0], type("")): + self.tag = self.path[0] + + ## + # Find first matching object. + + def find(self, element): + tag = self.tag + if tag is None: + nodeset = self.findall(element) + if not nodeset: + return None + return nodeset[0] + for elem in element: + if elem.tag == tag: + return elem + return None + + ## + # Find text for first matching object. + + def findtext(self, element, default=None): + tag = self.tag + if tag is None: + nodeset = self.findall(element) + if not nodeset: + return default + return nodeset[0].text or "" + for elem in element: + if elem.tag == tag: + return elem.text or "" + return default + + ## + # Find all matching objects. + + def findall(self, element): + nodeset = [element] + index = 0 + while 1: + try: + path = self.path[index] + index = index + 1 + except IndexError: + return nodeset + set = [] + if isinstance(path, xpath_descendant_or_self): + try: + tag = self.path[index] + if not isinstance(tag, type("")): + tag = None + else: + index = index + 1 + except IndexError: + tag = None # invalid path + for node in nodeset: + new = list(node.getiterator(tag)) + if new and new[0] is node: + set.extend(new[1:]) + else: + set.extend(new) + else: + for node in nodeset: + for node in node: + if path == "*" or node.tag == path: + set.append(node) + if not set: + return [] + nodeset = set + +_cache = {} + +## +# (Internal) Compile path. + +def _compile(path): + p = _cache.get(path) + if p is not None: + return p + p = Path(path) + if len(_cache) >= 100: + _cache.clear() + _cache[path] = p + return p + +## +# Find first matching object. + +def find(element, path): + return _compile(path).find(element) + +## +# Find text for first matching object. + +def findtext(element, path, default=None): + return _compile(path).findtext(element, default) + +## +# Find all matching objects. + +def findall(element, path): + return _compile(path).findall(element) + diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/ElementTree.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/ElementTree.py new file mode 100644 index 0000000000..98d0208792 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/ElementTree.py @@ -0,0 +1,1254 @@ +# +# ElementTree +# $Id: ElementTree.py 2326 2005-03-17 07:45:21Z fredrik $ +# +# light-weight XML support for Python 1.5.2 and later. +# +# history: +# 2001-10-20 fl created (from various sources) +# 2001-11-01 fl return root from parse method +# 2002-02-16 fl sort attributes in lexical order +# 2002-04-06 fl TreeBuilder refactoring, added PythonDoc markup +# 2002-05-01 fl finished TreeBuilder refactoring +# 2002-07-14 fl added basic namespace support to ElementTree.write +# 2002-07-25 fl added QName attribute support +# 2002-10-20 fl fixed encoding in write +# 2002-11-24 fl changed default encoding to ascii; fixed attribute encoding +# 2002-11-27 fl accept file objects or file names for parse/write +# 2002-12-04 fl moved XMLTreeBuilder back to this module +# 2003-01-11 fl fixed entity encoding glitch for us-ascii +# 2003-02-13 fl added XML literal factory +# 2003-02-21 fl added ProcessingInstruction/PI factory +# 2003-05-11 fl added tostring/fromstring helpers +# 2003-05-26 fl added ElementPath support +# 2003-07-05 fl added makeelement factory method +# 2003-07-28 fl added more well-known namespace prefixes +# 2003-08-15 fl fixed typo in ElementTree.findtext (Thomas Dartsch) +# 2003-09-04 fl fall back on emulator if ElementPath is not installed +# 2003-10-31 fl markup updates +# 2003-11-15 fl fixed nested namespace bug +# 2004-03-28 fl added XMLID helper +# 2004-06-02 fl added default support to findtext +# 2004-06-08 fl fixed encoding of non-ascii element/attribute names +# 2004-08-23 fl take advantage of post-2.1 expat features +# 2005-02-01 fl added iterparse implementation +# 2005-03-02 fl fixed iterparse support for pre-2.2 versions +# +# Copyright (c) 1999-2005 by Fredrik Lundh. All rights reserved. +# +# fredrik@pythonware.com +# http://www.pythonware.com +# +# -------------------------------------------------------------------- +# The ElementTree toolkit is +# +# Copyright (c) 1999-2005 by Fredrik Lundh +# +# By obtaining, using, and/or copying this software and/or its +# associated documentation, you agree that you have read, understood, +# and will comply with the following terms and conditions: +# +# Permission to use, copy, modify, and distribute this software and +# its associated documentation for any purpose and without fee is +# hereby granted, provided that the above copyright notice appears in +# all copies, and that both that copyright notice and this permission +# notice appear in supporting documentation, and that the name of +# Secret Labs AB or the author not be used in advertising or publicity +# pertaining to distribution of the software without specific, written +# prior permission. +# +# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD +# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- +# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR +# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +# OF THIS SOFTWARE. +# -------------------------------------------------------------------- + +__all__ = [ + # public symbols + "Comment", + "dump", + "Element", "ElementTree", + "fromstring", + "iselement", "iterparse", + "parse", + "PI", "ProcessingInstruction", + "QName", + "SubElement", + "tostring", + "TreeBuilder", + "VERSION", "XML", + "XMLTreeBuilder", + ] + +## +# The <b>Element</b> type is a flexible container object, designed to +# store hierarchical data structures in memory. The type can be +# described as a cross between a list and a dictionary. +# <p> +# Each element has a number of properties associated with it: +# <ul> +# <li>a <i>tag</i>. This is a string identifying what kind of data +# this element represents (the element type, in other words).</li> +# <li>a number of <i>attributes</i>, stored in a Python dictionary.</li> +# <li>a <i>text</i> string.</li> +# <li>an optional <i>tail</i> string.</li> +# <li>a number of <i>child elements</i>, stored in a Python sequence</li> +# </ul> +# +# To create an element instance, use the {@link #Element} or {@link +# #SubElement} factory functions. +# <p> +# The {@link #ElementTree} class can be used to wrap an element +# structure, and convert it from and to XML. +## + +import string, sys, re + +class _SimpleElementPath: + # emulate pre-1.2 find/findtext/findall behaviour + def find(self, element, tag): + for elem in element: + if elem.tag == tag: + return elem + return None + def findtext(self, element, tag, default=None): + for elem in element: + if elem.tag == tag: + return elem.text or "" + return default + def findall(self, element, tag): + if tag[:3] == ".//": + return element.getiterator(tag[3:]) + result = [] + for elem in element: + if elem.tag == tag: + result.append(elem) + return result + +try: + import ElementPath +except ImportError: + # FIXME: issue warning in this case? + ElementPath = _SimpleElementPath() + +# TODO: add support for custom namespace resolvers/default namespaces +# TODO: add improved support for incremental parsing + +VERSION = "1.2.6" + +## +# Internal element class. This class defines the Element interface, +# and provides a reference implementation of this interface. +# <p> +# You should not create instances of this class directly. Use the +# appropriate factory functions instead, such as {@link #Element} +# and {@link #SubElement}. +# +# @see Element +# @see SubElement +# @see Comment +# @see ProcessingInstruction + +class _ElementInterface: + # <tag attrib>text<child/>...</tag>tail + + ## + # (Attribute) Element tag. + + tag = None + + ## + # (Attribute) Element attribute dictionary. Where possible, use + # {@link #_ElementInterface.get}, + # {@link #_ElementInterface.set}, + # {@link #_ElementInterface.keys}, and + # {@link #_ElementInterface.items} to access + # element attributes. + + attrib = None + + ## + # (Attribute) Text before first subelement. This is either a + # string or the value None, if there was no text. + + text = None + + ## + # (Attribute) Text after this element's end tag, but before the + # next sibling element's start tag. This is either a string or + # the value None, if there was no text. + + tail = None # text after end tag, if any + + def __init__(self, tag, attrib): + self.tag = tag + self.attrib = attrib + self._children = [] + + def __repr__(self): + return "<Element %s at %x>" % (self.tag, id(self)) + + ## + # Creates a new element object of the same type as this element. + # + # @param tag Element tag. + # @param attrib Element attributes, given as a dictionary. + # @return A new element instance. + + def makeelement(self, tag, attrib): + return Element(tag, attrib) + + ## + # Returns the number of subelements. + # + # @return The number of subelements. + + def __len__(self): + return len(self._children) + + ## + # Returns the given subelement. + # + # @param index What subelement to return. + # @return The given subelement. + # @exception IndexError If the given element does not exist. + + def __getitem__(self, index): + return self._children[index] + + ## + # Replaces the given subelement. + # + # @param index What subelement to replace. + # @param element The new element value. + # @exception IndexError If the given element does not exist. + # @exception AssertionError If element is not a valid object. + + def __setitem__(self, index, element): + assert iselement(element) + self._children[index] = element + + ## + # Deletes the given subelement. + # + # @param index What subelement to delete. + # @exception IndexError If the given element does not exist. + + def __delitem__(self, index): + del self._children[index] + + ## + # Returns a list containing subelements in the given range. + # + # @param start The first subelement to return. + # @param stop The first subelement that shouldn't be returned. + # @return A sequence object containing subelements. + + def __getslice__(self, start, stop): + return self._children[start:stop] + + ## + # Replaces a number of subelements with elements from a sequence. + # + # @param start The first subelement to replace. + # @param stop The first subelement that shouldn't be replaced. + # @param elements A sequence object with zero or more elements. + # @exception AssertionError If a sequence member is not a valid object. + + def __setslice__(self, start, stop, elements): + for element in elements: + assert iselement(element) + self._children[start:stop] = list(elements) + + ## + # Deletes a number of subelements. + # + # @param start The first subelement to delete. + # @param stop The first subelement to leave in there. + + def __delslice__(self, start, stop): + del self._children[start:stop] + + ## + # Adds a subelement to the end of this element. + # + # @param element The element to add. + # @exception AssertionError If a sequence member is not a valid object. + + def append(self, element): + assert iselement(element) + self._children.append(element) + + ## + # Inserts a subelement at the given position in this element. + # + # @param index Where to insert the new subelement. + # @exception AssertionError If the element is not a valid object. + + def insert(self, index, element): + assert iselement(element) + self._children.insert(index, element) + + ## + # Removes a matching subelement. Unlike the <b>find</b> methods, + # this method compares elements based on identity, not on tag + # value or contents. + # + # @param element What element to remove. + # @exception ValueError If a matching element could not be found. + # @exception AssertionError If the element is not a valid object. + + def remove(self, element): + assert iselement(element) + self._children.remove(element) + + ## + # Returns all subelements. The elements are returned in document + # order. + # + # @return A list of subelements. + # @defreturn list of Element instances + + def getchildren(self): + return self._children + + ## + # Finds the first matching subelement, by tag name or path. + # + # @param path What element to look for. + # @return The first matching element, or None if no element was found. + # @defreturn Element or None + + def find(self, path): + return ElementPath.find(self, path) + + ## + # Finds text for the first matching subelement, by tag name or path. + # + # @param path What element to look for. + # @param default What to return if the element was not found. + # @return The text content of the first matching element, or the + # default value no element was found. Note that if the element + # has is found, but has no text content, this method returns an + # empty string. + # @defreturn string + + def findtext(self, path, default=None): + return ElementPath.findtext(self, path, default) + + ## + # Finds all matching subelements, by tag name or path. + # + # @param path What element to look for. + # @return A list or iterator containing all matching elements, + # in document order. + # @defreturn list of Element instances + + def findall(self, path): + return ElementPath.findall(self, path) + + ## + # Resets an element. This function removes all subelements, clears + # all attributes, and sets the text and tail attributes to None. + + def clear(self): + self.attrib.clear() + self._children = [] + self.text = self.tail = None + + ## + # Gets an element attribute. + # + # @param key What attribute to look for. + # @param default What to return if the attribute was not found. + # @return The attribute value, or the default value, if the + # attribute was not found. + # @defreturn string or None + + def get(self, key, default=None): + return self.attrib.get(key, default) + + ## + # Sets an element attribute. + # + # @param key What attribute to set. + # @param value The attribute value. + + def set(self, key, value): + self.attrib[key] = value + + ## + # Gets a list of attribute names. The names are returned in an + # arbitrary order (just like for an ordinary Python dictionary). + # + # @return A list of element attribute names. + # @defreturn list of strings + + def keys(self): + return self.attrib.keys() + + ## + # Gets element attributes, as a sequence. The attributes are + # returned in an arbitrary order. + # + # @return A list of (name, value) tuples for all attributes. + # @defreturn list of (string, string) tuples + + def items(self): + return self.attrib.items() + + ## + # Creates a tree iterator. The iterator loops over this element + # and all subelements, in document order, and returns all elements + # with a matching tag. + # <p> + # If the tree structure is modified during iteration, the result + # is undefined. + # + # @param tag What tags to look for (default is to return all elements). + # @return A list or iterator containing all the matching elements. + # @defreturn list or iterator + + def getiterator(self, tag=None): + nodes = [] + if tag == "*": + tag = None + if tag is None or self.tag == tag: + nodes.append(self) + for node in self._children: + nodes.extend(node.getiterator(tag)) + return nodes + +# compatibility +_Element = _ElementInterface + +## +# Element factory. This function returns an object implementing the +# standard Element interface. The exact class or type of that object +# is implementation dependent, but it will always be compatible with +# the {@link #_ElementInterface} class in this module. +# <p> +# The element name, attribute names, and attribute values can be +# either 8-bit ASCII strings or Unicode strings. +# +# @param tag The element name. +# @param attrib An optional dictionary, containing element attributes. +# @param **extra Additional attributes, given as keyword arguments. +# @return An element instance. +# @defreturn Element + +def Element(tag, attrib={}, **extra): + attrib = attrib.copy() + attrib.update(extra) + return _ElementInterface(tag, attrib) + +## +# Subelement factory. This function creates an element instance, and +# appends it to an existing element. +# <p> +# The element name, attribute names, and attribute values can be +# either 8-bit ASCII strings or Unicode strings. +# +# @param parent The parent element. +# @param tag The subelement name. +# @param attrib An optional dictionary, containing element attributes. +# @param **extra Additional attributes, given as keyword arguments. +# @return An element instance. +# @defreturn Element + +def SubElement(parent, tag, attrib={}, **extra): + attrib = attrib.copy() + attrib.update(extra) + element = parent.makeelement(tag, attrib) + parent.append(element) + return element + +## +# Comment element factory. This factory function creates a special +# element that will be serialized as an XML comment. +# <p> +# The comment string can be either an 8-bit ASCII string or a Unicode +# string. +# +# @param text A string containing the comment string. +# @return An element instance, representing a comment. +# @defreturn Element + +def Comment(text=None): + element = Element(Comment) + element.text = text + return element + +## +# PI element factory. This factory function creates a special element +# that will be serialized as an XML processing instruction. +# +# @param target A string containing the PI target. +# @param text A string containing the PI contents, if any. +# @return An element instance, representing a PI. +# @defreturn Element + +def ProcessingInstruction(target, text=None): + element = Element(ProcessingInstruction) + element.text = target + if text: + element.text = element.text + " " + text + return element + +PI = ProcessingInstruction + +## +# QName wrapper. This can be used to wrap a QName attribute value, in +# order to get proper namespace handling on output. +# +# @param text A string containing the QName value, in the form {uri}local, +# or, if the tag argument is given, the URI part of a QName. +# @param tag Optional tag. If given, the first argument is interpreted as +# an URI, and this argument is interpreted as a local name. +# @return An opaque object, representing the QName. + +class QName: + def __init__(self, text_or_uri, tag=None): + if tag: + text_or_uri = "{%s}%s" % (text_or_uri, tag) + self.text = text_or_uri + def __str__(self): + return self.text + def __hash__(self): + return hash(self.text) + def __cmp__(self, other): + if isinstance(other, QName): + return cmp(self.text, other.text) + return cmp(self.text, other) + +## +# ElementTree wrapper class. This class represents an entire element +# hierarchy, and adds some extra support for serialization to and from +# standard XML. +# +# @param element Optional root element. +# @keyparam file Optional file handle or name. If given, the +# tree is initialized with the contents of this XML file. + +class ElementTree: + + def __init__(self, element=None, file=None): + assert element is None or iselement(element) + self._root = element # first node + if file: + self.parse(file) + + ## + # Gets the root element for this tree. + # + # @return An element instance. + # @defreturn Element + + def getroot(self): + return self._root + + ## + # Replaces the root element for this tree. This discards the + # current contents of the tree, and replaces it with the given + # element. Use with care. + # + # @param element An element instance. + + def _setroot(self, element): + assert iselement(element) + self._root = element + + ## + # Loads an external XML document into this element tree. + # + # @param source A file name or file object. + # @param parser An optional parser instance. If not given, the + # standard {@link XMLTreeBuilder} parser is used. + # @return The document root element. + # @defreturn Element + + def parse(self, source, parser=None): + if not hasattr(source, "read"): + source = open(source, "rb") + if not parser: + parser = XMLTreeBuilder() + while 1: + data = source.read(32768) + if not data: + break + parser.feed(data) + self._root = parser.close() + return self._root + + ## + # Creates a tree iterator for the root element. The iterator loops + # over all elements in this tree, in document order. + # + # @param tag What tags to look for (default is to return all elements) + # @return An iterator. + # @defreturn iterator + + def getiterator(self, tag=None): + assert self._root is not None + return self._root.getiterator(tag) + + ## + # Finds the first toplevel element with given tag. + # Same as getroot().find(path). + # + # @param path What element to look for. + # @return The first matching element, or None if no element was found. + # @defreturn Element or None + + def find(self, path): + assert self._root is not None + if path[:1] == "/": + path = "." + path + return self._root.find(path) + + ## + # Finds the element text for the first toplevel element with given + # tag. Same as getroot().findtext(path). + # + # @param path What toplevel element to look for. + # @param default What to return if the element was not found. + # @return The text content of the first matching element, or the + # default value no element was found. Note that if the element + # has is found, but has no text content, this method returns an + # empty string. + # @defreturn string + + def findtext(self, path, default=None): + assert self._root is not None + if path[:1] == "/": + path = "." + path + return self._root.findtext(path, default) + + ## + # Finds all toplevel elements with the given tag. + # Same as getroot().findall(path). + # + # @param path What element to look for. + # @return A list or iterator containing all matching elements, + # in document order. + # @defreturn list of Element instances + + def findall(self, path): + assert self._root is not None + if path[:1] == "/": + path = "." + path + return self._root.findall(path) + + ## + # Writes the element tree to a file, as XML. + # + # @param file A file name, or a file object opened for writing. + # @param encoding Optional output encoding (default is US-ASCII). + + def write(self, file, encoding="us-ascii"): + assert self._root is not None + if not hasattr(file, "write"): + file = open(file, "wb") + if not encoding: + encoding = "us-ascii" + elif encoding != "utf-8" and encoding != "us-ascii": + file.write("<?xml version='1.0' encoding='%s'?>\n" % encoding) + self._write(file, self._root, encoding, {}) + + def _write(self, file, node, encoding, namespaces): + # write XML to file + tag = node.tag + if tag is Comment: + file.write("<!-- %s -->" % _escape_cdata(node.text, encoding)) + elif tag is ProcessingInstruction: + file.write("<?%s?>" % _escape_cdata(node.text, encoding)) + else: + items = node.items() + xmlns_items = [] # new namespaces in this scope + try: + if isinstance(tag, QName) or tag[:1] == "{": + tag, xmlns = fixtag(tag, namespaces) + if xmlns: xmlns_items.append(xmlns) + except TypeError: + _raise_serialization_error(tag) + file.write("<" + _encode(tag, encoding)) + if items or xmlns_items: + items.sort() # lexical order + for k, v in items: + try: + if isinstance(k, QName) or k[:1] == "{": + k, xmlns = fixtag(k, namespaces) + if xmlns: xmlns_items.append(xmlns) + except TypeError: + _raise_serialization_error(k) + try: + if isinstance(v, QName): + v, xmlns = fixtag(v, namespaces) + if xmlns: xmlns_items.append(xmlns) + except TypeError: + _raise_serialization_error(v) + file.write(" %s=\"%s\"" % (_encode(k, encoding), + _escape_attrib(v, encoding))) + for k, v in xmlns_items: + file.write(" %s=\"%s\"" % (_encode(k, encoding), + _escape_attrib(v, encoding))) + if node.text or len(node): + file.write(">") + if node.text: + file.write(_escape_cdata(node.text, encoding)) + for n in node: + self._write(file, n, encoding, namespaces) + file.write("</" + _encode(tag, encoding) + ">") + else: + file.write(" />") + for k, v in xmlns_items: + del namespaces[v] + if node.tail: + file.write(_escape_cdata(node.tail, encoding)) + +# -------------------------------------------------------------------- +# helpers + +## +# Checks if an object appears to be a valid element object. +# +# @param An element instance. +# @return A true value if this is an element object. +# @defreturn flag + +def iselement(element): + # FIXME: not sure about this; might be a better idea to look + # for tag/attrib/text attributes + return isinstance(element, _ElementInterface) or hasattr(element, "tag") + +## +# Writes an element tree or element structure to sys.stdout. This +# function should be used for debugging only. +# <p> +# The exact output format is implementation dependent. In this +# version, it's written as an ordinary XML file. +# +# @param elem An element tree or an individual element. + +def dump(elem): + # debugging + if not isinstance(elem, ElementTree): + elem = ElementTree(elem) + elem.write(sys.stdout) + tail = elem.getroot().tail + if not tail or tail[-1] != "\n": + sys.stdout.write("\n") + +def _encode(s, encoding): + try: + return s.encode(encoding) + except AttributeError: + return s # 1.5.2: assume the string uses the right encoding + +if sys.version[:3] == "1.5": + _escape = re.compile(r"[&<>\"\x80-\xff]+") # 1.5.2 +else: + _escape = re.compile(eval(r'u"[&<>\"\u0080-\uffff]+"')) + +_escape_map = { + "&": "&", + "<": "<", + ">": ">", + '"': """, +} + +_namespace_map = { + # "well-known" namespace prefixes + "http://www.w3.org/XML/1998/namespace": "xml", + "http://www.w3.org/1999/xhtml": "html", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", + "http://schemas.xmlsoap.org/wsdl/": "wsdl", +} + +def _raise_serialization_error(text): + raise TypeError( + "cannot serialize %r (type %s)" % (text, type(text).__name__) + ) + +def _encode_entity(text, pattern=_escape): + # map reserved and non-ascii characters to numerical entities + def escape_entities(m, map=_escape_map): + out = [] + append = out.append + for char in m.group(): + text = map.get(char) + if text is None: + text = "&#%d;" % ord(char) + append(text) + return string.join(out, "") + try: + return _encode(pattern.sub(escape_entities, text), "ascii") + except TypeError: + _raise_serialization_error(text) + +# +# the following functions assume an ascii-compatible encoding +# (or "utf-16") + +def _escape_cdata(text, encoding=None, replace=string.replace): + # escape character data + try: + if encoding: + try: + text = _encode(text, encoding) + except UnicodeError: + return _encode_entity(text) + text = replace(text, "&", "&") + text = replace(text, "<", "<") + text = replace(text, ">", ">") + return text + except (TypeError, AttributeError): + _raise_serialization_error(text) + +def _escape_attrib(text, encoding=None, replace=string.replace): + # escape attribute value + try: + if encoding: + try: + text = _encode(text, encoding) + except UnicodeError: + return _encode_entity(text) + text = replace(text, "&", "&") + text = replace(text, "'", "'") # FIXME: overkill + text = replace(text, "\"", """) + text = replace(text, "<", "<") + text = replace(text, ">", ">") + return text + except (TypeError, AttributeError): + _raise_serialization_error(text) + +def fixtag(tag, namespaces): + # given a decorated tag (of the form {uri}tag), return prefixed + # tag and namespace declaration, if any + if isinstance(tag, QName): + tag = tag.text + namespace_uri, tag = string.split(tag[1:], "}", 1) + prefix = namespaces.get(namespace_uri) + if prefix is None: + prefix = _namespace_map.get(namespace_uri) + if prefix is None: + prefix = "ns%d" % len(namespaces) + namespaces[namespace_uri] = prefix + if prefix == "xml": + xmlns = None + else: + xmlns = ("xmlns:%s" % prefix, namespace_uri) + else: + xmlns = None + return "%s:%s" % (prefix, tag), xmlns + +## +# Parses an XML document into an element tree. +# +# @param source A filename or file object containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLTreeBuilder} parser is used. +# @return An ElementTree instance + +def parse(source, parser=None): + tree = ElementTree() + tree.parse(source, parser) + return tree + +## +# Parses an XML document into an element tree incrementally, and reports +# what's going on to the user. +# +# @param source A filename or file object containing XML data. +# @param events A list of events to report back. If omitted, only "end" +# events are reported. +# @return A (event, elem) iterator. + +class iterparse: + + def __init__(self, source, events=None): + if not hasattr(source, "read"): + source = open(source, "rb") + self._file = source + self._events = [] + self._index = 0 + self.root = self._root = None + self._parser = XMLTreeBuilder() + # wire up the parser for event reporting + parser = self._parser._parser + append = self._events.append + if events is None: + events = ["end"] + for event in events: + if event == "start": + try: + parser.ordered_attributes = 1 + parser.specified_attributes = 1 + def handler(tag, attrib_in, event=event, append=append, + start=self._parser._start_list): + append((event, start(tag, attrib_in))) + parser.StartElementHandler = handler + except AttributeError: + def handler(tag, attrib_in, event=event, append=append, + start=self._parser._start): + append((event, start(tag, attrib_in))) + parser.StartElementHandler = handler + elif event == "end": + def handler(tag, event=event, append=append, + end=self._parser._end): + append((event, end(tag))) + parser.EndElementHandler = handler + elif event == "start-ns": + def handler(prefix, uri, event=event, append=append): + try: + uri = _encode(uri, "ascii") + except UnicodeError: + pass + append((event, (prefix or "", uri))) + parser.StartNamespaceDeclHandler = handler + elif event == "end-ns": + def handler(prefix, event=event, append=append): + append((event, None)) + parser.EndNamespaceDeclHandler = handler + + def next(self): + while 1: + try: + item = self._events[self._index] + except IndexError: + if self._parser is None: + self.root = self._root + try: + raise StopIteration + except NameError: + raise IndexError + # load event buffer + del self._events[:] + self._index = 0 + data = self._file.read(16384) + if data: + self._parser.feed(data) + else: + self._root = self._parser.close() + self._parser = None + else: + self._index = self._index + 1 + return item + + try: + iter + def __iter__(self): + return self + except NameError: + def __getitem__(self, index): + return self.next() + +## +# Parses an XML document from a string constant. This function can +# be used to embed "XML literals" in Python code. +# +# @param source A string containing XML data. +# @return An Element instance. +# @defreturn Element + +def XML(text): + parser = XMLTreeBuilder() + parser.feed(text) + return parser.close() + +## +# Parses an XML document from a string constant, and also returns +# a dictionary which maps from element id:s to elements. +# +# @param source A string containing XML data. +# @return A tuple containing an Element instance and a dictionary. +# @defreturn (Element, dictionary) + +def XMLID(text): + parser = XMLTreeBuilder() + parser.feed(text) + tree = parser.close() + ids = {} + for elem in tree.getiterator(): + id = elem.get("id") + if id: + ids[id] = elem + return tree, ids + +## +# Parses an XML document from a string constant. Same as {@link #XML}. +# +# @def fromstring(text) +# @param source A string containing XML data. +# @return An Element instance. +# @defreturn Element + +fromstring = XML + +## +# Generates a string representation of an XML element, including all +# subelements. +# +# @param element An Element instance. +# @return An encoded string containing the XML data. +# @defreturn string + +def tostring(element, encoding=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding) + return string.join(data, "") + +## +# Generic element structure builder. This builder converts a sequence +# of {@link #TreeBuilder.start}, {@link #TreeBuilder.data}, and {@link +# #TreeBuilder.end} method calls to a well-formed element structure. +# <p> +# You can use this class to build an element structure using a custom XML +# parser, or a parser for some other XML-like format. +# +# @param element_factory Optional element factory. This factory +# is called to create new Element instances, as necessary. + +class TreeBuilder: + + def __init__(self, element_factory=None): + self._data = [] # data collector + self._elem = [] # element stack + self._last = None # last element + self._tail = None # true if we're after an end tag + if element_factory is None: + element_factory = _ElementInterface + self._factory = element_factory + + ## + # Flushes the parser buffers, and returns the toplevel documen + # element. + # + # @return An Element instance. + # @defreturn Element + + def close(self): + assert len(self._elem) == 0, "missing end tags" + assert self._last != None, "missing toplevel element" + return self._last + + def _flush(self): + if self._data: + if self._last is not None: + text = string.join(self._data, "") + if self._tail: + assert self._last.tail is None, "internal error (tail)" + self._last.tail = text + else: + assert self._last.text is None, "internal error (text)" + self._last.text = text + self._data = [] + + ## + # Adds text to the current element. + # + # @param data A string. This should be either an 8-bit string + # containing ASCII text, or a Unicode string. + + def data(self, data): + self._data.append(data) + + ## + # Opens a new element. + # + # @param tag The element name. + # @param attrib A dictionary containing element attributes. + # @return The opened element. + # @defreturn Element + + def start(self, tag, attrs): + self._flush() + self._last = elem = self._factory(tag, attrs) + if self._elem: + self._elem[-1].append(elem) + self._elem.append(elem) + self._tail = 0 + return elem + + ## + # Closes the current element. + # + # @param tag The element name. + # @return The closed element. + # @defreturn Element + + def end(self, tag): + self._flush() + self._last = self._elem.pop() + assert self._last.tag == tag,\ + "end tag mismatch (expected %s, got %s)" % ( + self._last.tag, tag) + self._tail = 1 + return self._last + +## +# Element structure builder for XML source data, based on the +# <b>expat</b> parser. +# +# @keyparam target Target object. If omitted, the builder uses an +# instance of the standard {@link #TreeBuilder} class. +# @keyparam html Predefine HTML entities. This flag is not supported +# by the current implementation. +# @see #ElementTree +# @see #TreeBuilder + +class XMLTreeBuilder: + + def __init__(self, html=0, target=None): + try: + from xml.parsers import expat + except ImportError: + raise ImportError( + "No module named expat; use SimpleXMLTreeBuilder instead" + ) + self._parser = parser = expat.ParserCreate(None, "}") + if target is None: + target = TreeBuilder() + self._target = target + self._names = {} # name memo cache + # callbacks + parser.DefaultHandlerExpand = self._default + parser.StartElementHandler = self._start + parser.EndElementHandler = self._end + parser.CharacterDataHandler = self._data + # let expat do the buffering, if supported + try: + self._parser.buffer_text = 1 + except AttributeError: + pass + # use new-style attribute handling, if supported + try: + self._parser.ordered_attributes = 1 + self._parser.specified_attributes = 1 + parser.StartElementHandler = self._start_list + except AttributeError: + pass + encoding = None + if not parser.returns_unicode: + encoding = "utf-8" + # target.xml(encoding, None) + self._doctype = None + self.entity = {} + + def _fixtext(self, text): + # convert text string to ascii, if possible + try: + return _encode(text, "ascii") + except UnicodeError: + return text + + def _fixname(self, key): + # expand qname, and convert name string to ascii, if possible + try: + name = self._names[key] + except KeyError: + name = key + if "}" in name: + name = "{" + name + self._names[key] = name = self._fixtext(name) + return name + + def _start(self, tag, attrib_in): + fixname = self._fixname + tag = fixname(tag) + attrib = {} + for key, value in attrib_in.items(): + attrib[fixname(key)] = self._fixtext(value) + return self._target.start(tag, attrib) + + def _start_list(self, tag, attrib_in): + fixname = self._fixname + tag = fixname(tag) + attrib = {} + if attrib_in: + for i in range(0, len(attrib_in), 2): + attrib[fixname(attrib_in[i])] = self._fixtext(attrib_in[i+1]) + return self._target.start(tag, attrib) + + def _data(self, text): + return self._target.data(self._fixtext(text)) + + def _end(self, tag): + return self._target.end(self._fixname(tag)) + + def _default(self, text): + prefix = text[:1] + if prefix == "&": + # deal with undefined entities + try: + self._target.data(self.entity[text[1:-1]]) + except KeyError: + from xml.parsers import expat + raise expat.error( + "undefined entity %s: line %d, column %d" % + (text, self._parser.ErrorLineNumber, + self._parser.ErrorColumnNumber) + ) + elif prefix == "<" and text[:9] == "<!DOCTYPE": + self._doctype = [] # inside a doctype declaration + elif self._doctype is not None: + # parse doctype contents + if prefix == ">": + self._doctype = None + return + text = string.strip(text) + if not text: + return + self._doctype.append(text) + n = len(self._doctype) + if n > 2: + type = self._doctype[1] + if type == "PUBLIC" and n == 4: + name, type, pubid, system = self._doctype + elif type == "SYSTEM" and n == 3: + name, type, system = self._doctype + pubid = None + else: + return + if pubid: + pubid = pubid[1:-1] + self.doctype(name, pubid, system[1:-1]) + self._doctype = None + + ## + # Handles a doctype declaration. + # + # @param name Doctype name. + # @param pubid Public identifier. + # @param system System identifier. + + def doctype(self, name, pubid, system): + pass + + ## + # Feeds data to the parser. + # + # @param data Encoded data. + + def feed(self, data): + self._parser.Parse(data, 0) + + ## + # Finishes feeding data to the parser. + # + # @return An element structure. + # @defreturn Element + + def close(self): + self._parser.Parse("", 1) # end of data + tree = self._target.close() + del self._target, self._parser # get rid of circular references + return tree diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/api.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/api.py new file mode 100755 index 0000000000..d636205dba --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/api.py @@ -0,0 +1,987 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +import sys, os, re, optparse +import tree, treegenerator, tokenizer, comment + + + +######################################################################################## +# +# MAIN +# +######################################################################################## + +class DocException (Exception): + def __init__ (self, msg, syntaxItem): + Exception.__init__(self, msg) + self.node = syntaxItem + + + +def createDoc(syntaxTree, docTree = None): + if not docTree: + docTree = tree.Node("doctree") + + try: + currClassNode = None + if not syntaxTree.hasChildren(): + return docTree + + for item in syntaxTree.children: + if item.type == "assignment": + leftItem = item.getFirstListChild("left") + rightItem = item.getFirstListChild("right") + if leftItem.type == "variable": + if currClassNode and len(leftItem.children) == 3 and leftItem.children[0].get("name") == "qx": + + if leftItem.children[1].get("name") == "Proto" and rightItem.type == "function": + # It's a method definition + handleMethodDefinitionOld(item, False, currClassNode) + + elif leftItem.children[1].get("name") == "Class": + if rightItem.type == "function": + handleMethodDefinitionOld(item, True, currClassNode) + + elif leftItem.children[2].get("name").isupper(): + handleConstantDefinition(item, currClassNode) + + elif currClassNode and assembleVariable(leftItem).startswith(currClassNode.get("fullName")): + # This is definition of the type "mypackage.MyClass.bla = ..." + if rightItem.type == "function": + handleMethodDefinitionOld(item, True, currClassNode) + + elif leftItem.children[len(leftItem.children) - 1].get("name").isupper(): + handleConstantDefinition(item, currClassNode) + + elif item.type == "call": + operand = item.getChild("operand", False) + if operand: + var = operand.getChild("variable", False) + + # qooxdoo < 0.7 (DEPRECATED) + if var and len(var.children) == 3 and var.children[0].get("name") == "qx" and var.children[1].get("name") == "OO": + methodName = var.children[2].get("name") + + if methodName == "defineClass": + currClassNode = handleClassDefinitionOld(docTree, item) + + elif methodName in [ "addProperty", "addFastProperty" ]: + # these are private and should be marked if listed, otherwise just hide them (wpbasti) + #or methodName == "addCachedProperty" or methodName == "changeProperty": + handlePropertyDefinitionOld(item, currClassNode) + + # qooxdoo >= 0.7 + elif var and len(var.children) == 3 and var.children[0].get("name") == "qx" and var.children[1].get("name") in [ "Class", "Clazz", "Locale", "Interface", "Mixin" ] and var.children[2].get("name") == "define": + currClassNode = handleClassDefinition(docTree, item, var.children[1].get("name").lower()) + + + except Exception: + exc = sys.exc_info()[1] + msg = "" + + if hasattr(exc, "node"): + (line, column) = getLineAndColumnFromSyntaxItem(exc.node) + file = getFileFromSyntaxItem(exc.node) + if line != None or file != None: + msg = str(exc) + "\n " + str(file) + ", Line: " + str(line) + ", Column: " + str(column) + + if msg == "": + raise exc + + else: + print + print " - Failed: %s" % msg + sys.exit(1) + + return docTree + + + + + + + + + + +######################################################################################## +# +# COMPATIBLE TO 0.7 STYLE ONLY! +# +######################################################################################## + +def handleClassDefinition(docTree, item, variant): + params = item.getChild("params") + + className = params.children[0].get("value") + classMap = params.children[1] + classNode = getClassNode(docTree, className) + + #print className + + try: + children = classMap.children + except AttributeError: + return + + for keyvalueItem in children: + key = keyvalueItem.get("key") + valueItem = keyvalueItem.getChild("value").getFirstChild() + + # print "KEY: %s = %s" % (key, valueItem.type) + + if key == "extend": + if variant in [ "class", "clazz" ]: + superClassName = assembleVariable(valueItem) + superClassNode = getClassNode(docTree, superClassName) + childClasses = superClassNode.get("childClasses", False) + + if childClasses: + childClasses += "," + className + else: + childClasses = className + + superClassNode.set("childClasses", childClasses) + + classNode.set("superClass", superClassName) + + elif variant == "interface": + pass + + elif variant == "mixin": + pass + + elif key == "include": + handleMixins(valueItem, classNode) + + elif key == "implement": + handleInterfaces(valueItem, classNode) + + elif key == "init": + handleConstructor(valueItem, classNode) + + elif key == "statics": + handleStatics(valueItem, classNode) + + elif key == "properties": + handleProperties(valueItem, classNode) + + elif key == "members": + handleMembers(valueItem, classNode) + +def handleMixins(item, classNode): + #print " - Found Mixin" + pass + +def handleInterfaces(item, classNode): + #print " - Found Interface" + pass + +def handleConstructor(item, classNode): + #print " - Found Constructor" + pass + +def handleStatics(item, classNode): + if item.hasChildren(): + for keyvalue in item.children: + key = keyvalue.get("key") + value = keyvalue.getFirstChild(True, True).getFirstChild(True, True) + commentAttributes = comment.parseNode(keyvalue) + + # print " - Found Static: %s = %s" % (key, value.type) + + # Function + if value.type == "function": + node = handleFunction(value, commentAttributes, classNode) + node.set("name", key) + node.set("isStatic", True) + + classNode.addListChild("methods-static", node) + + # Constant + elif key.isupper(): + handleConstantDefinition(keyvalue, classNode) + +def handleProperties(item, classNode): + if item.hasChildren(): + for keyvalue in item.children: + key = keyvalue.get("key") + value = keyvalue.getFirstChild(True, True).getFirstChild(True, True) + # print " - Found Property: %s" % key + + # TODO: New handling for new properties needed + handlePropertyDefinitionOldCommon(keyvalue, classNode, key, value) + +def handleMembers(item, classNode): + if item.hasChildren(): + for keyvalue in item.children: + key = keyvalue.get("key") + value = keyvalue.getFirstChild(True, True).getFirstChild(True, True) + commentAttributes = comment.parseNode(keyvalue) + + # print " - Found Member: %s = %s" % (key, value.type) + + # Function + if value.type == "function": + + node = handleFunction(value, commentAttributes, classNode) + node.set("name", key) + + classNode.addListChild("methods", node) + + + + + + +######################################################################################## +# +# COMPATIBLE TO 0.6 STYLE ONLY! +# +######################################################################################## + +def handleClassDefinitionOld(docTree, item): + params = item.getChild("params") + + paramsLen = len(params.children); + if paramsLen == 1: + superClassName = "Object" + ctorItem = None + elif paramsLen == 2: + superClassName = "Object" + ctorItem = params.children[1] + elif paramsLen == 3: + superClassName = assembleVariable(params.children[1]) + ctorItem = params.children[2] + else: + raise DocException("defineClass call has more than three parameters: " + str(len(params.children)), item) + + className = params.children[0].get("value") + classNode = getClassNode(docTree, className) + + if superClassName != "Object": + superClassNode = getClassNode(docTree, superClassName) + childClasses = superClassNode.get("childClasses", False) + if childClasses: + childClasses += "," + className + else: + childClasses = className + superClassNode.set("childClasses", childClasses) + + classNode.set("superClass", superClassName) + + commentAttributes = comment.parseNode(item) + + for attrib in commentAttributes: + if attrib["category"] == "event": + # Add the event + if comment.attribHas(attrib, "name") and comment.attribHas(attrib, "type"): + addEventNode(classNode, item, attrib); + else: + addError(classNode, "Documentation contains malformed event attribute.", item) + elif attrib["category"] == "description": + if attrib.has_key("text"): + descNode = tree.Node("desc").set("text", attrib["text"]) + classNode.addChild(descNode) + + # Add the constructor + if ctorItem and ctorItem.type == "function": + ctor = handleFunction(ctorItem, commentAttributes, classNode) + ctor.set("isCtor", True) + classNode.addListChild("constructor", ctor) + + # Check for methods defined in the constructor + # (for method definition style that supports real private methods) + ctorBlock = ctorItem.getChild("body").getChild("block") + + if ctorBlock.hasChildren(): + for item in ctorBlock.children: + if item.type == "assignment": + leftItem = item.getFirstListChild("left") + rightItem = item.getFirstListChild("right") + + # It's a method definition + if leftItem.type == "variable" and len(leftItem.children) == 2 and (leftItem.children[0].get("name") == "this" or leftItem.children[0].get("name") == "self") and rightItem.type == "function": + handleMethodDefinitionOld(item, False, classNode) + + elif ctorItem and ctorItem.type == "map": + for keyvalueItem in ctorItem.children: + if keyvalueItem.type == "keyvalue": + valueItem = keyvalueItem.getChild("value").getFirstChild() + if (valueItem.type == "function"): + handleMethodDefinitionOld(keyvalueItem, True, classNode) + else: + handleConstantDefinition(keyvalueItem, classNode) + + return classNode + +def handlePropertyDefinitionOld(item, classNode): + paramsMap = item.getChild("params").getChild("map") + propertyName = paramsMap.getChildByAttribute("key", "name").getChild("value").getChild("constant").get("value") + + handlePropertyDefinitionOldCommon(item, classNode, propertyName, paramsMap) + +def handlePropertyDefinitionOldCommon(item, classNode, propertyName, paramsMap): + node = tree.Node("property") + node.set("name", propertyName) + + propType = paramsMap.getChildByAttribute("key", "type", False) + if propType: + node.set("type", getType(propType.getChild("value").getFirstChild())) + + allowNull = paramsMap.getChildByAttribute("key", "allowNull", False) + if allowNull: + node.set("allowNull", allowNull.getChild("value").getChild("constant").get("value")) + + defaultValue = paramsMap.getChildByAttribute("key", "defaultValue", False) + if defaultValue: + node.set("defaultValue", getValue(defaultValue.getFirstListChild("value"))) + + getAlias = paramsMap.getChildByAttribute("key", "getAlias", False) + if getAlias: + node.set("getAlias", getAlias.getChild("value").getChild("constant").get("value")) + + setAlias = paramsMap.getChildByAttribute("key", "setAlias", False) + if setAlias: + node.set("setAlias", setAlias.getChild("value").getChild("constant").get("value")) + + unitDetection = paramsMap.getChildByAttribute("key", "unitDetection", False) + if unitDetection: + node.set("unitDetection", unitDetection.getChild("value").getChild("constant").get("value")) + + instance = paramsMap.getChildByAttribute("key", "instance", False) + if instance: + node.set("instance", instance.getChild("value").getChild("constant").get("value")) + + classname = paramsMap.getChildByAttribute("key", "classname", False) + if classname: + node.set("classname", classname.getChild("value").getChild("constant").get("value")) + + possibleValues = paramsMap.getChildByAttribute("key", "possibleValues", False) + if possibleValues: + array = possibleValues.getChild("value").getChild("array") + values = "" + for arrayItem in array.children: + if len(values) != 0: + values += ", " + values += getValue(arrayItem) + node.set("possibleValues", values) + + # If the description has a type specified then take this type + # (and not the one extracted from the paramsMap) + commentAttributes = comment.parseNode(item) + addTypeInfo(node, comment.getAttrib(commentAttributes, "description"), item) + + classNode.addListChild("properties", node) + +def handleMethodDefinitionOld(item, isStatic, classNode): + if item.type == "assignment": + # This is a "normal" method definition + leftItem = item.getFirstListChild("left") + name = leftItem.children[len(leftItem.children) - 1].get("name") + functionItem = item.getFirstListChild("right") + elif item.type == "keyvalue": + # This is a method definition of a map-style class (like qx.Const) + name = item.get("key") + functionItem = item.getFirstListChild("value") + + commentAttributes = comment.parseNode(item) + + node = handleFunction(functionItem, commentAttributes, classNode) + node.set("name", name) + + isPublic = name[0] != "_" + listName = "methods" + if isStatic: + node.set("isStatic", True) + listName += "-static" + + classNode.addListChild(listName, node) + + + + + + + + +######################################################################################## +# +# COMPATIBLE TO BOTH, 0.6 and 0.7 style +# +######################################################################################## + +def handleConstantDefinition(item, classNode): + if (item.type == "assignment"): + # This is a "normal" constant definition + leftItem = item.getFirstListChild("left") + name = leftItem.children[len(leftItem.children) - 1].get("name") + valueNode = item.getChild("right") + elif (item.type == "keyvalue"): + # This is a constant definition of a map-style class (like qx.Const) + name = item.get("key") + valueNode = item.getChild("value") + + if not name.isupper(): + return + + node = tree.Node("constant") + node.set("name", name) + + value = None + if valueNode.hasChild("constant"): + node.set("value", valueNode.getChild("constant").get("value")) + node.set("type", valueNode.getChild("constant").get("constantType").capitalize()) + + commentAttributes = comment.parseNode(item) + description = comment.getAttrib(commentAttributes, "description") + addTypeInfo(node, description, item) + + classNode.addListChild("constants", node) + +def handleFunction(funcItem, commentAttributes, classNode): + if funcItem.type != "function": + raise DocException("'funcItem' is no function", funcItem) + + node = tree.Node("method") + + # Read the parameters + params = funcItem.getChild("params", False) + if params and params.hasChildren(): + for param in params.children: + paramNode = tree.Node("param") + paramNode.set("name", param.getFirstChild().get("name")) + node.addListChild("params", paramNode) + + # Check whether the function is abstract + bodyBlockItem = funcItem.getChild("body").getFirstChild(); + if bodyBlockItem.type == "block" and bodyBlockItem.hasChildren(): + firstStatement = bodyBlockItem.children[0]; + if firstStatement.type == "throw": + # The first statement of the function is a throw statement + # -> The function is abstract + node.set("isAbstract", True) + + if len(commentAttributes) == 0: + addError(node, "Documentation is missing.", funcItem) + return node + + # Read all description, param and return attributes + for attrib in commentAttributes: + # Add description + if attrib["category"] == "description": + if attrib.has_key("text"): + descNode = tree.Node("desc").set("text", attrib["text"]) + node.addChild(descNode) + + elif attrib["category"] == "see": + if not attrib.has_key("name"): + raise DocException("Missing target for see.", funcItem) + + seeNode = tree.Node("see").set("name", attrib["name"]) + node.addChild(seeNode) + + elif attrib["category"] == "param": + if not attrib.has_key("name"): + raise DocException("Missing name of parameter.", funcItem) + + # Find the matching param node + paramName = attrib["name"] + paramNode = node.getListChildByAttribute("params", "name", paramName, False) + + if not paramNode: + addError(node, "Contains information for a non-existing parameter <code>%s</code>." % paramName, funcItem) + continue + + addTypeInfo(paramNode, attrib, funcItem) + + elif attrib["category"] == "return": + returnNode = tree.Node("return") + node.addChild(returnNode) + + addTypeInfo(returnNode, attrib, funcItem) + + # Check for documentation errors + # Check whether all parameters have been documented + if node.hasChild("params"): + paramsListNode = node.getChild("params"); + for paramNode in paramsListNode.children: + if not paramNode.getChild("desc", False): + addError(node, "Parameter %s is not documented." % paramNode.get("name"), funcItem) + + return node + + + + + + + + + + +######################################################################################## +# +# COMMON STUFF +# +####################################################################################### + + +def variableIsClassName(varItem): + length = len(varItem.children) + for i in range(length): + varChild = varItem.children[i] + if not varChild.type == "identifier": + return False + if i < length - 1: + # This is not the last identifier -> It must a package (= lowercase) + if not varChild.get("name").islower(): + return False + else: + # This is the last identifier -> It must the class name (= first letter uppercase) + if not varChild.get("name")[0].isupper(): + return False + return True + + + +def assembleVariable(variableItem): + if variableItem.type != "variable": + raise DocException("'variableItem' is no variable", variableItem) + + assembled = "" + for child in variableItem.children: + if len(assembled) != 0: + assembled += "." + assembled += child.get("name") + + return assembled + + + +def getValue(item): + value = None + if item.type == "constant": + if item.get("constantType") == "string": + value = '"' + item.get("value") + '"' + else: + value = item.get("value") + elif item.type == "variable": + value = assembleVariable(item) + elif item.type == "operation" and item.get("operator") == "SUB": + # E.g. "-1" or "-Infinity" + value = "-" + getValue(item.getChild("first").getFirstChild()) + if value == None: + value = "[Unsupported item type: " + item.type + "]" + + return value + + + +def addTypeInfo(node, commentAttrib=None, item=None): + if commentAttrib == None: + if node.type == "constant" and node.get("value", False): + pass + + elif node.type == "param": + addError(node, "Parameter <code>%s</code> in not documented." % commentAttrib.get("name"), item) + + elif node.type == "return": + addError(node, "Return value is not documented.", item) + + else: + addError(node, "Documentation is missing.", item) + + return + + # add description + if commentAttrib.has_key("text"): + node.addChild(tree.Node("desc").set("text", commentAttrib["text"])) + + # add types + if commentAttrib.has_key("type"): + typesNode = tree.Node("types") + node.addChild(typesNode) + + for item in commentAttrib["type"]: + itemNode = tree.Node("entry") + typesNode.addChild(itemNode) + + itemNode.set("type", item["type"]) + + if item["dimensions"] != 0: + itemNode.set("dimensions", item["dimensions"]) + + # add default value + if commentAttrib.has_key("default"): + defaultValue = commentAttrib["default"] + if defaultValue != None: + # print "defaultValue: %s" % defaultValue + node.set("defaultValue", defaultValue) + + + +def addEventNode(classNode, classItem, commentAttrib): + node = tree.Node("event") + + node.set("name", commentAttrib["name"]) + + if commentAttrib.has_key("text"): + node.addChild(tree.Node("desc").set("text", commentAttrib["text"])) + + # add types + if commentAttrib.has_key("type"): + typesNode = tree.Node("types") + node.addChild(typesNode) + + for item in commentAttrib["type"]: + itemNode = tree.Node("entry") + typesNode.addChild(itemNode) + + itemNode.set("type", item["type"]) + + if item["dimensions"] != 0: + itemNode.set("dimensions", item["dimensions"]) + + classNode.addListChild("events", node) + + + +def addError(node, msg, syntaxItem): + # print ">>> %s" % msg + + errorNode = tree.Node("error") + errorNode.set("msg", msg) + + (line, column) = getLineAndColumnFromSyntaxItem(syntaxItem) + if line: + errorNode.set("line", line) + + if column: + errorNode.set("column", column) + + node.addListChild("errors", errorNode) + node.set("hasError", True) + + + +def getLineAndColumnFromSyntaxItem(syntaxItem): + line = None + column = None + + while line == None and column == None and syntaxItem: + line = syntaxItem.get("line", False) + column = syntaxItem.get("column", False) + + if syntaxItem.hasParent(): + syntaxItem = syntaxItem.parent + else: + syntaxItem = None + + return line, column + + +def getFileFromSyntaxItem(syntaxItem): + file = None + while file == None and syntaxItem: + file = syntaxItem.get("file", False) + if hasattr(syntaxItem, "parent"): + syntaxItem = syntaxItem.parent + else: + syntaxItem = None + return file + + +def getType(item): + if item.type == "constant" and item.get("constantType") == "string": + val = item.get("value").capitalize() + return val + + else: + raise DocException("Can't gess type. type is neither string nor variable: " + item.type, item) + + +def getClassNode(docTree, className): + splits = className.split(".") + + currPackage = docTree + length = len(splits) + for i in range(length): + split = splits[i] + + if (i < length - 1): + # This is a package name -> Get the right package + childPackage = currPackage.getListChildByAttribute("packages", "name", split, False) + if not childPackage: + childPackageName = ".".join(splits[:-(length-i-1)]) + + # The package does not exist -> Create it + childPackage = tree.Node("package") + childPackage.set("name", split) + childPackage.set("fullName", childPackageName) + childPackage.set("packageName", childPackageName.replace("." + split, "")) + + currPackage.addListChild("packages", childPackage) + + # Update current package + currPackage = childPackage + + else: + # This is a class name -> Get the right class + classNode = currPackage.getListChildByAttribute("classes", "name", split, False) + if not classNode: + # The class does not exist -> Create it + classNode = tree.Node("class") + classNode.set("name", split) + classNode.set("fullName", className) + classNode.set("packageName", className.replace("." + split, "")) + currPackage.addListChild("classes", classNode) + + return classNode + + + +def postWorkPackage(docTree, packageNode): + childHasError = False + + packages = packageNode.getChild("packages", False) + if packages: + packages.children.sort(nameComparator) + for node in packages.children: + hasError = postWorkPackage(docTree, node) + if hasError: + childHasError = True + + classes = packageNode.getChild("classes", False) + if classes: + classes.children.sort(nameComparator) + for node in classes.children: + hasError = postWorkClass(docTree, node) + if hasError: + childHasError = True + + if childHasError: + packageNode.set("hasWarning", True) + + return childHasError + + + +def postWorkClass(docTree, classNode): + # Sort child classes + childClasses = classNode.get("childClasses", False) + if childClasses: + classArr = childClasses.split(",") + classArr.sort() + childClasses = ",".join(classArr) + classNode.set("childClasses", childClasses) + + # Remove the property-modifier-methods + removePropertyModifiers(classNode) + + # Mark overridden items + postWorkItemList(docTree, classNode, "properties", True) + postWorkItemList(docTree, classNode, "events", False) + postWorkItemList(docTree, classNode, "methods", True) + postWorkItemList(docTree, classNode, "methods-static", False) + + # Check whether the class is static + superClassName = classNode.get("superClass", False) + if (superClassName == None or superClassName == "qx.core.Object") \ + and classNode.getChild("properties", False) == None \ + and classNode.getChild("methods", False) == None: + # This class is static + classNode.set("isStatic", True) + + # Check whether the class is abstract + if isClassAbstract(docTree, classNode, {}): + classNode.set("isAbstract", True) + + # Check for errors + childHasError = listHasError(classNode, "constructor") or listHasError(classNode, "properties") \ + or listHasError(classNode, "methods") or listHasError(classNode, "methods-static") \ + or listHasError(classNode, "constants") + + if childHasError: + classNode.set("hasWarning", True) + + return childHasError + + + +def isClassAbstract(docTree, classNode, visitedMethodNames): + if containsAbstractMethods(classNode.getChild("methods", False), visitedMethodNames): + # One of the methods is abstract + return True + + # No abstract methods found -> Check whether the super class has abstract + # methods that haven't been overridden + superClassName = classNode.get("superClass", False) + if superClassName: + superClassNode = getClassNode(docTree, superClassName) + return isClassAbstract(docTree, superClassNode, visitedMethodNames) + + + +def containsAbstractMethods(methodListNode, visitedMethodNames): + if methodListNode: + for methodNode in methodListNode.children: + name = methodNode.get("name") + if not name in visitedMethodNames: + visitedMethodNames[name] = True + if methodNode.get("isAbstract", False): + return True + + return False + + + +def removePropertyModifiers(classNode): + propertiesList = classNode.getChild("properties", False) + methodsList = classNode.getChild("methods", False) + if propertiesList and methodsList: + for propNode in propertiesList.children: + name = propNode.get("name") + upperName = name[0].upper() + name[1:] + + modifyNode = methodsList.getChildByAttribute("name", "_modify" + upperName, False) + if modifyNode: + methodsList.removeChild(modifyNode); + + changeNode = methodsList.getChildByAttribute("name", "_change" + upperName, False) + if changeNode: + methodsList.removeChild(changeNode); + + checkNode = methodsList.getChildByAttribute("name", "_check" + upperName, False) + if checkNode: + methodsList.removeChild(checkNode); + + if not methodsList.hasChildren(): + classNode.removeChild(methodsList) + + + +def postWorkItemList(docTree, classNode, listName, overridable): + """Does the post work for a list of properties or methods.""" + + # Sort the list + sortByName(classNode, listName) + + # Post work all items + listNode = classNode.getChild(listName, False) + if listNode: + for itemNode in listNode.children: + name = itemNode.get("name") + + # Check whether this item is overridden and try to inherit the + # documentation from the next matching super class + if overridable: + superClassName = classNode.get("superClass", False) + overriddenFound = False + docFound = (itemNode.getChild("desc", False) != None) + while superClassName and (not overriddenFound or not docFound): + superClassNode = getClassNode(docTree, superClassName) + superItemNode = superClassNode.getListChildByAttribute(listName, "name", name, False) + + if superItemNode: + if not docFound: + # This super item has a description + # -> Check whether the parameters match + # NOTE: paramsMatch works for properties, too + # (Because both compared properties always have no params) + if paramsMatch(itemNode, superItemNode): + # The parameters match -> We can use the documentation of the super class + itemNode.set("docFrom", superClassName) + docFound = (superItemNode.getChild("desc", False) != None) + + # Remove previously recorded documentation errors from the item + # (Any documentation errors will be recorded in the super class) + removeErrors(itemNode) + if not overriddenFound: + # This super class has the item defined -> Add a overridden attribute + itemNode.set("overriddenFrom", superClassName) + overriddenFound = True + + # Check the next superclass + superClassName = superClassNode.get("superClass", False) + + if not docFound and itemNode.get("overriddenFrom", False): + # This item is overridden, but we didn't find any documentation in the + # super classes -> Add a warning + itemNode.set("hasWarning", True) + + + +def paramsMatch(methodNode1, methodNode2): + params1 = methodNode1.getChild("params1", False) + params2 = methodNode1.getChild("params2", False) + + if params1 == None or params2 == None: + # One method has no parameters -> The params match if both are None + return params1 == params2 + elif len(params1.children) != len(params2.children): + # The param count is different -> The params don't match + return False + else: + for i in range(len(params1.children)): + par1 = params1.children[i] + par2 = params2.children[i] + if (par1.get("name") != par2.get("name")): + # These parameters don't match + return False + + # All tests passed + return True + + + +def removeErrors(node): + errors = node.getChild("errors", False) + if errors: + node.removeChild(errors) + node.remove("hasError") + + + +def sortByName(node, listName): + listNode = node.getChild(listName, False) + if listNode: + listNode.children.sort(nameComparator) + + + +def nameComparator(node1, node2): + name1 = node1.get("name").lower() + name2 = node2.get("name").lower() + return cmp(name1, name2) + + + +def listHasError(node, listName): + listNode = node.getChild(listName, False) + if listNode: + for childNode in listNode.children: + if childNode.get("hasError", False): + return True + + return False diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/checklocales.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/checklocales.py new file mode 100644 index 0000000000..81254c26f3 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/checklocales.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +import sys + +""" +checks whether the locale string is correct. +""" + +errormsg = """ +**************************************************************************** + ERROR +---------------------------------------------------------------------------- + The locale '%(locale)s' is defined in APPLICATION_LOCALES, but not '%(lang)s'! + + If a locale with a territory code is set ('%(locale)s'), the corresponding + locale without territory code must be included as well ('%(lang)s'). + + Please add '%(lang)s' to APPLICATION_LOCALES in your Makefile. +**************************************************************************** +""" + +def main(): + line = sys.stdin.read() + locales = line.split() + for locale in locales: + if locale.find("_") >= 0: + lang = locale.split("_")[0] + if not lang in locales: + print errormsg % {"lang": lang, "locale": locale} + sys.exit(1) + sys.exit(0) + +if __name__ == "__main__": + main()
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/cldr.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/cldr.py new file mode 100644 index 0000000000..2614f08070 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/cldr.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Fabian Jakobs (fjakobs) +# +################################################################################ +# encoding: utf-8 +""" +extract_cldr.py +""" + +import os +import sys +import getopt +import ElementTree + +help_message = ''' +The help message goes here. +''' + + +class Usage(Exception): + def __init__(self, msg): + self.msg = msg + + +def getJavaScript(data, locale, language, territory="", namespace="qx.locale.data"): + str = "/*\n" + if territory != "": + str += "#load(%s.%s)\n" % (namespace, language) + str += '''#require(qx.Locale) +*/ +qx.Locale.define("%s.%s", { +''' % (namespace, locale) + lines = [] + keys = data.keys() + keys.sort() + for key in keys: + lines.append(' cldr_%s: "%s"' % (key.replace("-", "_"), data[key].encode("UTF-8").replace("\n", "\n" + 4 * " ").replace('"', '\\"')) ) + + body = ",\n".join(lines) + str += "%s\n});" % body + return str + + +def getLocale(calendarElement): + locale = calendarElement.find("identity/language").attrib["type"] + territoryNode = calendarElement.find("identity/territory") + territory = "" + if territoryNode != None: + territory = territoryNode.attrib["type"] + return (locale, territory) + + +def extractMonth(calendarElement): + data = {} + for monthContext in calendarElement.findall(".//monthContext"): + for monthWidth in monthContext.findall("monthWidth"): + monthType = monthWidth.attrib["type"] + for month in monthWidth.findall("month"): + if month.attrib.has_key("alt"): continue + data["month_%s_%s" % (monthType, month.attrib["type"])] = month.text + return data + + +def extractDay(calendarElement): + data = {} + for dayWidth in calendarElement.findall(".//dayWidth"): + dayType = dayWidth.attrib["type"] + for day in dayWidth.findall("day"): + if day.attrib.has_key("alt"): continue + data['day_%s_%s' % (dayType, day.attrib["type"])] = day.text + return data + +def extractQuarter(calendarElement): + return {'': ''} + + +def extractAmPm(calendarElement): + data = {} + + amNode = calendarElement.find(".//am") + if amNode != None: + data['am'] = amNode.text + + pmNode = calendarElement.find(".//pm") + if pmNode != None: + data["pm"] = pmNode.text + + return data + + +def extractDateFormat(calendarElement): + data = {} + for dateFormatLength in calendarElement.findall(".//dateFormatLength"): + dateType = dateFormatLength.attrib["type"] + for dateFormat in dateFormatLength.findall("dateFormat/pattern"): + if dateFormat.attrib.has_key("alt"): continue + data['date_format_%s'% dateType] = dateFormat.text + return data + + +def extractTimeFormat(calendarElement): + data = {} + for timeFormatLength in calendarElement.findall(".//timeFormatLength"): + timeType = timeFormatLength.attrib["type"] + for timeFormat in timeFormatLength.findall("timeFormat/pattern"): + if timeFormat.attrib.has_key("alt"): continue + data['time_format_%s' % timeType] = timeFormat.text + return data + + +def extractDateTimeFormat(calendarElement): + data = {} + for dateTimeFormat in calendarElement.findall(".//dateFormatItem"): + data["date_time_format_%s" % dateTimeFormat.attrib["id"]] = dateTimeFormat.text + return data + + +def extractFields(calendarElement): + fields = {} + for field in calendarElement.findall(".//fields/field"): + if not field.find("displayName"): break + fields[field.attrib["type"]] = field.find("displayName").text + + return fields + + +def extractDelimiter(tree): + delimiters = {} + for delimiter in tree.findall("delimiters/*"): + delimiters[delimiter.tag] = delimiter.text + + return delimiters + + +def extractNumber(tree): + data = {} + + decimalSeparatorNode = tree.find("numbers/symbols/decimal") + if decimalSeparatorNode != None: + data['number_decimal_separator'] = decimalSeparatorNode.text + + groupSeparator = "," + groupSeparatorNode = tree.find("numbers/symbols/group") + if groupSeparatorNode != None: + data['number_group_separator'] = groupSeparatorNode.text + + percentFormatNode = tree.find("numbers/percentFormats/percentFormatLength/percentFormat/pattern") + if percentFormatNode != None: + data['number_percent_format'] = percentFormatNode.text + + return data + + +def parseCldrFile(filename, outputDirectory=None): + tree = ElementTree.parse(filename) + + language, territory = getLocale(tree) + data = {} + + for cal in tree.findall('dates/calendars/calendar'): + if not cal.attrib.has_key("type"): continue + if cal.attrib["type"] != "gregorian": continue + data.update(extractMonth(cal)) + data.update(extractDay(cal)) + #data.update(extractQuarter(cal)) + data.update(extractAmPm(cal)) + data.update(extractDateFormat(cal)) + data.update(extractTimeFormat(cal)) + data.update(extractDateTimeFormat(cal)) + data.update(extractFields(cal)) + + data.update(extractDelimiter(tree)) + data.update(extractNumber(tree)) + + locale = language + if territory != "": + locale += "_" + territory + + code = getJavaScript(data, locale, language, territory) + if outputDirectory != None: + outfile = os.path.join(outputDirectory, locale + ".js"); + open(outfile, "w").write(code) + else: + print code + + +def main(argv=None): + if argv is None: + argv = sys.argv + try: + try: + opts, args = getopt.getopt(argv[1:], "ho:v", ["help", "output="]) + except getopt.error, msg: + raise Usage(msg) + + output = None + for option, value in opts: + if option == "-v": + verbose = True + if option in ("-h", "--help"): + raise Usage(help_message) + if option in ("-o", "--output"): + output = value + + for arg in args: + parseCldrFile(arg, output) + + except Usage, err: + print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg) + print >> sys.stderr, "\t for help use --help" + return 2 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/comment.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/comment.py new file mode 100755 index 0000000000..a5e1d02346 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/comment.py @@ -0,0 +1,942 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +import sys, string, re +import config, tree, textile + + + +S_INLINE_COMMENT = "//.*" +R_INLINE_COMMENT = re.compile("^" + S_INLINE_COMMENT + "$") + +R_INLINE_COMMENT_TIGHT = re.compile("^//\S+") +R_INLINE_COMMENT_PURE = re.compile("^//") + + + +S_BLOCK_COMMENT = "/\*([^*]|[\n]|(\*+([^*/]|[\n])))*\*+/" +R_BLOCK_COMMENT = re.compile("^" + S_BLOCK_COMMENT + "$") + +R_BLOCK_COMMENT_JAVADOC = re.compile("^/\*\*") +R_BLOCK_COMMENT_QTDOC = re.compile("^/\*!") +R_BLOCK_COMMENT_AREA = re.compile("^/\*\n\s*\*\*\*\*\*") +R_BLOCK_COMMENT_DIVIDER = re.compile("^/\*\n\s*----") +R_BLOCK_COMMENT_HEADER = re.compile("^/\* \*\*\*\*") + +R_BLOCK_COMMENT_TIGHT_START = re.compile("^/\*\S+") +R_BLOCK_COMMENT_TIGHT_END = re.compile("\S+\*/$") +R_BLOCK_COMMENT_PURE_START = re.compile("^/\*") +R_BLOCK_COMMENT_PURE_END = re.compile("\*/$") + +R_ATTRIBUTE = re.compile(r'[^{]@(\w+)\s*') +R_JAVADOC_STARS = re.compile(r'^\s*\*') + + + +R_NAMED_TYPE = re.compile(r'^\s*([a-zA-Z0-9_\.#]+)\s*({([^}]+)})?') +R_SIMPLE_TYPE = re.compile(r'^\s*({([^}]+)})?') + + + + +VARPREFIXES = { + "a" : "Array", + "b" : "Boolean", + "d" : "Date", + "f" : "Function", + "i" : "Integer", + "h" : "Map", + "m" : "Map", + "n" : "Number", + "o" : "Object", + "r" : "RegExp", + "s" : "String", + "v" : "var", + "w" : "Widget" +} + +VARNAMES = { + "a" : "Array", + "arr" : "Array", + + "doc" : "Document", + + "e" : "Event", + "ev" : "Event", + "evt" : "Event", + + "el" : "Element", + "elem" : "Element", + "elm" : "Element", + + "ex" : "Exception", + "exc" : "Exception", + + "flag" : "Boolean", + "force" : "Boolean", + + "f" : "Function", + "func" : "Function", + + "h" : "Map", + "hash" : "Map", + "map" : "Map", + + "node" : "Node", + + "n" : "Number", + "num" : "Number", + + "o" : "Object", + "obj" : "Object", + + "reg" : "RegExp", + + "s" : "String", + "str" : "String", + + "win" : "Window" +} + +VARDESC = { + "propValue" : "Current value", + "propOldValue" : "Previous value", + "propData" : "Property configuration map" +} + + + + +def outdent(source, indent): + return re.compile("\n\s{%s}" % indent).sub("\n", source) + + + +def indent(source, indent): + return re.compile("\n").sub("\n" + (" " * indent), source) + + + +def correctInline(source): + if R_INLINE_COMMENT_TIGHT.match(source): + return R_INLINE_COMMENT_PURE.sub("// ", source) + + return source + + + +def correctBlock(source): + if not getFormat(source) in [ "javadoc", "qtdoc" ]: + if R_BLOCK_COMMENT_TIGHT_START.search(source): + source = R_BLOCK_COMMENT_PURE_START.sub("/* ", source) + + if R_BLOCK_COMMENT_TIGHT_END.search(source): + source = R_BLOCK_COMMENT_PURE_END.sub(" */", source) + + return source + + + +def correct(source): + if source.startswith("//"): + return correctInline(source) + else: + return correctBlock(source) + + + +def isMultiLine(source): + return source.find("\n") != -1 + + + +def getFormat(source): + if R_BLOCK_COMMENT_JAVADOC.search(source): + return "javadoc" + elif R_BLOCK_COMMENT_QTDOC.search(source): + return "qtdoc" + elif R_BLOCK_COMMENT_AREA.search(source): + return "area" + elif R_BLOCK_COMMENT_DIVIDER.search(source): + return "divider" + elif R_BLOCK_COMMENT_HEADER.search(source): + return "header" + + return "block" + + + + + + + + +def hasThrows(node): + if node.type == "throw": + return True + + if node.hasChildren(): + for child in node.children: + if hasThrows(child): + return True + + return False + + + + +def getReturns(node, found): + if node.type == "function": + pass + + elif node.type == "return": + if node.getChildrenLength(True) > 0: + val = "var" + else: + val = "void" + + if node.hasChild("expression"): + expr = node.getChild("expression") + if expr.hasChild("variable"): + var = expr.getChild("variable") + if var.getChildrenLength(True) == 1 and var.hasChild("identifier"): + val = nameToType(var.getChild("identifier").get("name")) + else: + val = "var" + + elif expr.hasChild("constant"): + val = expr.getChild("constant").get("constantType") + + if val == "number": + val = expr.getChild("constant").get("detail") + + elif expr.hasChild("array"): + val = "Array" + + elif expr.hasChild("map"): + val = "Map" + + elif expr.hasChild("function"): + val = "Function" + + elif expr.hasChild("call"): + val = "call" + + if not val in found: + found.append(val) + + elif node.hasChildren(): + for child in node.children: + getReturns(child, found) + + return found + + + +def nameToType(name): + typ = "var" + + # Evaluate type from name + if name in VARNAMES: + typ = VARNAMES[name] + + elif len(name) > 1: + if name[1].isupper(): + if name[0] in VARPREFIXES: + typ = VARPREFIXES[name[0]] + + return typ + + + +def nameToDescription(name): + desc = "TODOC" + + if name in VARDESC: + desc = VARDESC[name] + + return desc + + + + +def qt2javadoc(text): + attribList = parseText(text, False) + res = "/**" + + desc = getAttrib(attribList, "description")["text"] + + if "\n" in desc: + res += "\n" + + for line in desc.split("\n"): + res += " * %s\n" % line + + res += " " + + else: + res += " %s " % desc + + res += "*/" + + return res + + +def parseNode(node): + """Takes the last doc comment from the commentsBefore child, parses it and + returns a Node representing the doc comment""" + + # Find the last doc comment + commentsBefore = node.getChild("commentsBefore", False) + if commentsBefore and commentsBefore.hasChildren(): + for child in commentsBefore.children: + if child.type == "comment" and child.get("detail") in [ "javadoc", "qtdoc" ]: + return parseText(child.get("text")) + + return [] + + + +def parseText(intext, format=True): + # print "Parse: " + intext + + # Strip "/**", "/*!" and "*/" + intext = intext[3:-2] + + # Strip leading stars in every line + text = "" + for line in intext.split("\n"): + text += R_JAVADOC_STARS.sub("", line) + "\n" + + # Autodent + text = autoOutdent(text) + + # Search for attributes + desc = { "category" : "description", "text" : "" } + attribs = [ desc ] + pos = 0 + + while True: + mtch = R_ATTRIBUTE.search(text, pos) + + if mtch == None: + prevText = text[pos:].rstrip() + + if len(attribs) == 0: + desc["text"] = prevText + else: + attribs[-1]["text"] = prevText + + break + + prevText = text[pos:mtch.start(0)].rstrip() + pos = mtch.end(0) + + if len(attribs) == 0: + desc["text"] = prevText + else: + attribs[-1]["text"] = prevText + + attribs.append({ "category" : mtch.group(1), "text" : "" }) + + # parse details + for attrib in attribs: + parseDetail(attrib, format) + + return attribs + + + +def parseDetail(attrib, format=True): + text = attrib["text"] + + if attrib["category"] in [ "param", "event", "see" ]: + mtch = R_NAMED_TYPE.search(text) + else: + mtch = R_SIMPLE_TYPE.search(text) + + if mtch: + text = text[mtch.end(0):] + + if attrib["category"] in [ "param", "event", "see" ]: + attrib["name"] = mtch.group(1) + # print ">>> NAME: %s" % mtch.group(1) + remain = mtch.group(3) + else: + remain = mtch.group(2) + + if remain != None: + defIndex = remain.rfind("?") + if defIndex != -1: + attrib["default"] = remain[defIndex+1:].strip() + remain = remain[0:defIndex].strip() + # print ">>> DEFAULT: %s" % attrib["default"] + + typValues = [] + for typ in remain.split("|"): + typValue = typ.strip() + arrayIndex = typValue.find("[") + + if arrayIndex != -1: + arrayValue = (len(typValue) - arrayIndex) / 2 + typValue = typValue[0:arrayIndex] + else: + arrayValue = 0 + + typValues.append({ "type" : typValue, "dimensions" : arrayValue }) + + if len(typValues) > 0: + attrib["type"] = typValues + # print ">>> TYPE: %s" % attrib["type"] + + if format: + attrib["text"] = formatText(text) + else: + attrib["text"] = cleanupText(text) + + if attrib["text"] == "": + del attrib["text"] + + + + +def autoOutdent(text): + lines = text.split("\n") + + if len(lines) <= 1: + return text.strip() + + for line in lines: + if len(line) > 0 and line[0] != " ": + return text + + result = "" + for line in lines: + if len(line) >= 0: + result += line[1:] + + result += "\n" + + return result + + + +def cleanupText(text): + #print "============= INTEXT =========================" + #print text + + text = text.replace("<p>", "\n") + text = text.replace("<br/>", "\n") + text = text.replace("<br>", "\n") + text = text.replace("</p>", " ") + + newline = False + lines = text.split("\n") + text = u"" + + for line in lines: + if line == "": + if not newline: + newline = True + + else: + if text != "": + text += "\n" + + if newline: + text += "\n" + newline = False + + text += line + + #print "============= OUTTEXT =========================" + #print text + + return text + + + +def formatText(text): + text = cleanupText(text) + + #if "\n" in text: + # print + # print "------------- ORIGINAL ----------------" + # print text + + text = text.replace("<pre", "\n\n<pre").replace("</pre>", "</pre>\n\n") + + # encode to ascii leads into a translation of umlauts to their XML code. + text = unicode(textile.textile(text.encode("utf-8"), output="ascii")) + + #if "\n" in text: + # print "------------- TEXTILED ----------------" + # print text + + return text + + + + + + + + +def getAttrib(attribList, category): + for attrib in attribList: + if attrib["category"] == category: + return attrib + + + +def getParam(attribList, name): + for attrib in attribList: + if attrib["category"] == "param": + if attrib.has_key("name") and attrib["name"] == name: + return attrib + + + +def attribHas(attrib, key): + if attrib != None and attrib.has_key(key) and not attrib[key] in [ "", None ]: + return True + + return False + + + +def splitText(orig, attrib=True): + res = "" + first = True + + for line in orig.split("\n"): + if attrib: + if first: + res += " %s\n" % line + else: + res += " * %s\n" % line + + else: + res += " * %s\n" % line + + first = False + + if not res.endswith("\n"): + res += "\n" + + return res + + + +def parseType(vtype): + typeText = "" + + firstType = True + for entry in vtype: + if not firstType: + typeText += " | " + + typeText += entry["type"] + + if entry.has_key("dimensions") and entry["dimensions"] > 0: + typeText += "[]" * entry["dimensions"] + + firstType = False + + return typeText + + + + +def fromNode(node, assignType, name, alternative, old=[]): + # + # description + ############################################################## + oldDesc = getAttrib(old, "description") + + if attribHas(oldDesc, "text"): + newText = oldDesc["text"] + else: + newText = "{var} TODOC" + + if "\n" in newText: + s = "/**\n%s\n-*/" % splitText(newText, False) + else: + s = "/** %s */" % newText + + + # + # other @attributes + ############################################################## + + for attrib in old: + cat = attrib["category"] + + if cat != "description": + print " * Found unallowed attribute %s in comment for %s (node)" % (cat, name) + + return s + + + + +def fromFunction(func, assignType, name, alternative, old=[]): + # + # open comment + ############################################################## + s = "/**\n" + + + # + # description + ############################################################## + oldDesc = getAttrib(old, "description") + + if attribHas(oldDesc, "text"): + newText = oldDesc["text"] + else: + newText = "TODOC" + + s += splitText(newText, False) + s += " *\n" + + + + + # + # add @type + ############################################################## + if assignType != None: + s += " * @type %s\n" % assignType + else: + s += " * @type unknown TODOC\n" + + + + + # + # add @name and @access + ############################################################## + if name != None and name != "construct": + s += " * @name %s\n" % name + + if name.startswith("__"): + s += " * @access private\n" + elif name.startswith("_"): + s += " * @access protected\n" + else: + s += " * @access public\n" + + + + # + # add @alternative + ############################################################## + oldAlternative = getAttrib(old, "alternative") + + if alternative: + if attribHas(oldAlternative, "text"): + newText = oldDesc["text"] + else: + newText = "TODOC" + + s += " * @alternative%s" % splitText(newText) + + if not s.endswith("\n"): + s += "\n" + + elif oldAlternative: + print " * Removing old @alternative for %s" % name + + + + + # + # add @abstract + ############################################################## + oldAbstract = getAttrib(old, "abstract") + + first = func.getChild("body").getChild("block").getFirstChild(False, True) + abstract = first and first.type == "throw" + + if abstract: + if attribHas(oldAbstract, "text"): + newText = oldDesc["text"] + else: + newText = "" + + s += " * @abstract%s" % splitText(newText) + + if not s.endswith("\n"): + s += "\n" + + elif oldAbstract: + print " * Removing old @abstract for %s" % name + + + + + + + # + # add @param + ############################################################## + params = func.getChild("params") + if params.hasChildren(): + for child in params.children: + if child.type == "variable": + newName = child.getChild("identifier").get("name") + newType = newTypeText = nameToType(newName) + newDefault = "" + newText = nameToDescription(newName) + + oldParam = getParam(old, newName) + + # Get type and text from old content + if oldParam: + if attribHas(oldParam, "type"): + newTypeText = parseType(oldParam["type"]) + + if attribHas(oldParam, "defaultValue"): + newDefault = oldParam["defaultValue"] + + if attribHas(oldParam, "text"): + newText = oldParam["text"].strip() + + s += " * @param %s {%s%s}%s" % (newName, newTypeText, newDefault, splitText(newText)) + + if not s.endswith("\n"): + s += "\n" + + + + + + # + # add @return + ############################################################## + if name != "construct": + oldReturn = getAttrib(old, "return") + + newType = "void" + newText = "" + + # Get type and text from old content + if oldReturn: + if attribHas(oldReturn, "type"): + newType = parseType(oldReturn["type"]) + + if attribHas(oldReturn, "text"): + newText = oldReturn["text"].strip() + + # Try to autodetect the type + if newType == "void": + returns = getReturns(func.getChild("body"), []) + + if len(returns) > 0: + newType = " | ".join(returns) + elif name != None and name.startswith("is") and name[3].isupper(): + newType = "boolean" + + # Add documentation hint in non void cases + if newType != "void" and newText == "": + newText = "TODOC" + + s += " * @return {%s}%s" % (newType, splitText(newText)) + + if not s.endswith("\n"): + s += "\n" + + + + + + + # + # add @throws + ############################################################## + oldThrows = getAttrib(old, "throws") + + if hasThrows(func): + if oldThrows and attribHas(oldThrows, "text"): + newText = oldThrows["text"] + elif abstract: + newText = "the abstract function warning." + else: + newText = "TODOC" + + s += " * @throws%s" % splitText(newText) + + if not s.endswith("\n"): + s += "\n" + + elif oldThrows: + print " * Removing old @throw attribute in comment for %s" % name + + + + + # + # other @attributes + ############################################################## + + for attrib in old: + cat = attrib["category"] + + if cat in [ "see", "author", "deprecated", "exception", "since", "version", "abstract", "overridden" ]: + s += " * @%s" % cat + + if attribHas(attrib, "text"): + s += splitText(attrib["text"]) + + if not s.endswith("\n"): + s += "\n" + + elif not cat in [ "description", "type", "name", "access", "alternative", "abstract", "param", "return", "throws" ]: + print " * Found unallowed attribute %s in comment for %s (function)" % (cat, name) + + + + + + # + # close comment + ############################################################## + s += " */" + + return s + + + +def fill(node): + if node.type in [ "comment", "commentsBefore", "commentsAfter" ]: + return + + if node.hasParent(): + target = node + + if node.type == "function": + name = node.get("name", False) + else: + name = "" + + alternative = False + assignType = None + + if name != None: + assignType = "function" + + # move to hook operation + while target.parent.type in [ "first", "second", "third" ] and target.parent.parent.type == "operation" and target.parent.parent.get("operator") == "HOOK": + alternative = True + target = target.parent.parent + + # move comment to assignment + while target.parent.type == "right" and target.parent.parent.type == "assignment": + target = target.parent.parent + if target.hasChild("left"): + left = target.getChild("left") + if left and left.hasChild("variable"): + var = left.getChild("variable") + last = var.getLastChild(False, True) + if last and last.type == "identifier": + name = last.get("name") + assignType = "object" + + for child in var.children: + if child.type == "identifier": + if child.get("name") in [ "prototype", "Proto" ]: + assignType = "member" + elif child.get("name") in [ "class", "base", "Class" ]: + assignType = "static" + + elif target.parent.type == "definition": + name = target.parent.get("identifier") + assignType = "definition" + + # move to definition + if target.parent.type == "assignment" and target.parent.parent.type == "definition" and target.parent.parent.parent.getChildrenLength(True) == 1: + target = target.parent.parent.parent + assignType = "function" + + + # move comment to keyvalue + if target.parent.type == "value" and target.parent.parent.type == "keyvalue": + target = target.parent.parent + name = target.get("key") + assignType = "map" + + if name == "construct": + assignType = "constructor" + + if target.parent.type == "map" and target.parent.parent.type == "value" and target.parent.parent.parent.type == "keyvalue": + paname = target.parent.parent.parent.get("key") + + if paname == "members": + assignType = "member" + + elif paname == "statics": + assignType = "static" + + # filter stuff, only add comments to member and static values and to all functions + if assignType in [ "member", "static" ] or node.type == "function": + + if not hasattr(target, "documentationAdded") and target.parent.type != "params": + old = [] + + # create commentsBefore + if target.hasChild("commentsBefore"): + commentsBefore = target.getChild("commentsBefore") + + if commentsBefore.hasChild("comment"): + for child in commentsBefore.children: + if child.get("detail") in [ "javadoc", "qtdoc" ]: + old = parseText(child.get("text"), False) + commentsBefore.removeChild(child) + break + + else: + commentsBefore = tree.Node("commentsBefore") + target.addChild(commentsBefore) + + # create comment node + commentNode = tree.Node("comment") + + if node.type == "function": + commentNode.set("text", fromFunction(node, assignType, name, alternative, old)) + else: + commentNode.set("text", fromNode(node, assignType, name, alternative, old)) + + commentNode.set("detail", "javadoc") + commentNode.set("multiline", True) + + commentsBefore.addChild(commentNode) + + # in case of alternative methods, use the first one, ignore the others + target.documentationAdded = True + + + + + + if node.hasChildren(): + for child in node.children: + fill(child) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/compiler.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/compiler.py new file mode 100755 index 0000000000..9f697e0931 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/compiler.py @@ -0,0 +1,1495 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Alessandro Sala (asala) +# +################################################################################ + +import sys, string, re, optparse +import config, tokenizer, filetool, treegenerator, variableoptimizer, comment, tree + +KEY = re.compile("^[A-Za-z0-9_]+$") +INDENTSPACES = 2 + + + +def compileToken(name, compact=False): + global pretty + + + if name in [ "INC", "DEC", "TYPEOF" ]: + pass + + elif name in [ "INSTANCEOF", "IN" ]: + space() + + elif not compact and pretty: + space() + + + + if name == None: + write("=") + + elif name in [ "TYPEOF", "INSTANCEOF", "IN" ]: + write(name.lower()) + + else: + for key in config.JSTOKENS: + if config.JSTOKENS[key] == name: + write(key) + + + + if name in [ "INC", "DEC" ]: + pass + + elif name in [ "TYPEOF", "INSTANCEOF", "IN" ]: + space() + + elif not compact and pretty: + space() + + +def space(force=True): + global indent + global result + global pretty + global afterLine + global afterBreak + + if not force and not pretty: + return + + if afterBreak or afterLine or result.endswith(" ") or result.endswith("\n"): + return + + result += " " + + +def write(txt=""): + global indent + global result + global pretty + global breaks + global afterLine + global afterBreak + global afterDivider + global afterArea + + # strip remaining whitespaces + if (afterLine or afterBreak or afterDivider or afterArea) and result.endswith(" "): + result = result.rstrip() + + if pretty: + # handle new line wishes + if afterArea: + nr = 9 + elif afterDivider: + nr = 5 + elif afterBreak: + nr = 2 + elif afterLine: + nr = 1 + else: + nr = 0 + + while not result.endswith("\n" * nr): + result += "\n" + + elif breaks and not result.endswith("\n"): + if afterArea or afterDivider or afterBreak or afterLine: + result += "\n" + + # reset + afterLine = False + afterBreak = False + afterDivider = False + afterArea = False + + # add indent (if needed) + if pretty and result.endswith("\n"): + result += (" " * (INDENTSPACES * indent)) + + # append given text + result += txt + + +def area(): + global afterArea + afterArea = True + + +def divide(): + global afterDivider + afterDivider = True + + +def sep(): + global afterBreak + afterBreak = True + + +def nosep(): + global afterBreak + afterBreak = False + + +def line(): + global afterLine + afterLine = True + + +def noline(): + global afterLine + global afterBreak + global afterDivider + global afterArea + + afterLine = False + afterBreak = False + afterDivider = False + afterArea = False + + +def plus(): + global indent + indent += 1 + + +def minus(): + global indent + indent -= 1 + + +def semicolon(): + global result + global breaks + + noline() + + if not (result.endswith("\n") or result.endswith(";")): + write(";") + + if breaks: + result += "\n" + + +def commentNode(node): + global pretty + + if not pretty: + return + + commentText = "" + commentIsInline = False + + comment = node.getChild("commentsAfter", False) + + if comment and not comment.get("inserted", False): + for child in comment.children: + if not child.isFirstChild(): + commentText += " " + + commentText += child.get("text") + + if child.get("detail") == "inline": + commentIsInline = True + + if commentText != "": + space() + write(commentText) + + if commentIsInline: + line() + else: + space() + + comment.set("inserted", True) + + + +def postProcessMap(m): + if m.get("maxKeyLength", False) != None: + return + + maxKeyLength = 0 + alignValues = True + + if m.hasChildren(): + for keyvalue in m.children: + if keyvalue.type != "keyvalue": + continue + + currKeyLength = len(keyvalue.get("key")) + + if keyvalue.get("quote", False) != None: + currKeyLength += 2 + + if currKeyLength > maxKeyLength: + maxKeyLength = currKeyLength + + if alignValues and keyvalue.getChild("value").isComplex(): + alignValues = False + + m.set("maxKeyLength", maxKeyLength) + m.set("alignValues", alignValues) + + + + + +def compile(node, enablePretty=True, enableBreaks=False, enableDebug=False): + global indent + global result + global pretty + global debug + global breaks + global afterLine + global afterBreak + global afterDivider + global afterArea + + indent = 0 + result = u"" + pretty = enablePretty + debug = enableDebug + breaks = enableBreaks + afterLine = False + afterBreak = False + afterDivider = False + afterArea = False + + if enablePretty: + comment.fill(node) + + compileNode(node) + + return result + + + + + + + + + + +def compileNode(node): + + global pretty + global indent + + + + + ##################################################################################################################### + # Recover styling + ##################################################################################################################### + + if pretty: + # Recover exclicit breaks + if node.get("breakBefore", False) and not node.isFirstChild(True): + sep() + + # Additional explicit break before complex blocks + if node.hasParent() and not node.isFirstChild(True) and node.parent.type in [ "block", "file"] and node.isComplex(): + sep() + + + + ##################################################################################################################### + # Insert comments before + ##################################################################################################################### + + if pretty: + if node.getChild("commentsBefore", False) != None: + commentCounter = 0 + commentsBefore = node.getChild("commentsBefore") + isFirst = node.isFirstChild() + previous = node.getPreviousSibling(False, True) + + if previous and previous.type in [ "case", "default" ]: + inCase = True + else: + inCase = False + + inOperation = node.parent.type in [ "first", "second", "third" ] and node.parent.parent.type == "operation" + + for child in commentsBefore.children: + docComment = child.get("detail") in [ "javadoc", "qtdoc" ] + headComment = child.get("detail") == "header" + areaComment = child.get("detail") == "area" + divComment = child.get("detail") == "divider" + blockComment = child.get("detail") == "block" + singleLineBlock = child.get("detail") != "inline" and child.get("multiline") == False + + if not child.isFirstChild(): + pass + + elif inCase: + pass + + elif singleLineBlock: + if child.get("begin"): + sep() + else: + space() + + elif areaComment and not isFirst: + area() + + elif divComment and not isFirst: + divide() + + elif not isFirst: + sep() + + elif inOperation: + sep() + + elif not headComment: + line() + + # reindenting first + text = child.get("text") + + if child.get("detail") == "qtdoc": + text = comment.qt2javadoc(text) + + write(comment.indent(text, INDENTSPACES * indent)) + + if singleLineBlock: + if child.get("detail") in [ "javadoc", "qtdoc" ]: + line() + elif child.get("end"): + sep() + else: + space() + + # separator after divider/head comments and after block comments which are not for documentation + elif headComment or areaComment or divComment or blockComment: + sep() + + else: + line() + + + + + + + ##################################################################################################################### + # Opening... + ##################################################################################################################### + + # + # OPEN: FINALLY + ################################## + + if node.type == "finally": + write("finally") + + + # + # OPEN: DELETE + ################################## + + elif node.type == "delete": + write("delete") + space() + + + # + # OPEN: THROW + ################################## + + elif node.type == "throw": + write("throw") + space() + + + # + # OPEN: NEW + ################################## + + elif node.type == "instantiation": + write("new") + space() + + + # + # OPEN: RETURN + ################################## + + elif node.type == "return": + write("return") + + if node.hasChildren(): + space() + + + # + # OPEN: DEFINITION LIST + ################################## + + elif node.type == "definitionList": + write("var") + space() + + + # + # OPEN: BREAK + ################################## + + elif node.type == "break": + write("break") + + if node.get("label", False): + space() + write(node.get("label", False)) + + + # + # OPEN: CONTINUE + ################################## + + elif node.type == "continue": + write("continue") + + if node.get("label", False): + space() + write(node.get("label", False)) + + + # + # OPEN: FUNCTION + ################################## + + elif node.type == "function": + write("function") + + functionName = node.get("name", False) + if functionName != None: + space() + write(functionName) + + + # + # OPEN: IDENTIFIER + ################################## + + elif node.type == "identifier": + name = node.get("name", False) + if name != None: + write(name) + + + # + # OPEN: DEFINITION + ################################## + + elif node.type == "definition": + if node.parent.type != "definitionList": + write("var") + space() + + write(node.get("identifier")) + + + # + # OPEN: CONSTANT + ################################## + + elif node.type == "constant": + if node.get("constantType") == "string": + if node.get("detail") == "singlequotes": + write("'") + else: + write('"') + + write(node.get("value")) + + if node.get("detail") == "singlequotes": + write("'") + else: + write('"') + + else: + write(node.get("value")) + + + # + # OPEN: COMMENT + ################################## + + elif node.type == "comment": + if pretty: + # insert a space before and no newline in the case of after comments + if node.get("connection") == "after": + noline() + space() + + write(node.get("text")) + + # new line after inline comment (for example for syntactical reasons) + if node.get("detail") == "inline": + line() + + else: + space() + + + # + # OPEN: RIGHT + ################################## + + elif node.type == "right": + if node.parent.type == "accessor": + write(".") + + + + + + + # + # OPEN: ASSIGNMENT + ################################## + + elif node.type == "assignment": + if node.parent.type == "definition": + oper = node.get("operator", False) + + realNode = node.parent.parent + + # be compact in for-loops + compact = realNode.hasParent() and realNode.parent.type in [ "first", "second", "third" ] and realNode.parent.parent.type == "loop" and realNode.parent.parent.get("loopType") == "FOR" + compileToken(oper, compact) + + + + + + # + # OPEN: KEY + ################################## + + elif node.type == "key": + if node.parent.type == "accessor": + write("[") + + + # + # OPEN: GROUP + ################################## + + elif node.type == "group": + write("(") + + + # + # OPEN: VOID + ################################## + + elif node.type == "void": + write("void") + write("(") + + + # + # OPEN: ARRAY + ################################## + + elif node.type == "array": + write("[") + + if node.hasChildren(True): + space(False) + + + # + # OPEN: PARAMS + ################################## + + elif node.type == "params": + noline() + write("(") + + + + + + + + + # + # OPEN: CASE + ################################## + + elif node.type == "case": + if pretty: + # force double new lines + if not node.isFirstChild() and not node.getPreviousSibling(True).type == "case": + sep() + + minus() + line() + + write("case") + space() + + + # + # OPEN: DEFAULT + ################################## + + elif node.type == "default": + if pretty: + minus() + + # force double new lines + if not node.getPreviousSibling(True).type == "case": + sep() + + write("default") + write(":") + + if pretty: + plus() + line() + + + + + + + # + # OPEN: TRY + ################################## + + elif node.type == "switch": + # Additional new line before each switch/try + if not node.isFirstChild(True) and not node.getChild("commentsBefore", False): + prev = node.getPreviousSibling(False, True) + + # No separation after case statements + if prev != None and prev.type in [ "case", "default" ]: + pass + else: + sep() + + if node.get("switchType") == "catch": + write("try") + elif node.get("switchType") == "case": + write("switch") + + + # + # OPEN: CATCH + ################################## + + elif node.type == "catch": + if pretty: + # If this statement block or the previous try were not complex, be not complex here, too + if not node.getChild("statement").getChild("block").isComplex() and not node.parent.getChild("statement").getChild("block").isComplex(): + noline() + space() + + write("catch") + + + + + + + + # + # OPEN: MAP + ################################## + + elif node.type == "map": + par = node.parent + + if pretty: + postProcessMap(node) + + if pretty: + # No break before return statement + if node.hasParent() and node.parent.type == "expression" and node.parent.parent.type == "return": + pass + + elif node.isComplex(): + line() + + write("{") + + if pretty: + if node.isComplex(): + line() + plus() + + elif node.hasChildren(True): + space() + + + # + # OPEN: KEYVALUE + ################################## + + elif node.type == "keyvalue": + keyString = node.get("key") + keyQuote = node.get("quote", False) + + if keyQuote != None: + # print "USE QUOTATION" + if keyQuote == "doublequotes": + keyString = '"' + keyString + '"' + else: + keyString = "'" + keyString + "'" + + elif keyString in config.JSPROTECTED or not KEY.match(keyString): + print "Warning: Auto protect key: %s" % keyString + keyString = "\"" + keyString + "\"" + + if pretty and not node.isFirstChild(True) and not node.hasChild("commentsBefore") and node.getChild("value").isComplex(): + sep() + + write(keyString) + space(False) + + # Fill with spaces + # Do this only if the parent is complex (many entries) + # But not if the value itself is complex + if pretty and node.parent.isComplex() and node.parent.get("alignValues"): + write(" " * (node.parent.get("maxKeyLength") - len(keyString))) + + write(":") + space(False) + + + + + + + + # + # OPEN: BLOCK + ################################## + + elif node.type == "block": + if pretty: + if node.isComplex(): + line() + else: + space() + + write("{") + + if pretty: + if node.hasChildren(): + plus() + line() + + + # + # OPEN: LOOP + ################################## + + elif node.type == "loop": + # Additional new line before each loop + if not node.isFirstChild(True) and not node.getChild("commentsBefore", False): + prev = node.getPreviousSibling(False, True) + + # No separation after case statements + if prev != None and prev.type in [ "case", "default" ]: + pass + elif node.hasChild("elseStatement") or node.getChild("statement").hasBlockChildren(): + sep() + else: + line() + + loopType = node.get("loopType") + + if loopType == "IF": + write("if") + space(False) + + elif loopType == "WHILE": + write("while") + space(False) + + elif loopType == "FOR": + write("for") + space(False) + + elif loopType == "DO": + write("do") + space(False) + + elif loopType == "WITH": + write("with") + space(False) + + else: + print "Warning: Unknown loop type: %s" % loopType + + + + # + # OPEN: ELSE + ################################## + + elif node.type == "elseStatement": + if node.hasChild("commentsBefore"): + pass + + elif pretty: + if not node.hasChild("block") and not node.hasChild("loop"): + pass + + elif not node.isComplex(): + noline() + space() + + write("else") + + # This is a elseStatement without a block around (a set of {}) + if not node.hasChild("block"): + space() + + + # + # OPEN: EXPRESSION + ################################## + + elif node.type == "expression": + if node.parent.type == "loop": + loopType = node.parent.get("loopType") + + # only do-while loops + if loopType == "DO": + if pretty: + stmnt = node.parent.getChild("statement") + compact = stmnt.hasChild("block") and not stmnt.getChild("block").isComplex() + + if compact: + noline() + space() + + write("while") + + if pretty: + space() + + # open expression block of IF/WHILE/DO-WHILE/FOR statements + write("(") + + elif node.parent.type == "catch": + # open expression block of CATCH statement + write("(") + + elif node.parent.type == "switch" and node.parent.get("switchType") == "case": + # open expression block of SWITCH statement + write("(") + + + # + # OPEN: FIRST + ################################## + + elif node.type == "first": + # for loop + if node.parent.type == "loop" and node.parent.get("loopType") == "FOR": + write("(") + + # operation + elif node.parent.type == "operation": + # operation (var a = -1) + if node.parent.get("left", False) == True: + compileToken(node.parent.get("operator"), True) + + + + # + # OPEN: SECOND + ################################## + + elif node.type == "second": + # for loop + if node.parent.type == "loop" and node.parent.get("loopType") == "FOR": + if not node.parent.hasChild("first"): + write("(;") + + # operation + elif node.parent.type == "operation": + if node.isComplex(): + # (?: hook operation) + if node.parent.get("operator") == "HOOK": + sep() + else: + line() + + + + + + # + # OPEN: THIRD + ################################## + + elif node.type == "third": + # for loop + if node.parent.type == "loop" and node.parent.get("loopType") == "FOR": + if not node.parent.hasChild("second"): + if node.parent.hasChild("first"): + write(";") + space(False) + else: + write("(;;") + + # operation + elif node.parent.type == "operation": + # (?: hook operation) + if node.parent.get("operator") == "HOOK": + if node.isComplex(): + sep() + + + # + # OPEN: STATEMENT + ################################## + + elif node.type == "statement": + # for loop + if node.parent.type == "loop" and node.parent.get("loopType") == "FOR": + if node.parent.get("forVariant") == "iter": + if not node.parent.hasChild("first") and not node.parent.hasChild("second") and not node.parent.hasChild("third"): + write("(;;"); + + elif not node.parent.hasChild("second") and not node.parent.hasChild("third"): + write(";") + + write(")") + + if not node.hasChild("block"): + space(False) + + + + + + + + + + + + + + ##################################################################################################################### + # Children content + ##################################################################################################################### + + if node.hasChildren(): + for child in node.children: + if not node.type in [ "commentsBefore", "commentsAfter" ]: + compileNode(child) + + + + + + + + + + ##################################################################################################################### + # Closing node + ##################################################################################################################### + + # + # CLOSE: IDENTIFIER + ################################## + + if node.type == "identifier": + if node.hasParent() and node.parent.type == "variable" and not node.isLastChild(True): + write(".") + elif node.hasParent() and node.parent.type == "label": + write(":") + + + # + # CLOSE: ACCESSOR + ################################## + + elif node.type == "accessor": + if node.hasParent() and node.parent.type == "variable" and not node.isLastChild(True): + write(".") + + + # + # CLOSE: KEYVALUE + ################################## + + elif node.type == "keyvalue": + if node.hasParent() and node.parent.type == "map" and not node.isLastChild(True): + noline() + write(",") + + if pretty: + commentNode(node) + + if node.getChild("value").isComplex(): + sep() + elif node.parent.isComplex(): + line() + else: + space() + + + # + # CLOSE: DEFINITION + ################################## + + elif node.type == "definition": + if node.hasParent() and node.parent.type == "definitionList" and not node.isLastChild(True): + write(",") + + if pretty: + commentNode(node) + + if node.hasComplexChildren(): + line() + else: + space() + + + # + # CLOSE: LEFT + ################################## + + elif node.type == "left": + if node.hasParent() and node.parent.type == "assignment": + oper = node.parent.get("operator", False) + + if node.parent.parent.type == "statementList": + realNode = node.parent.parent + else: + realNode = node.parent + + # be compact in for-loops + compact = realNode.hasParent() and realNode.parent.type in [ "first", "second", "third" ] and realNode.parent.parent.type == "loop" and realNode.parent.parent.get("loopType") == "FOR" + compileToken(oper, compact) + + + + + + + # + # CLOSE: KEY + ################################## + + elif node.type == "key": + if node.hasParent() and node.parent.type == "accessor": + write("]") + + + # + # CLOSE: GROUP + ################################## + + elif node.type == "group": + if node.getChildrenLength(True) == 1: + noline() + + write(")") + + + # + # CLOSE: VOID + ################################## + + elif node.type == "void": + if node.getChildrenLength(True) == 1: + noline() + + write(")") + + + # + # CLOSE: ARRAY + ################################## + + elif node.type == "array": + if node.hasChildren(True): + space(False) + + write("]") + + + # + # CLOSE: PARAMS + ################################## + + elif node.type == "params": + write(")") + + + # + # CLOSE: MAP + ################################## + + elif node.type == "map": + if pretty: + if node.isComplex(): + line() + minus() + + elif node.hasChildren(True): + space() + + write("}") + + + + + + + # + # CLOSE: SWITCH + ################################## + + elif node.type == "switch": + if node.get("switchType") == "case": + if pretty: + minus() + minus() + line() + + write("}") + + if pretty: + commentNode(node) + line() + + # Force a additinal line feed after each switch/try + if pretty and not node.isLastChild(): + sep() + + + # + # CLOSE: CASE + ################################## + + elif node.type == "case": + write(":") + + if pretty: + commentNode(node) + plus() + line() + + + + + + + + + # + # CLOSE: BLOCK + ################################## + + elif node.type == "block": + if pretty and node.hasChildren(): + minus() + line() + + write("}") + + if pretty: + commentNode(node) + + if node.hasChildren(): + # Newline afterwards + if node.parent.type == "body" and node.parent.parent.type == "function": + + # But only when this isn't a function block inside a assignment + if node.parent.parent.parent.type in [ "right", "params" ]: + pass + + elif node.parent.parent.parent.type == "value" and node.parent.parent.parent.parent.type == "keyvalue": + pass + + else: + line() + + else: + line() + + + # + # CLOSE: LOOP + ################################## + + elif node.type == "loop": + if node.get("loopType") == "DO": + semicolon() + + if pretty: + commentNode(node) + + # Force a additinal line feed after each loop + if not node.isLastChild(): + if node.hasChild("elseStatement"): + sep() + elif node.getChild("statement").hasBlockChildren(): + sep() + else: + line() + + + # + # CLOSE: FUNCTION + ################################## + + elif node.type == "function": + if pretty: + commentNode(node) + + if not node.isLastChild() and node.hasParent() and node.parent.type in [ "block", "file" ]: + sep() + + + # + # CLOSE: EXPRESSION + ################################## + + elif node.type == "expression": + if node.parent.type == "loop": + write(")") + + # e.g. a if-construct without a block {} + if node.parent.getChild("statement").hasChild("block"): + pass + + elif node.parent.type == "loop" and node.parent.get("loopType") == "DO": + pass + + else: + space(False) + + elif node.parent.type == "catch": + write(")") + + elif node.parent.type == "switch" and node.parent.get("switchType") == "case": + write(")") + + if pretty: + commentNode(node) + line() + + write("{") + + if pretty: + plus() + plus() + + + # + # CLOSE: FIRST + ################################## + + elif node.type == "first": + # for loop + if node.parent.type == "loop" and node.parent.get("loopType") == "FOR": + if node.parent.get("forVariant") == "iter": + write(";") + + if node.parent.hasChild("second"): + space(False) + + # operation + elif node.parent.type == "operation" and node.parent.get("left", False) != True: + oper = node.parent.get("operator") + + if node.parent.parent.type == "statementList": + realNode = node.parent.parent + else: + realNode = node.parent + + compact = realNode.hasParent() and realNode.parent.type in [ "first", "second", "third" ] and realNode.parent.parent.type == "loop" and realNode.parent.parent.get("loopType") == "FOR" + compileToken(oper, compact) + + + # + # CLOSE: SECOND + ################################## + + elif node.type == "second": + # for loop + if node.parent.type == "loop" and node.parent.get("loopType") == "FOR": + write(";") + + if node.parent.hasChild("third"): + space(False) + + # operation + elif node.parent.type == "operation": + # (?: hook operation) + if node.parent.get("operator") == "HOOK": + noline() + space(False) + write(":") + space(False) + + + + + + + + + + # + # CLOSE: OTHER + ################################## + + if node.hasParent() and not node.type in [ "comment", "commentsBefore", "commentsAfter" ]: + + # Add comma dividers between statements in these parents + if node.parent.type in [ "array", "params", "statementList" ]: + if not node.isLastChild(True): + write(",") + + if pretty: + commentNode(node) + + if node.isComplex(): + line() + else: + space() + + # Semicolon handling + elif node.type in [ "group", "block", "assignment", "call", "operation", "definitionList", "return", "break", "continue", "delete", "accessor", "instantiation", "throw", "variable" ]: + + # Default semicolon handling + if node.parent.type in [ "block", "file" ]: + semicolon() + + if pretty: + commentNode(node) + line() + + if node.isComplex() and not node.isLastChild(): + sep() + + # Special handling for switch statements + elif node.parent.type == "statement" and node.parent.parent.type == "switch" and node.parent.parent.get("switchType") == "case": + semicolon() + + if pretty: + commentNode(node) + line() + + if node.isComplex() and not node.isLastChild(): + sep() + + # Special handling for loops (e.g. if) without blocks {} + elif node.parent.type in [ "statement", "elseStatement" ] and not node.parent.hasChild("block") and node.parent.parent.type == "loop": + semicolon() + + if pretty: + commentNode(node) + line() + + if node.isComplex() and not node.isLastChild(): + sep() + + + # + # CLOSE: OTHER + ################################## + + if pretty: + # Rest of the after comments (not inserted previously) + commentNode(node) + + + + + + + + + + + +def main(): + parser = optparse.OptionParser() + + parser.add_option("-w", "--write", action="store_true", dest="write", default=False, help="Writes file to incoming fileName + EXTENSION.") + parser.add_option("-e", "--extension", dest="extension", metavar="EXTENSION", help="The EXTENSION to use", default="") + parser.add_option("-c", "--compress", action="store_true", dest="compress", help="Enable compression", default=False) + parser.add_option("--optimize-variables", action="store_true", dest="optimizeVariables", default=False, help="Optimize variables. Reducing size.") + parser.add_option("--encoding", dest="encoding", default="utf-8", metavar="ENCODING", help="Defines the encoding expected for input files.") + + (options, args) = parser.parse_args() + + if len(args) == 0: + print "Needs one or more arguments (files) to compile!" + sys.exit(1) + + for fileName in args: + if options.write: + print "Compiling %s => %s%s" % (fileName, fileName, options.extension) + else: + print "Compiling %s => stdout" % fileName + + restree = treegenerator.createSyntaxTree(tokenizer.parseFile(fileName, "", options.encoding)) + + if options.optimizeVariables: + variableoptimizer.search(restree, [], 0, "$") + + compiledString = compile(restree, not options.compress) + if options.write: + if compiledString != "" and not compiledString.endswith("\n"): + compiledString += "\n" + + filetool.save(fileName + options.extension, compiledString) + + else: + try: + print compiledString + + except UnicodeEncodeError: + print " * Could not encode result to ascii. Use '-w' instead." + sys.exit(1) + + + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/config.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/config.py new file mode 100755 index 0000000000..19c30770f7 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/config.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import re + + + + +# +# FILE EXTENSIONS +# + +JSEXT = ".js" +PYEXT = ".py" +XMLEXT = ".xml" +TOKENEXT = ".txt" +DIRIGNORE = [ ".svn", "CVS" ] + + + + +# +# QOOXDOO HEADER SUPPORT +# + +QXHEAD = { + # TODO: Obsolete since 0.7 + "defineClass" : re.compile('qx.OO.defineClass\(\s*["\']([\.a-zA-Z0-9_-]+)["\'](\s*\,\s*([\.a-zA-Z0-9_-]+))?', re.M), + + # 0.7 API + "classDefine" : re.compile('qx.(Clazz|Locale|Mixin|Interface).define\(\s*["\']([\.a-zA-Z0-9_-]+)["\']?', re.M), + "superClass" : re.compile('extend\s*:\s*([\.a-zA-Z0-9_-]+)', re.M), + + "id" : re.compile("#id\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "module" : re.compile("#module\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "require" : re.compile("#require\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "use" : re.compile("#use\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "after" : re.compile("#after\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "load" : re.compile("#load\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "optional" : re.compile("#optional\(\s*([\.a-zA-Z0-9_-]+?)\s*\)", re.M), + "resource" : re.compile("#resource\(\s*(.*?):(.*?)\s*\)", re.M), + "embed" : re.compile("#embed\(\s*([a-zA-Z0-9]+?)\.([a-zA-Z0-9]+?)/(.+?)\s*\)", re.M) +} + + + + + +# +# JAVASCRIPT SUPPORT +# + +JSBUILTIN = [ "Object", "Array", "RegExp", "Math", "String", "Number", "Error" ] + +JSTOKENS = { + "." : "DOT", + "," : "COMMA", + ":" : "COLON", + "?" : "HOOK", + ";" : "SEMICOLON", + "!" : "NOT", + "~" : "BITNOT", + "\\" : "BACKSLASH", + + "+" : "ADD", + "-" : "SUB", + "*" : "MUL", + "/" : "DIV", + "%" : "MOD", + + "{" : "LC", + "}" : "RC", + "(" : "LP", + ")" : "RP", + "[" : "LB", + "]" : "RB", + + "<" : "LT", + "<=" : "LE", + ">" : "GT", + ">=" : "GE", + "==" : "EQ", + "!=" : "NE", + "===" : "SHEQ", + "!==" : "SHNE", + + "=" : "ASSIGN", + + "+=" : "ASSIGN_ADD", + "-=" : "ASSIGN_SUB", + "*=" : "ASSIGN_MUL", + "/=" : "ASSIGN_DIV", + "%=" : "ASSIGN_MOD", + + "|=" : "ASSIGN_BITOR", + "^=" : "ASSIGN_BITXOR", + "&=" : "ASSIGN_BITAND", + "<<=" : "ASSIGN_LSH", + ">>=" : "ASSIGN_RSH", + ">>>=" : "ASSIGN_URSH", + + "&&" : "AND", + "||" : "OR", + + "|" : "BITOR", + "^|" : "BITXOR", + "&" : "BITAND", + + "^" : "POWEROF", + + "<<" : "LSH", + ">>" : "RSH", + ">>>" : "URSH", + + "++" : "INC", + "--" : "DEC", + + "::" : "COLONCOLON", + ".." : "DOTDOT", + + "@" : "XMLATTR", + + "//" : "SINGLE_COMMENT", + "/*" : "COMMENT_START", + "*/" : "COMMENT_STOP", + "/*!" : "DOC_START" +} + +JSPROTECTED = { + "null" : "NULL", + "Infinity" : "INFINITY", + "true" : "TRUE", + "false" : "FALSE", + + "this" : "THIS", + "var" : "VAR", + "new" : "NEW", + "prototype" : "PROTOTYPE", + "return" : "RETURN", + "function" : "FUNCTION", + + "while" : "WHILE", + "if" : "IF", + "else" : "ELSE", + "switch" : "SWITCH", + "case" : "CASE", + "default" : "DEFAULT", + "break" : "BREAK", + "continue" : "CONTINUE", + "goto" : "GOTO", + "do" : "DO", + "delete" : "DELETE", + "for" : "FOR", + "in" : "IN", + "with" : "WITH", + "try" : "TRY", + "catch" : "CATCH", + "finally" : "FINALLY", + "throw" : "THROW", + "instanceof" : "INSTANCEOF", + "typeof" : "TYPEOF", + "void" : "VOID", + "call" : "CALL", + "apply" : "APPLY" +} + +JSSPACE_BEFORE = [ "INSTANCEOF", "IN" ] +JSSPACE_AFTER = [ "VAR", "NEW", "GOTO", "INSTANCEOF", "TYPEOF", "DELETE", "IN", "THROW", "CASE" ] +JSSPACE_AFTER_USAGE = [ "RETURN", "FUNCTION" ] +JSPARANTHESIS_BEFORE = [ "ELSE", "FINALLY", "CATCH", "WHILE" ] diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/filetool.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/filetool.py new file mode 100755 index 0000000000..0cf23612b2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/filetool.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import os, codecs, cPickle, sys +import textutil + +def save(filePath, content="", encoding="utf-8"): + # Normalize + filePath = normalize(filePath) + + # Create directory + directory(os.path.dirname(filePath)) + + # Writing file + try: + outputFile = codecs.open(filePath, encoding=encoding, mode="w", errors="replace") + outputFile.write(content) + except IOError, (errno, strerror): + print " * I/O error(%s): %s" % (errno, strerror) + sys.exit(1) + except UnicodeDecodeError: + print " * Could not decode result to %s" % encoding + sys.exit(1) + except: + print " * Unexpected error:", sys.exc_info()[0] + sys.exit(1) + + outputFile.flush() + outputFile.close() + + +def directory(dirname): + # Normalize + dirname = normalize(dirname) + + # Check/Create directory + if dirname != "" and not os.path.exists(dirname): + os.makedirs(dirname) + + +def normalize(filename): + return os.path.normcase(os.path.normpath(filename)) + + +def read(filePath, encoding="utf_8"): + try: + ref = codecs.open(filePath, encoding=encoding, mode="r") + content = ref.read() + ref.close() + + return textutil.any2Unix(unicode(content)) + + except IOError, (errno, strerror): + print " * I/O error(%s): %s" % (errno, strerror) + sys.exit(1) + + except ValueError: + print " * Invalid Encoding. Required encoding %s in %s" % (encoding, filePath) + sys.exit(1) + + except: + print " * Unexpected error:", sys.exc_info()[0] + sys.exit(1) + + +def storeCache(cachePath, data): + try: + cPickle.dump(data, open(cachePath, 'wb'), 2) + + except EOFError or PickleError or PicklingError: + print " * Could not store cache to %s" % cachePath + sys.exit(1) + + +def readCache(cachePath): + try: + return cPickle.load(open(cachePath, 'rb')) + + except EOFError or PickleError or UnpicklingError: + print " * Could not read cache from %s" % cachePath + sys.exit(1) + + +def checkCache(filePath, cachePath, internalModTime): + fileModTime = os.stat(filePath).st_mtime + + try: + cacheModTime = os.stat(cachePath).st_mtime + except OSError: + cacheModTime = 0 + + if internalModTime > cacheModTime: + # print "Invalid cache: %s" % filePath + # print "%s > %s" % (internalModTime, cacheModTime) + return True + + return fileModTime > cacheModTime diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/graph.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/graph.py new file mode 100755 index 0000000000..b5bac4c94e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/graph.py @@ -0,0 +1,73 @@ +import os +import math +import filetool +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +# Write dependencies to a Graphviz compatible file (http://www.graphviz.org/) + +def dotLine(fileDb, fileId, depEntry, largetFileSize): + file = fileId.split(".") + dep = depEntry.split(".") + weight = 1 + + for i in range(len(file)): + if file[i] == dep[i]: + weight += 1 + else: + break + + size = os.path.getsize(fileDb[fileId]["path"]) + + content = ' "%s" [color="%s %s 1.000"];\n' % (fileId, math.log(size)/math.log(largetFileSize), math.log(size)/math.log(largetFileSize)) + content += ' "%s" -> "%s" [weight=%s];\n' % (fileId, depEntry, weight) + + return content + + +def store(fileDb, sortedIncludeList, options): + content = '''digraph "qooxdoo" { +node [style=filled]; +''' + + largest = 0 + for fileId in sortedIncludeList: + size = os.path.getsize(fileDb[fileId]["path"]) + if size > largest: + largest = size + + for fileId in sortedIncludeList: + if len(fileDb[fileId]["loadtimeDeps"]) > 0: + for depEntry in fileDb[fileId]["loadtimeDeps"]: + content += dotLine(fileDb, fileId, depEntry, largest) + + if len(fileDb[fileId]["afterDeps"]) > 0: + for depEntry in fileDb[fileId]["afterDeps"]: + content += dotLine(fileDb, fileId, depEntry, largest) + + if len(fileDb[fileId]["runtimeDeps"]) > 0: + for depEntry in fileDb[fileId]["runtimeDeps"]: + content += dotLine(fileDb, fileId, depEntry, largest) + + if len(fileDb[fileId]["loadDeps"]) > 0: + for depEntry in fileDb[fileId]["loadDeps"]: + content += dotLine(fileDb, fileId, depEntry, largest) + + content += '}' + filetool.save(options.depDotFile, content)
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/loader.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/loader.py new file mode 100755 index 0000000000..309a5586fa --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/loader.py @@ -0,0 +1,827 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import sys, string, re, os, random, cPickle, codecs +import config, tokenizer, treegenerator, filetool, stringoptimizer, textutil + +internalModTime = 0 + + +def validateFiles(): + + global internalModTime + + base = os.path.dirname(os.path.abspath(sys.argv[0])) + if base.endswith("modules"): + path = base + else: + path = os.path.join(base, "modules") + + maxFileModTime = os.stat(os.path.join(path, ".." + os.path.sep + "generator.py")).st_mtime + + for root, dirs, files in os.walk(path): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for files + for fileName in files: + if os.path.splitext(fileName)[1] != config.PYEXT: + continue + + filePath = os.path.join(root, fileName) + fileModTime = os.stat(filePath).st_mtime + + if fileModTime > maxFileModTime: + maxFileModTime = fileModTime + + + internalModTime = maxFileModTime + + + +def getInternalModTime(options): + + global internalModTime + + if internalModTime == 0 and not options.disableInternalCheck: + validateFiles() + + return internalModTime + + + +def extractFileContentId(data): + # TODO: Obsolete with 0.7 + for item in config.QXHEAD["defineClass"].findall(data): + return item[0] + + for item in config.QXHEAD["id"].findall(data): + return item + + for item in config.QXHEAD["classDefine"].findall(data): + return item[1] + + return None + + +def extractSuperClass(data): + # TODO: Obsolete with 0.7 + for item in config.QXHEAD["defineClass"].findall(data): + return item[2] + + for item in config.QXHEAD["superClass"].findall(data): + return item + + return None + + +def extractLoadtimeDeps(data, fileId=""): + deps = [] + + # qooxdoo specific: + # store inheritance deps + superClass = extractSuperClass(data) + if superClass != None and superClass != "" and not superClass in config.JSBUILTIN: + deps.append("qx.OO") + deps.append(superClass) + elif "qx.OO.defineClass(" in data: + deps.append("qx.OO") + + + # Adding explicit requirements + for item in config.QXHEAD["require"].findall(data): + if item == fileId: + print " - Self-referring load dependency: %s" % item + elif item in deps: + print " - Double definition of load dependency: %s" % item + else: + deps.append(item) + + return deps + + +def extractAfterDeps(data, fileId=""): + deps = [] + + # Adding explicit after requirements + for item in config.QXHEAD["after"].findall(data): + if item == fileId: + print " - Self-referring load dependency: %s" % item + elif item in deps: + print " - Double definition of load dependency: %s" % item + else: + deps.append(item) + + return deps + + +def extractRuntimeDeps(data, fileId=""): + deps = [] + + # Adding explicit runtime requirements + for item in config.QXHEAD["use"].findall(data): + if item == fileId: + print " - Self-referring runtime dependency: %s" % item + elif item in deps: + print " - Double definition of runtime dependency: %s" % item + else: + deps.append(item) + + return deps + + +def extractLoadDeps(data, fileId=""): + deps = [] + + # Adding before requirements + for item in config.QXHEAD["load"].findall(data): + if item == fileId: + print " - Self-referring runtime dependency: %s" % item + elif item in deps: + print " - Double definition of runtime dependency: %s" % item + else: + deps.append(item) + + return deps + + +def extractOptional(data): + deps = [] + + # Adding explicit requirements + for item in config.QXHEAD["optional"].findall(data): + if not item in deps: + deps.append(item) + + return deps + + +def extractModules(data): + mods = [] + + for item in config.QXHEAD["module"].findall(data): + if not item in mods: + mods.append(item) + + return mods + + +def extractResources(data, fileId): + res = [] + + for item in config.QXHEAD["resource"].findall(data): + res.append({ "namespace" : fileId[0:fileId.find(".")], "id" : item[0], "entry" : item[1] }) + + return res + + +def extractEmbeds(data): + emb = [] + + for item in config.QXHEAD["embed"].findall(data): + emb.append({ "namespace" : item[0], "id" : item[1], "entry" : item[2] }) + + return emb + + + +def getTokens(fileDb, fileId, options): + if not fileDb[fileId].has_key("tokens"): + if options.verbose: + print " - Generating tokens for %s..." % fileId + + useCache = False + loadCache = False + + fileEntry = fileDb[fileId] + + filePath = fileEntry["path"] + fileEncoding = fileEntry["encoding"] + + if options.cacheDirectory != None: + cachePath = os.path.join(filetool.normalize(options.cacheDirectory), fileId + "-tokens.pcl") + useCache = True + + if not filetool.checkCache(filePath, cachePath, getInternalModTime(options)): + loadCache = True + + if loadCache: + tokens = filetool.readCache(cachePath) + else: + fileContent = filetool.read(filePath, fileEncoding) + tokens = tokenizer.parseStream(fileContent, fileId) + + if useCache: + if options.verbose: + print " - Caching tokens for %s..." % fileId + + filetool.storeCache(cachePath, tokens) + + fileDb[fileId]["tokens"] = tokens + + return fileDb[fileId]["tokens"] + + + + +def getTree(fileDb, fileId, options): + if not fileDb[fileId].has_key("tree"): + if options.verbose: + print " - Generating tree for %s..." % fileId + + useCache = False + loadCache = False + + fileEntry = fileDb[fileId] + filePath = fileEntry["path"] + + if options.cacheDirectory != None: + cachePath = os.path.join(filetool.normalize(options.cacheDirectory), fileId + "-tree.pcl") + useCache = True + + if not filetool.checkCache(filePath, cachePath, getInternalModTime(options)): + loadCache = True + + if loadCache: + tree = filetool.readCache(cachePath) + else: + tree = treegenerator.createSyntaxTree(getTokens(fileDb, fileId, options)) + + if useCache: + if options.verbose: + print " - Caching tree for %s..." % fileId + + filetool.storeCache(cachePath, tree) + + fileDb[fileId]["tree"] = tree + + return fileDb[fileId]["tree"] + + + + + +def getStrings(fileDb, fileId, options): + if not fileDb[fileId].has_key("strings"): + if options.verbose: + print " - Searching for strings in %s..." % fileId + + useCache = False + loadCache = False + + fileEntry = fileDb[fileId] + filePath = fileEntry["path"] + + if options.cacheDirectory != None: + cachePath = os.path.join(filetool.normalize(options.cacheDirectory), fileId + "-strings.pcl") + useCache = True + + if not filetool.checkCache(filePath, cachePath, getInternalModTime(options)): + loadCache = True + + if loadCache: + strings = filetool.readCache(cachePath) + else: + strings = stringoptimizer.search(getTree(fileDb, fileId, options), options.verbose) + + if useCache: + if options.verbose: + print " - Caching strings for %s..." % fileId + + filetool.storeCache(cachePath, strings) + + fileDb[fileId]["strings"] = strings + + return fileDb[fileId]["strings"] + + + + + +def resolveAutoDeps(fileDb, options): + ###################################################################### + # DETECTION OF AUTO DEPENDENCIES + ###################################################################### + + if options.verbose: + print " * Resolving dependencies..." + else: + print " * Resolving dependencies: ", + + knownIds = [] + depCounter = 0 + hasMessage = False + + for fileId in fileDb: + knownIds.append(fileId) + + for fileId in fileDb: + fileEntry = fileDb[fileId] + + if fileEntry["autoDeps"] == True: + continue + + if not options.verbose: + sys.stdout.write(".") + sys.stdout.flush() + + hasMessage = False + + fileTokens = getTokens(fileDb, fileId, options) + fileDeps = [] + + assembledName = "" + + for token in fileTokens: + if token["type"] == "name" or token["type"] == "builtin": + if assembledName == "": + assembledName = token["source"] + else: + assembledName += ".%s" % token["source"] + + if assembledName in knownIds: + if assembledName != fileId and not assembledName in fileDeps: + fileDeps.append(assembledName) + + assembledName = "" + + elif not (token["type"] == "token" and token["source"] == "."): + if assembledName != "": + assembledName = "" + + if token["type"] == "string" and token["source"] in knownIds and token["source"] != fileId and not token["source"] in fileDeps: + fileDeps.append(token["source"]) + + + if options.verbose: + print " - Analysing %s..." % fileId + + # Updating lists... + optionalDeps = fileEntry["optionalDeps"] + loadtimeDeps = fileEntry["loadtimeDeps"] + runtimeDeps = fileEntry["runtimeDeps"] + + # Removing optional deps from list + for dep in optionalDeps: + if dep in fileDeps: + fileDeps.remove(dep) + + if options.verbose: + + # Checking loadtime dependencies + for dep in loadtimeDeps: + if not dep in fileDeps: + print " - Could not confirm #require(%s) in %s!" % (dep, fileId) + + # Checking runtime dependencies + for dep in runtimeDeps: + if not dep in fileDeps: + print " - Could not confirm #use(%s) in %s!" % (dep, fileId) + + # Adding new content to runtime dependencies + for dep in fileDeps: + if not dep in runtimeDeps and not dep in loadtimeDeps: + if options.verbose: + print " - Adding dependency: %s" % dep + + runtimeDeps.append(dep) + depCounter += 1 + + # store flag to omit it the next run + fileEntry["autoDeps"] = True + + if not hasMessage and not options.verbose: + print + + # print " * Added %s dependencies" % depCounter + + + + +def storeEntryCache(fileDb, options): + cacheCounter = 0 + ignoreDbEntries = [ "tokens", "tree", "path", "pathId", "encoding", "resourceInput", "resourceOutput", "listIndex", "classPath", "classUri" ] + + for fileId in fileDb: + fileEntry = fileDb[fileId] + + if fileEntry["cached"] == True: + continue + + # Store flag + fileEntry["cached"] = True + + # Copy entries + fileEntryCopy = {} + for key in fileEntry: + if not key in ignoreDbEntries: + fileEntryCopy[key] = fileEntry[key] + + filetool.storeCache(fileEntry["cachePath"], fileEntryCopy) + cacheCounter += 1 + + if cacheCounter == 0: + print " * No classes were modified" + else: + print " * %s classes were modified" % cacheCounter + + + + +def indexFile(filePath, filePathId, classPath, listIndex, classEncoding, classUri, resourceInput, resourceOutput, options, fileDb={}, moduleDb={}): + + ######################################## + # Checking cache + ######################################## + + useCache = False + loadCache = False + cachePath = None + + if options.cacheDirectory != None: + cachePath = os.path.join(filetool.normalize(options.cacheDirectory), filePathId + "-entry.pcl") + useCache = True + + if not filetool.checkCache(filePath, cachePath, getInternalModTime(options)): + loadCache = True + + + + ######################################## + # Loading file content / cache + ######################################## + + if loadCache: + fileEntry = filetool.readCache(cachePath) + fileId = filePathId + + else: + fileContent = filetool.read(filePath, classEncoding) + + # Extract ID + fileContentId = extractFileContentId(fileContent) + + # Search for valid ID + if fileContentId == None: + print " - Could not extract ID from file: %s. Fallback to path %s!" % (filePath, filePathId) + fileId = filePathId + + else: + fileId = fileContentId + + if fileId != filePathId: + print " - ID mismatch: CONTENT=%s != PATH=%s" % (fileContentId, filePathId) + sys.exit(1) + + fileEntry = { + "autoDeps" : False, + "cached" : False, + "cachePath" : cachePath, + "optionalDeps" : extractOptional(fileContent), + "loadtimeDeps" : extractLoadtimeDeps(fileContent, fileId), + "runtimeDeps" : extractRuntimeDeps(fileContent, fileId), + "afterDeps" : extractAfterDeps(fileContent, fileId), + "loadDeps" : extractLoadDeps(fileContent, fileId), + "resources" : extractResources(fileContent, fileId), + "embeds" : extractEmbeds(fileContent), + "modules" : extractModules(fileContent) + } + + + + ######################################## + # Additional data + ######################################## + + # We don't want to cache these items + fileEntry["path"] = filePath + fileEntry["pathId"] = filePathId + fileEntry["encoding"] = classEncoding + fileEntry["resourceInput"] = resourceInput + fileEntry["resourceOutput"] = resourceOutput + fileEntry["classUri"] = classUri + fileEntry["listIndex"] = listIndex + fileEntry["classPath"] = classPath + + + ######################################## + # Registering file + ######################################## + + # Register to file database + fileDb[fileId] = fileEntry + + # Register to module database + for moduleId in fileEntry["modules"]: + if moduleDb.has_key(moduleId): + moduleDb[moduleId].append(fileId) + else: + moduleDb[moduleId] = [ fileId ] + + + + + +def indexSingleScriptInput(classPath, listIndex, options, fileDb={}, moduleDb={}): + classPath = filetool.normalize(classPath) + counter = 0 + + # Search for other indexed lists + if len(options.classEncoding) > listIndex: + classEncoding = options.classEncoding[listIndex] + else: + classEncoding = "utf-8" + + if len(options.classUri) > listIndex: + classUri = options.classUri[listIndex] + else: + classUri = None + + if len(options.resourceInput) > listIndex: + resourceInput = options.resourceInput[listIndex] + else: + resourceInput = None + + if len(options.resourceOutput) > listIndex: + resourceOutput = options.resourceOutput[listIndex] + else: + resourceOutput = None + + for root, dirs, files in os.walk(classPath): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for files + for fileName in files: + if os.path.splitext(fileName)[1] == config.JSEXT: + filePath = os.path.join(root, fileName) + filePathId = filePath.replace(classPath + os.sep, "").replace(config.JSEXT, "").replace(os.sep, ".") + + indexFile(filePath, filePathId, classPath, listIndex, classEncoding, classUri, resourceInput, resourceOutput, options, fileDb, moduleDb) + counter += 1 + + return counter + + +def indexScriptInput(options): + if options.cacheDirectory != None: + filetool.directory(options.cacheDirectory) + + print " * Indexing class paths... " + + fileDb = {} + moduleDb = {} + listIndex = 0 + + for classPath in options.classPath: + print " - Indexing: %s" % classPath + counter = indexSingleScriptInput(classPath, listIndex, options, fileDb, moduleDb) + print " - %s classes were found" % counter + listIndex += 1 + + if options.enableAutoDependencies: + resolveAutoDeps(fileDb, options) + + if options.cacheDirectory != None: + storeEntryCache(fileDb, options) + + return fileDb, moduleDb + + + + + +""" +Simple resolver, just try to add items and put missing stuff around +the new one. +""" +def addIdWithDepsToSortedList(sortedList, fileDb, fileId): + if not fileDb.has_key(fileId): + print " * Error: Couldn't find required file: %s" % fileId + return False + + # Test if already in + if not fileId in sortedList: + + # Including loadtime dependencies + for loadtimeDepId in fileDb[fileId]["loadtimeDeps"]: + if loadtimeDepId == fileId: break; + addIdWithDepsToSortedList(sortedList, fileDb, loadtimeDepId) + + # Including after dependencies + for afterDepId in fileDb[fileId]["afterDeps"]: + if afterDepId == fileId: break; + addIdWithDepsToSortedList(sortedList, fileDb, afterDepId) + + # Add myself + if not fileId in sortedList: + sortedList.append(fileId) + + # Include runtime dependencies + for runtimeDepId in fileDb[fileId]["runtimeDeps"]: + addIdWithDepsToSortedList(sortedList, fileDb, runtimeDepId) + + # Include load dependencies + for loadDepId in fileDb[fileId]["loadDeps"]: + addIdWithDepsToSortedList(sortedList, fileDb, loadDepId) + + + + + +""" +Search for dependencies, but don't add them. Just use them to put +the new class after the stuff which is required (if it's included, too) +""" +def addIdWithoutDepsToSortedList(sortedList, fileDb, fileId): + if not fileDb.has_key(fileId): + print " * Error: Couldn't find required file: %s" % fileId + return False + + # Test if already in + if not fileId in sortedList: + + # Search sortedList for files which needs this one and are already included + lowestIndex = None + currentIndex = 0 + for lowId in sortedList: + for lowDepId in getResursiveLoadDeps([], fileDb, lowId, lowId): + if lowDepId == fileId and (lowestIndex == None or currentIndex < lowestIndex): + lowestIndex = currentIndex + + currentIndex += 1 + + # Insert at defined index or just append new entry + if lowestIndex != None: + sortedList.insert(lowestIndex, fileId) + else: + sortedList.append(fileId) + + + + +def getResursiveLoadDeps(deps, fileDb, fileId, ignoreId=None): + if fileId in deps: + return + + if fileId != ignoreId: + deps.append(fileId) + + # Including loadtime dependencies + for loadtimeDepId in fileDb[fileId]["loadtimeDeps"]: + getResursiveLoadDeps(deps, fileDb, loadtimeDepId) + + # Including after dependencies + for afterDepId in fileDb[fileId]["afterDeps"]: + getResursiveLoadDeps(deps, fileDb, afterDepId) + + return deps + + + + + +def getSortedList(options, fileDb, moduleDb): + includeWithDeps = [] + excludeWithDeps = [] + includeWithoutDeps = [] + excludeWithoutDeps = [] + + sortedIncludeList = [] + sortedExcludeList = [] + + + + # INCLUDE + + # Add Modules and Files (with deps) + if options.includeWithDeps: + for include in options.includeWithDeps: + if include in moduleDb: + includeWithDeps.extend(moduleDb[include]) + + else: + regexp = textutil.toRegExp(include) + + for fileId in fileDb: + if regexp.search(fileId): + if not fileId in includeWithDeps: + includeWithDeps.append(fileId) + + + # Add Modules and Files (without deps) + if options.includeWithoutDeps: + for include in options.includeWithoutDeps: + if include in moduleDb: + includeWithoutDeps.extend(moduleDb[include]) + + else: + regexp = textutil.toRegExp(include) + + for fileId in fileDb: + if regexp.search(fileId): + if not fileId in includeWithoutDeps: + includeWithoutDeps.append(fileId) + + + + + + + # Add all if both lists are empty + if len(options.includeWithDeps) == 0 and len(options.includeWithoutDeps) == 0: + for fileId in fileDb: + includeWithDeps.append(fileId) + + # Sorting include (with deps) + for fileId in includeWithDeps: + addIdWithDepsToSortedList(sortedIncludeList, fileDb, fileId) + + # Sorting include (without deps) + for fileId in includeWithoutDeps: + addIdWithoutDepsToSortedList(sortedIncludeList, fileDb, fileId) + + + + # EXCLUDE + + # Add Modules and Files (with deps) + if options.excludeWithDeps: + for exclude in options.excludeWithDeps: + if exclude in moduleDb: + excludeWithDeps.extend(moduleDb[exclude]) + + else: + regexp = textutil.toRegExp(exclude) + + for fileId in fileDb: + if regexp.search(fileId): + if not fileId in excludeWithDeps: + excludeWithDeps.append(fileId) + + + # Add Modules and Files (without deps) + if options.excludeWithoutDeps: + for exclude in options.excludeWithoutDeps: + if exclude in moduleDb: + excludeWithoutDeps.extend(moduleDb[exclude]) + + else: + regexp = textutil.toRegExp(exclude) + + for fileId in fileDb: + if regexp.search(fileId): + if not fileId in excludeWithDeps: + excludeWithoutDeps.append(fileId) + + + + + + + # Sorting exclude (with deps) + for fileId in excludeWithDeps: + addIdWithDepsToSortedList(sortedExcludeList, fileDb, fileId) + + # Sorting exclude (without deps) + for fileId in excludeWithoutDeps: + addIdWithoutDepsToSortedList(sortedExcludeList, fileDb, fileId) + + + + + # MERGE + + # Remove excluded files from included files list + for fileId in sortedExcludeList: + if fileId in sortedIncludeList: + sortedIncludeList.remove(fileId) + + + + # RETURN + + return sortedIncludeList diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/mapper.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/mapper.py new file mode 100755 index 0000000000..58fb4f442f --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/mapper.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +table = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + +def convert(current): + # Possibilities with each character + # 1: 36 = 36 + # 2: 36*36 = 1296 + # 3: 36*36*36 = 46656 + + res = "" + length = len(table) - 1 + + if current / length > 0: + res += convert(current / length) + + res += table[current % length] + + return res diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/migrator.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/migrator.py new file mode 100755 index 0000000000..26bd14521b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/migrator.py @@ -0,0 +1,326 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# +################################################################################ + +import sys, re, os +import config, filetool, treegenerator, tokenizer, compiler, textutil + +def entryCompiler(line): + # protect escaped equal symbols + line = line.replace("\=", "----EQUAL----") + + splitLine = line.split("=") + + if len(splitLine) != 2: + print " - Malformed entry: %s" % line + return + + orig = splitLine[0].strip() + repl = splitLine[1].strip() + + #print "%s :: %s" % (orig, value) + + # recover protected equal symbols + orig = orig.replace("----EQUAL----", "=") + repl = repl.replace("----EQUAL----", "=") + + return {"expr":re.compile(orig), "orig":orig, "repl":repl} + + + + +def regtool(content, regs, patch, options): + for patchEntry in regs: + matches = patchEntry["expr"].findall(content) + itercontent = content + line = 1 + + for fragment in matches: + + # Replacing + if patch: + content = patchEntry["expr"].sub(patchEntry["repl"], content, 1) + # Debug + if options.verbose: + print " - Replacing pattern '%s' to '%s'" % (patchEntry["orig"], patchEntry["repl"]) + + else: + # Search for first match position + pos = itercontent.find(fragment) + pos = patchEntry["expr"].search(itercontent).start() + + # Update current line + line += len((itercontent[:pos] + fragment).split("\n")) - 1 + + # Removing leading part til matching part + itercontent = itercontent[pos+len(fragment):] + + # Debug + if options.verbose: + print " - Matches %s in %s" % (patchEntry["orig"], line) + + print " - line %s : (%s)" % (line, patchEntry["orig"]) + print " %s" % patchEntry["repl"] + + return content + + + + +def getHtmlList(options): + htmlList = [] + + for htmlDir in options.migrationInput: + for root, dirs, files in os.walk(htmlDir): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for files + for fileName in files: + if os.path.splitext(fileName)[1] in [ ".js", ".html", ".htm", ".php", ".asp", ".jsp" ]: + htmlList.append(os.path.join(root, fileName)) + + return htmlList + + + +def handle(fileList, fileDb, options): + confPath = os.path.join(os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), "migration"), options.migrationTarget) + + infoPath = os.path.join(confPath, "info") + patchPath = os.path.join(confPath, "patches") + + importedModule = False + infoList = [] + patchList = [] + htmlList = getHtmlList(options) + + + + + print " * Number of script input files: %s" % len(fileList) + print " * Number of HTML input files: %s" % len(htmlList) + print " * Update to version: %s" % options.migrationTarget + + + + print " * Searching for patch module..." + + for root, dirs, files in os.walk(confPath): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for files + for fileName in files: + filePath = os.path.join(root, fileName) + + if os.path.splitext(fileName)[1] != config.PYEXT: + continue + + if fileName == "patch.py": + print " - Importing..." + + if not root in sys.path: + sys.path.insert(0, root) + + import patch + importedModule = True + + + + + + + + emptyLine = re.compile("^\s*$") + + + + print " * Searching for info expression data..." + + for root, dirs, files in os.walk(infoPath): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for files + for fileName in files: + filePath = os.path.join(root, fileName) + + fileContent = textutil.any2Unix(filetool.read(filePath, "utf-8")) + infoList.append({"path":filePath, "content":fileContent.split("\n")}) + + if options.verbose: + print " - %s" % filePath + + print " - Number of info files: %s" % len(infoList) + + print " - Compiling expressions..." + + compiledInfos = [] + + for infoFile in infoList: + print " - %s" % os.path.basename(infoFile["path"]) + for line in infoFile["content"]: + if emptyLine.match(line) or line.startswith("#") or line.startswith("//"): + continue + + compiled = entryCompiler(line) + if compiled != None: + compiledInfos.append(compiled) + + print " - Number of infos: %s" % len(compiledInfos) + + + + + print " * Searching for patch expression data..." + + for root, dirs, files in os.walk(patchPath): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for files + for fileName in files: + filePath = os.path.join(root, fileName) + + fileContent = textutil.any2Unix(filetool.read(filePath, "utf-8")) + patchList.append({"path":filePath, "content":fileContent.split("\n")}) + + if options.verbose: + print " - %s" % filePath + + print " - Number of patch files: %s" % len(patchList) + + print " - Compiling expressions..." + + compiledPatches = [] + + for patchFile in patchList: + print " - %s" % os.path.basename(patchFile["path"]) + for line in patchFile["content"]: + if emptyLine.match(line) or line.startswith("#") or line.startswith("//"): + continue + + compiled = entryCompiler(line) + if compiled != None: + compiledPatches.append(compiled) + + print " - Number of patches: %s" % len(compiledPatches) + + + + + + + + + print + print " FILE PROCESSING:" + print "----------------------------------------------------------------------------" + + if len(fileList) > 0: + print " * Processing script files:" + + for fileId in fileList: + fileEntry = fileDb[fileId] + + filePath = fileEntry["path"] + fileEncoding = fileEntry["encoding"] + + print " - %s" % fileId + + # Read in original content + fileContent = filetool.read(filePath, fileEncoding) + patchedContent = fileContent + + # Apply patches + if importedModule: + tree = treegenerator.createSyntaxTree(tokenizer.parseStream(patchedContent)) + + # If there were any changes, compile the result + if patch.patch(fileId, tree): + patchedContent = compiler.compile(tree, True) + + patchedContent = regtool(patchedContent, compiledPatches, True, options) + patchedContent = regtool(patchedContent, compiledInfos, False, options) + + # Write file + if patchedContent != fileContent: + print " - Store modifications..." + filetool.save(filePath, patchedContent, fileEncoding) + + print " * Done" + + + + if len(htmlList) > 0: + print " * Processing HTML files:" + + for filePath in htmlList: + print " - %s" % filePath + + # Read in original content + fileContent = filetool.read(filePath) + + patchedContent = fileContent + patchedContent = regtool(patchedContent, compiledPatches, True, options) + patchedContent = regtool(patchedContent, compiledInfos, False, options) + + # Write file + if patchedContent != fileContent: + print " - Store modifications..." + filetool.save(filePath, patchedContent) + + print " * Done" + + + + + + + + + + + +###################################################################### +# MAIN LOOP +###################################################################### + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py new file mode 100755 index 0000000000..2503357c84 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +# -*- coding: iso-8859-1 -*- +# Written by Martin v. Lwis <loewis@informatik.hu-berlin.de> +# Plural forms support added by alexander smishlajev <alex@tycobka.lv> + +""" +Generate qooxdoo message catalog from textual translation description. + +This program converts a textual Uniforum-style message catalog (.po file) into +a qooxdoo JavaScript catalog (.js file). This is essentially the same function as the +GNU msgfmt program, however, it is a simpler implementation. + +Usage: msgfmt.py [OPTIONS] filename.po + +Options: + -d directory + --output-directory=directory + Specify the output directory to write to. If omitted, output will the current directory + + -n namespace + --namespace=namespace + JavaScript target namespace + + -h + --help + Print this message and exit. + + -V + --version + Display version information and exit. +""" + +import sys +import os +import getopt +import struct +import array + +__version__ = "1.1" + +MESSAGES = {} + + +def usage (ecode, msg=''): + """ + Print usage and msg and exit with given code. + """ + print >> sys.stderr, __doc__ + if msg: + print >> sys.stderr, msg + sys.exit(ecode) + + +def add (msgid, transtr, fuzzy): + """ + Add a non-fuzzy translation to the dictionary. + """ + global MESSAGES + if not fuzzy and transtr and not transtr.startswith('\0'): + MESSAGES[msgid] = transtr + + +def escapeJS(str): + str = str.replace('"', '\\"') + str = str.replace("'", "\\'") + return str + + +def generate(infile, languageCode, namespace): + global MESSAGES + if namespace != "": namespace += "." + if len(languageCode.split("_")) > 1: + requireString = "#require(%s%s)" % (namespace, languageCode.split("_")[0]) + else: + requireString = "" + + output = '''/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL 1.0: http://www.eclipse.org/org/documents/epl-v10.php + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + * Fabian Jakobs (fjakobs) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.Locale) +%s +************************************************************************ */ + +/* +WARNING: This file is generated by the gettext tools from %s. Do not edit it by hand. +*/ + +qx.Locale.define("%s%s", +{ +''' % (requireString, infile, namespace, languageCode) + + translations = [] + normalizedMessages = {} + for msg in MESSAGES: + keys = msg.split("\0"); + if len(keys) <= 1: + normalizedMessages[msg] = MESSAGES[msg] + continue + values = MESSAGES[msg].split("\0"); + for i in range(len(keys)): + normalizedMessages[keys[i]] = values[i] + + for msg in normalizedMessages: + if msg == "": continue + translations.append(' "%s": "%s"' % (msg, escapeJS(normalizedMessages[msg]))) + output += (",\n").join(translations) + output += "\n});" + #print output + return output + + +def make (filename, outdir, namespace): + ID = 1 + STR = 2 + global MESSAGES + MESSAGES = {} + + # Compute .mo name from .po name and arguments + if filename.endswith('.po'): + infile = filename + else: + infile = filename + '.po' + + basename = os.path.splitext(os.path.basename(infile))[0] + outfile = os.path.join(outdir, basename + '.js') + + try: + lines = open(infile).readlines() + except IOError, msg: + print >> sys.stderr, msg + sys.exit(1) + + section = None + fuzzy = 0 + + # Parse the catalog + msgid = msgstr = '' + lno = 0 + for l in lines: + lno += 1 + # If we get a comment line after a msgstr, this is a new entry + if l[0] == '#' and section == STR: + add(msgid, msgstr, fuzzy) + section = None + fuzzy = 0 + # Record a fuzzy mark + if l[:2] == '#,' and (l.find('fuzzy') >= 0): + fuzzy = 1 + # Skip comments + if l[0] == '#': + continue + # Start of msgid_plural section, separate from singular form with \0 + if l.startswith('msgid_plural'): + msgid += '\0' + l = l[12:] + # Now we are in a msgid section, output previous section + elif l.startswith('msgid'): + if section == STR: + add(msgid, msgstr, fuzzy) + section = ID + l = l[5:] + msgid = msgstr = '' + # Now we are in a msgstr section + elif l.startswith('msgstr'): + section = STR + l = l[6:] + # Check for plural forms + if l.startswith('['): + # Separate plural forms with \0 + if not l.startswith('[0]'): + msgstr += '\0' + # Ignore the index - must come in sequence + l = l[l.index(']') + 1:] + # Skip empty lines + l = l.strip() + if not l: + continue + # XXX: Does this always follow Python escape semantics? + l = eval(l) + if section == ID: + msgid += l + elif section == STR: + msgstr += l + else: + print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \ + 'before:' + print >> sys.stderr, l + sys.exit(1) + # Add last entry + if section == STR: + add(msgid, msgstr, fuzzy) + + # Compute output + output = generate(infile, basename, namespace) + + + try: + open(outfile,"w").write(output) + except IOError,msg: + print >> sys.stderr, msg + + + +def main (): + try: + opts, args = getopt.getopt(sys.argv[1:], 'hVd:n:', + ['help', 'version', 'output-directory=', 'namespace=']) + except getopt.error, msg: + usage(1, msg) + + outdir = "." + ns = "" + # parse options + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + elif opt in ('-V', '--version'): + print >> sys.stderr, "msgfmt.py", __version__ + sys.exit(0) + elif opt in ('-d', '--output-directory'): + outdir = arg + elif opt in ('-n', '--namespace'): + ns = arg + # do it + if not args: + print >> sys.stderr, 'No input file given' + print >> sys.stderr, "Try `msgfmt --help' for more information." + return + + for filename in args: + make(filename, outdir, ns) + + +if __name__ == '__main__': + main() diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/obfuscator.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/obfuscator.py new file mode 100755 index 0000000000..dd69f45f4b --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/obfuscator.py @@ -0,0 +1,456 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import tree, mapper + +qooxdooStart = [ + # Properties + "_modify", "_check", "_unitDetection", + + # Layout + "_applyRuntime", + + # Cache Properties + "_resetRuntime", "_compute", "_change", "_invalidate", "_recompute", + + # Property Methods + "set", "get", "force", "reset" +] + +qooxdooNames = [ + # Demos + "ROOT_LOGGER", "removeAllAppenders", "addAppender", "DivAppender", + + # qx.ui.core.Widget.initApplyMethods + "_style", + "setStyleProperty", "removeStyleProperty", + "constant", "Core", + + # Inheritance + "qx", "Proto", "Class" +] + +systemNames = [ + # Statement + "break","catch","continue","do","for","in","finally","function","if","else","return","switch","case","default", + "this","throw","try","var","while","with", + + # Operator + "delete","false","instanceof","new","null","true","typeof","void", + + # Function + "GetObject","ScriptEngine","ScriptEngineBuildVersion","ScriptEngineMajorVersion","ScriptEngineMinorVersion", + + # Objects + "ActiveXObject","Arguments","Array","Boolean","Date","Dictionary","Enumerator","Error","FileSystemObject", + "Function","Global","Image","Math","Number","Object","RegExp","String","VBArray", + + # Property + "$1","$2","$3","$4","$5", + "$6","$7","$8","$9","arguments","arity","callee","caller","constructor","description","E","global","ignoreCase", + "index","Infinity","input","lastIndex","leftContext","length","LN2","LN10","LOG2E","LOG10E","MAX_VALUE", + "MIN_VALUE","message","multiline","name","NaN","NEGATIVE_INFINITY","number","PI","POSITIVE_INFINITY", + "prototype","rightContext","source","SQRT1_2","SQRT2","undefined", + + # Methods + "abs","acos","anchor","apply","asin", + "atan","atan2","atEnd","big","blink","bold","call","ceil","charAt","charCodeAt","compile","concat","cos", + "decodeURI","decodeURIComponent","dimensions","encodeURI","encodeURIComponent","escape","eval","exec", + "exp","fixed","floor","fontcolor","fontsize","fromCharCode","getDate","getDay","getFullYear","getHours", + "getItem","getMilliseconds","getMinutes","getMonth","getSeconds","getTime","getTimezoneOffset","getUTCDate", + "getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds", + "getVarDate","getYear","hasOwnProperty","indexOf","isFinite","isNaN","isPrototypeOf","italics","item","join", + "lastIndexOf","lastMatch","lastParen","lbound","link","localeCompare","log","match","max","min","moveFirst", + "moveNext","parse","parseFloat","parseInt","pop","pow","propertyIsEnumerable","push","random","replace", + "reverse","round","search","setDate","setFullYear","setHours","setMilliseconds","setMinutes","setMonth", + "setSeconds","setTime","setUTCDate","setUTCFullYear","setUTCHours","setUTCMilliseconds","setUTCMinutes", + "setUTCMonth","setUTCSeconds","setYear","shift","sin","slice","small","sort","splice","split","sqrt","strike", + "sub","substr","substring","sup","tan","test","toArray","toDateString","toExponential","toFixed","toGMTString", + "toLocaleDateString","toLocaleLowerCase","toLocaleString","toLocaleTimeString","toLocaleUpperCase","toLowerCase", + "toPrecision","toString","toTimeString","toUpperCase","toUTCString","ubound","unescape","unshift","unwatch","UTC", + "valueOf","watch", + + # HTML Entity + "nbsp","lt","gt","amp","apos","quot","cent","pound","yen","sect","copy","reg","times","divide", + + # DHTML Constant + "ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_FRAGMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE", + "ELEMENT_NODE","ENTITY_NODE","ENTITY_REFERENCE_NODE","NOTATION_NODE","PROCESSING_INSTRUCTION_NODE","TEXT_NODE", + "NOTATION_FRAGMENT_NODE","DOMSTRING_SIZE_ERR","HIERARCHY_REQUEST_ERR","INDEX_SIZE_ERR","INUSE_ATTRIBUTE_ERR", + "INVALID_ACCESS_ERR","INVALID_CHARACTER_ERR","INVALID_MODIFICATION_ERR","INVALID_STATE_ERR","NAMESPACE_ERR", + "NOT_FOUND_ERR","NOT_SUPPORTED_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","SYNTAX_ERR", + "WRONG_DOCUMENT_ERR","ABORT","BLUR","CLICK","CHANGE","DBLCLICK","DRAGDROP","ERROR","FOCUS","KEYDOWN","KEYPRESS", + "KEYUP","LOAD","MOUSEDOWN","MOUSEMOVE","MOUSEOUT","MOUSEOVER","MOUSEUP","MOVE","RESET","RESIZE","SELECT","SUBMIT", + "UNLOAD","NODE_BEFORE","NODE_AFTER","NODE_BEFORE_AND_AFTER","NODE_INSIDE","START_TO_START","START_TO_END", + "END_TO_END","END_TO_START","BAD_BOUNDARYPOINTS_ERR","INVALID_NODE_TYPE_ERR","UNKNOWN_RULE","STYLE_RULE", + "CHARSET_RULE","IMPORT_RULE","MEDIA_RULE","FONT_FACE_RULE","PAGE_RULE","CSS_UNKNOWN","CSS_NUMBER","CSS_PERCENTAGE", + "CSS_EMS","CSS_EXS","CSS_PX","CSS_CM","CSS_MM","CSS_IN","CSS_PT","CSS_PC","CSS_DEG","CSS_RAD","CSS_GRAD","CSS_MS", + "CSS_S","CSS_HZ","CSS_KHZ","CSS_DIMENSION","CSS_STRING","CSS_URI","CSS_IDENT","CSS_ATTR","CSS_COUNTER","CSS_RECT", + "CSS_RGBCOLOR","CSS_INHERIT","CSS_PRIMITIVE_VALUE","CSS_VALUE_LIST","CSS_CUSTOM","STATE_MAXIMIZED","STATE_MINIMIZED", + "STATE_NORMAL","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING", + "DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", + "CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","MOUSEDOWN","MOUSEUP","MOUSEOVER","MOUSEOUT","MOUSEMOVE", + "MOUSEDRAG","CLICK","DBLCLICK","KEYDOWN","KEYUP","KEYPRESS","DRAGDROP","FOCUS","BLUR","SELECT","CHANGE", + "RESET","SUBMIT","SCROLL","LOAD","UNLOAD","XFER_DONE","ABORT","ERROR","LOCATE","MOVE","RESIZE","FORWARD", + "HELP","BACK","TEXT","ALT_MASK","CONTROL_MASK","SHIFT_MASK","META_MASK","SCROLL_PAGE_UP","SCROLL_PAGE_DOWN", + "DOM_VK_CANCEL","DOM_VK_HELP","DOM_VK_BACK_SPACE","DOM_VK_TAB","DOM_VK_CLEAR","DOM_VK_RETURN","DOM_VK_ENTER", + "DOM_VK_SHIFT","DOM_VK_CONTROL","DOM_VK_ALT","DOM_VK_PAUSE","DOM_VK_CAPS_LOCK","DOM_VK_ESCAPE","DOM_VK_SPACE", + "DOM_VK_PAGE_UP","DOM_VK_PAGE_DOWN","DOM_VK_END","DOM_VK_HOME","DOM_VK_LEFT","DOM_VK_UP","DOM_VK_RIGHT","DOM_VK_DOWN", + "DOM_VK_PRINTSCREEN","DOM_VK_INSERT","DOM_VK_DELETE","DOM_VK_0","DOM_VK_1","DOM_VK_2","DOM_VK_3","DOM_VK_4","DOM_VK_5", + "DOM_VK_6","DOM_VK_7","DOM_VK_8","DOM_VK_9","DOM_VK_SEMICOLON","DOM_VK_EQUALS","DOM_VK_A","DOM_VK_B","DOM_VK_C", + "DOM_VK_D","DOM_VK_E","DOM_VK_F","DOM_VK_G","DOM_VK_H","DOM_VK_I","DOM_VK_J","DOM_VK_K","DOM_VK_L","DOM_VK_M", + "DOM_VK_N","DOM_VK_O","DOM_VK_P","DOM_VK_Q","DOM_VK_R","DOM_VK_S","DOM_VK_T","DOM_VK_U","DOM_VK_V","DOM_VK_W", + "DOM_VK_X","DOM_VK_Y","DOM_VK_Z","DOM_VK_CONTEXT_MENU","DOM_VK_NUMPAD0","DOM_VK_NUMPAD1","DOM_VK_NUMPAD2", + "DOM_VK_NUMPAD3","DOM_VK_NUMPAD4","DOM_VK_NUMPAD5","DOM_VK_NUMPAD6","DOM_VK_NUMPAD7","DOM_VK_NUMPAD8","DOM_VK_NUMPAD9", + "DOM_VK_MULTIPLY","DOM_VK_ADD","DOM_VK_SEPARATOR","DOM_VK_SUBTRACT","DOM_VK_DECIMAL","DOM_VK_DIVIDE","DOM_VK_F1", + "DOM_VK_F2","DOM_VK_F3","DOM_VK_F4","DOM_VK_F5","DOM_VK_F6","DOM_VK_F7","DOM_VK_F8","DOM_VK_F9","DOM_VK_F10", + "DOM_VK_F11","DOM_VK_F12","DOM_VK_F13","DOM_VK_F14","DOM_VK_F15","DOM_VK_F16","DOM_VK_F17","DOM_VK_F18","DOM_VK_F19", + "DOM_VK_F20","DOM_VK_F21","DOM_VK_F22","DOM_VK_F23","DOM_VK_F24","DOM_VK_NUM_LOCK","DOM_VK_SCROLL_LOCK","DOM_VK_COMMA", + "DOM_VK_PERIOD","DOM_VK_SLASH","DOM_VK_BACK_QUOTE","DOM_VK_OPEN_BRACKET","DOM_VK_BACK_SLASH","DOM_VK_CLOSE_BRACKET", + "DOM_VK_QUOTE","DOM_VK_META","MODIFICATION","ADDITION","REMOVAL","INVALID_EXPRESSION_ERR","TYPE_ERR","ANY_TYPE", + "NUMBER_TYPE","STRING_TYPE","BOOLEAN_TYPE","UNORDERED_NODE_ITERATOR_TYPE","ORDERED_NODE_ITERATOR_TYPE", + "UNORDERED_NODE_SNAPSHOT_TYPE","ORDERED_NODE_SNAPSHOT_TYPE","ANY_UNORDERED_NODE_TYPE","FIRST_ORDERED_NODE_TYPE", + "UNSPECIFIED_EVENT_TYPE_ERR", + + # DHTML Object + "a","AbstractView","acronym","address","applet","area","Attr","attribute","b", + "BarProp","base","baseFont","bdo","BeforeUnloadEvent","bgSound","big","blockQuote","body","br","button", + "CanvasGradient","CanvasPattern","CanvasRenderingContext2D","caption","CDATASection","center","CharacterData", + "ChromeWindow","cite","clientInformation","clipboardData","code","col","colGroup","comment","Comment","Counter", + "CSS2Properties","CSSCharsetRule","CSSFontFaceRule","CSSImportRule","CSSMediaRule","CSSPageRule","CSSPrimitiveValue", + "CSSRGBColor","CSSRule","CSSRuleList","CSSStyleDeclaration","CSSStyleRule","CSSStyleSheet","CSSUnknownRule", + "CSSValue","CSSValueList","currentStyle","custom","dataTransfer","dd","defaults","del","dfn","dir","div","dl", + "document","Document","DocumentCSS","DocumentEvent","DocumentFragment","DocumentRange","DocumentStyle", + "DocumentType","DocumentView","DOMException","DOMImplementation","DOMImplementationCSS","DOMParser", + "DOMStringList","dt","Element","ElementCSSInlineStyle","em","embed","Entity","EntityReference","event", + "Event","EventException","EventListener","EventTarget","external","fieldSet","font","form","frame","frameSet", + "h","head","history","History","hr","html","HTMLAnchorElement","HTMLAppletElement","HTMLAreaElement", + "HTMLBRElement","HTMLBaseElement","HTMLBaseFontElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement", + "HTMLCollection","HTMLDListElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLDOMImplementation", + "HTMLElement","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement", + "HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement", + "HTMLImageElement","HTMLInputElement","HTMLIsIndexElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement", + "HTMLLinkElement","HTMLMapElement","HTMLMenuElement","HTMLMetaElement","HTMLModElement","HTMLOListElement", + "HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOptionsCollection","HTMLParagraphElement", + "HTMLParamElement","HTMLPreElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLStyleElement", + "HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableElement","HTMLTableRowElement", + "HTMLTableSectionElement","HTMLTextAreaElement","HTMLTitleElement","HTMLUListElement","i","iframe","ImageDocument", + "img","implementation","IMPORT","input","ins","isIndex","kbd","KeyboardEvent","KeyEvent","label","legend","li", + "link","LinkStyle","listing","location","Location","map","marquee","MediaList","menu","meta","MimeType", + "MimeTypeArray","MouseEvent","MutationEvent","NamedNodeMap","NameList","namespace","navigator","Navigator", + "nextID","noBR","Node","NodeList","noFrames","noScript","Notation","NSDocument","NSEvent","NSHTMLAnchorElement", + "NSHTMLAreaElement","NSHTMLButtonElement","NSHTMLDocument","NSHTMLElement","NSHTMLFormElement","NSHTMLFrameElement", + "NSHTMLHRElement","NSHTMLImageElement","NSHTMLInputElement","NSHTMLOptionElement","NSHTMLSelectElement", + "NSHTMLTextAreaElement","NSRange","NSUIEvent","object","ol","optGroup","option","p","page","PageTransitionEvent", + "param","plainText","Plugin","PluginArray","popup","PopupBlockedEvent","pre","ProcessingInstruction","q","Range", + "RangeException","Rect","RGBColor","rt","ruby","rule","runtimeStyle","s","samp","SchemaLoader","screen","Screen", + "script","select","selection","Selection","small","SmartCardEvent","span","strike","strong","style","styleSheet", + "StyleSheet","StyleSheetList","sub","sup","Supports","table","TableSectionElement","tBody","td","Text","textArea", + "TextNode","TextRange","TextRectangle","tFoot","th","tHead","title","tr","TreeWalker","tt","u","UIEvent","ul", + "userProfile","URI","var","ViewCSS","wbr","WebBrowser","WebNavigation","window","Window","Window2","WindowCollection", + "WindowInternal","xml","XMLDocument","XMLHttpRequest","XMLSerializer","xmp","XPathEvaluator","XPathException", + "XPathExpression","XPathNSResolver","XPathResult","XPointerResult","XSLTProcessor", + + # DHTML Property + "_content","abbr","accelerator", + "accept","acceptCharset","accessKey","action","activeElement","additive","align","aLink","alinkColor","allowTransparency", + "alt","altHTML","altKey","altLeft","anchorNode","anchorOffset","appCodeName","APPLICATION","appMinorVersion","appName", + "appVersion","archive","async","ATOMICSELECTION","attrChange","attrName","autocomplete","availHeight","availLeft", + "availTop","availWidth","azimuth","axis","background","backgroundAttachment","backgroundColor","backgroundImage", + "backgroundPosition","backgroundPositionX","backgroundPositionY","backgroundRepeat","balance","Banner", + "BannerAbstract","BaseHref","baseURI","behavior","bgColor","BGCOLOR","bgProperties","blockDirection","blue", + "booleanValue","border","borderBottom","borderBottomColor","borderBottomStyle","borderBottomWidth","borderCollapse", + "borderColor","borderColorDark","borderColorLight","borderLeft","borderLeftColor","borderLeftStyle","borderLeftWidth", + "borderRight","borderRightColor","borderRightStyle","borderRightWidth","borderSpacing","borderStyle","borderTop", + "borderTopColor","borderTopStyle","borderTopWidth","borderWidth","borderWidths","bottom","bottomMargin","boundingHeight", + "boundingLeft","boundingTop","boundingWidth","browserDOMWindow","browserLanguage","bubbles","bufferDepth","button", + "cancelable","cancelBubble","canHaveChildren","canHaveHTML","canvas","caption","captionSide","cellIndex","cellPadding", + "cellSpacing","ch","channel","charCode","charset","checked","characterSet","chOff","cite","classid","className", + "clear","clientHeight","clientLeft","clientTop","clientWidth","clientX","clientY","clip","clipBottom","clipLeft", + "clipRight","clipTop","cloneContents","closed","code","codeBase","codeType","collapsed","color","colorDepth","cols", + "colSpan","columnNumber","commonAncestorContainer","compact","compatMode","complete","content","contentDocument", + "contentEditable","contentOverflow","contentType","contentWindow","cookie","cookieEnabled","coords","Count", + "counterIncrement","counterReset","cpuClass","crypto","cssFloat","cssRules","cssText","cssValueType","ctrlKey", + "ctrlLeft","cue","cueAfter","cueBefore","current","currentNode","currentTarget","cursor","data","dataFld","DATAFLD", + "dataFormatAs","DATAFORMATAS","dataPageSize","dataSrc","DATASRC","dateTime","declare","defaultCharset", + "defaultChecked","defaultSelected","defaultStatus","defaultValue","defaultView","defer","description","designMode", + "detail","deviceXDPI","deviceYDPI","dialogArguments","dialogHeight","dialogLeft","dialogTop","dialogWidth","dir", + "direction","directories","disabled","display","displays","doctype","document","documentElement","documentURI", + "domain","domConfig","dropEffect","dynsrc","effectAllowed","elevation","emptyCells","enabledPlugin","encoding", + "enctype","endContainer","endOffset","entities","event","eventPhase","expandEntityReferences","expando", + "explicitOriginalTarget","face","fgColor","FieldDelim","fileCreatedDate","fileModifiedDate","filename","fileSize", + "fileUpdatedDate","fillStyle","filter","firstChild","focusNode","focusOffset","font","fontFamily","fontSize", + "fontSizeAdjust","fontSmoothingEnabled","fontStretch","fontStyle","fontVariant","fontWeight","form","formName", + "frame","frameBorder","frameElement","frameSpacing","fromElement","fullScreen","galleryImg","globalAlpha", + "globalCompositeOperation","green","hash","hasLayout","headers","height","hidden","hideFocus","history","host", + "hostname","href","hreflang","hspace","htmlFor","htmlText","httpEquiv","id","identifier","imageIsOverflowing", + "imageIsResized","imageRequest","imageResizingEnabled","imeMode","implementation","indeterminate","index","inner", + "innerHeight","innerHTML","innerText","innerWidth","inputEncoding","internalSubset","invalidIteratorState","isChar", + "isCollapsed","isContentEditable","isDisabled","isMap","isMultiLine","isOpen","isTextEdit","isTrusted","keyCode", + "label","lang","language","lastChild","lastModified","layerX","layerY","layoutFlow","layoutGrid","layoutGridChar", + "layoutGridLine","layoutGridMode","layoutGridType","left","leftMargin","length","letterSpacing","lineBreak","lineCap", + "lineHeight","lineJoin","lineNumber","lineWidth","link","linkColor","listStyle","listStyleImage","listStylePosition", + "listStyleType","localName","location","locationbar","logicalXDPI","logicalYDPI","longDesc","loop","loop","lowsrc", + "lowSrc","margin","marginBottom","marginHeight","marginLeft","marginRight","margins","marginTop","marginWidth", + "markerOffset","marks","maxHeight","maxLength","maxWidth","media","mediaText","menuArguments","menubar","message", + "metaKey","method","Methods","minHeight","minWidth","miterLimit","MozAppearance","MozBackgroundClip", + "MozBackgroundInlinePolicy","MozBackgroundOrigin","MozBinding","MozBorderBottomColors","MozBorderLeftColors", + "MozBorderRadius","MozBorderRadiusBottomleft","MozBorderRadiusBottomright","MozBorderRadiusTopleft", + "MozBorderRadiusTopright","MozBorderRightColors","MozBorderTopColors","MozBoxAlign","MozBoxDirection","MozBoxFlex", + "MozBoxOrdinalGroup","MozBoxOrient","MozBoxPack","MozBoxSizing","MozColumnCount","MozColumnGap","MozColumnWidth", + "MozFloatEdge","MozForceBrokenImageIcon","MozImageRegion","MozMarginEnd","MozMarginStart","MozOpacity","MozOutline", + "MozOutlineColor","MozOutlineOffset","MozOutlineRadius","MozOutlineRadiusBottomleft","MozOutlineRadiusBottomright", + "MozOutlineRadiusTopleft","MozOutlineRadiusTopright","MozOutlineStyle","MozOutlineWidth","MozPaddingEnd", + "MozPaddingStart","MozUserFocus","MozUserInput","MozUserModify","MozUserSelect","multipart","multiple","name", + "nameProp","namespaceURI","naturalHeight","naturalWidth","navigator","newValue","next","nextPage","nextSibling", + "nodeName","nodeType","nodeValue","noHref","noResize","noShade","notationName","notations","noWrap","numberValue", + "object","offscreenBuffering","offsetHeight","offsetLeft","offsetParent","offsetTop","offsetWidth","offsetX", + "offsetY","onBefore","onLine","opacity","opener","originalTarget","orphans","oscpu","outerHeight","outerHTML", + "outerText","outerWidth","outline","outlineColor","outlineOffset","outlineStyle","outlineWidth","overflow","overflowX", + "overflowY","ownerDocument","ownerElement","ownerNode","ownerRule","owningElement","padding","paddingBottom", + "paddingLeft","paddingRight","paddings","paddingTop","page","pageBreakAfter","pageBreakBefore","pageBreakInside", + "pageX","pageXOffset","pageY","pageYOffset","palette","parent","parentElement","parentNode","parentRule", + "parentStyleSheet","parentTextEdit","parentWindow","pathname","pause","pauseAfter","pauseBefore","persisted", + "personalbar","pitch","pitchRange","pixelBottom","pixelDepth","pixelHeight","pixelLeft","pixelRight","pixelTop", + "pixelWidth","pkcs11","platform","playDuring","pluginspage","popupWindowFeatures","popupWindowURI","port","posBottom", + "posHeight","position","posLeft","posRight","posTop","posWidth","preferredStylesheetSet","prefix","previous", + "previousSibling","prevValue","primitiveType","product","productSub","profile","prompt","prompter","propertyName", + "protocol","pseudoClass","publicId","qualifier","quotes","rangeCount","rangeOffset","rangeParent","readOnly", + "readyState","reason","recordNumber","recordset","red","referrer","rel","relatedNode","relatedTarget","repeat", + "requestingWindowURI","responseText","responseXML","result","resultType","returnValue","rev","richness","right", + "rightMargin","root","rowIndex","rows","rowSpan","rubyAlign","rubyOverhang","rubyPosition","rules","saveType", + "scheme","scope","scopeName","screen","screenLeft","screenTop","screenX","screenY","scroll","scrollAmount", + "scrollbar3dLightColor","scrollbarArrowColor","scrollbarBaseColor","scrollbarDarkShadowColor","scrollbarFaceColor", + "scrollbarHighlightColor","scrollbars","scrollbarShadowColor","scrollbarTrackColor","scrollDelay","scrollHeight", + "scrolling","scrollLeft","scrollMaxX","scrollMaxY","scrollTop","scrollX","scrollY","scrollWidth","search", + "sectionRowIndex","SECURITY","securityPolicy","selected","selectedIndex","selectionEnd","selectionStart","selector", + "selectorText","self","separator","shape","sheet","shadowBlur","shadowColor","shadowOffsetX","shadowOffsetY", + "shiftKey","shiftLeft","sidebar","singleNodeValue","size","snapshotLength","sourceIndex","span","speak","speakHeader", + "speakNumeral","speakPunctuation","specified","speechRate","src","srcElement","srcFilter","srcUrn","standby","start", + "startContainer","startOffset","status","statusbar","statusText","stress","strictErrorChecking","stringValue", + "strokeStyle","style","STYLE","styleFloat","styleSheet","suffixes","summary","systemId","systemLanguage","tabIndex", + "tableLayout","tabStop","tagName","tagUrn","target","text","textAlign","textAlignLast","textAutospace","textContent", + "textDecoration","textDecorationBlink","textDecorationLineThrough","textDecorationNone","textDecorationOverline", + "textDecorationUnderline","textIndent","textJustify","textKashidaSpace","textLength","textOverflow","textShadow", + "textTransform","textUnderlinePosition","textZoom","tFoot","tHead","timeStamp","title","tmpRealOriginalTarget", + "toElement","tokenName","toolbar","top","topMargin","trueSpeed","type","typeDetail","unicodeBidi","uniqueID","units", + "unselectable","UNSELECTABLE","updateInterval","URL","URLUnencoded","urn","useMap","userAgent","userLanguage","vAlign", + "value","valueType","vcard_name","vendor","vendorSub","version","verticalAlign","view","viewInheritStyle","viewLink", + "viewMasterTab","visibility","visible","vLink","vlinkColor","voiceFamily","volume","vspace","whatToShow","wheelDelta", + "which","whiteSpace","widows","width","window","windowRoot","windowState","wordBreak","wordSpacing","wordWrap","wrap", + "writingMode","x","XMLDocument","xmlEncoding","XMLNS","xmlStandalone","xmlVersion","XSLDocument","y","zIndex","zoom", + + # DHTML Method + "abort","add","addBehavior","addBinding","addColorStop","addEventListener","AddChannel","AddDesktopComponent", + "addElement","AddFavorite","addImport","addPageRule","addRange","addReadRequest","addRule","adoptNode","alert", + "appendChild","appendData","appendMedium","applyElement","arc","arcTo","assign","atob","attachEvent", + "AutoCompleteSaveForm","AutoScan","back","beginPath","bezierCurveTo","blur","btoa","captureEvents","ChooseColorDlg", + "clear","clearAttributes","clearData","clearInterval","clearParameters","clearRect","clearRequest","clearTimeout", + "click","clip","cloneNode","cloneRange","close","closePath","collapse","collapseToEnd","collapseToStart", + "compareBoundaryPoints","compareDocumentPosition","compareEndPoints","compareNode","comparePoint","componentFromPoint", + "confirm","contains","containsNode","containsNS","createAttribute","createAttributeNS","createCaption", + "createCDATASection","createComment","createContextualFragment","createControlRange","createCSSStyleSheet", + "createDocument","createDocumentFragment","createDocumentType","createElement","createElementNS", + "createEntityReference","createEvent","createEventObject","createExpression","createLinearGradient", + "createHTMLDocument","createNodeIterator","createNSResolver","createPattern","createPopup", + "createProcessingInstruction","createRadialGradient","createRange","createRangeCollection","createStyleSheet", + "createTextNode","createTextRange","createTFoot","createTHead","createTreeWalker","deleteCaption","deleteCell", + "deleteContents","deleteData","deleteFromDocument","deleteMedium","deleteRow","deleteRule","deleteTFoot", + "deleteTHead","detach","detachEvent","disableExternalCapture","dispatchEvent","doImport","doReadRequest", + "doScroll","dragDrop","drawImage","dump","duplicate","elementFromPoint","enableExternalCapture","empty", + "escape","evaluate","evaluateFIXptr","evaluateWithContext","evaluateXPointer","execCommand","execCommandShowHelp", + "execScript","expand","extend","extractContents","fill","fillRect","find","findText","fireEvent","firstPage", + "focus","forward","getAdjacentText","getAllResponseHeaders","getAnonymousElementByAttribute","getAnonymousNodes", + "getAttention","getAttentionWithCycleCount","getAttribute","getAttributeNode","getAttributeNodeNS","getAttributeNS", + "getBindingParent","getBookmark","getBoundingClientRect","getBoxObjectFor","getCharset","getClientRects", + "getComputedStyle","getContext","getCounterValue","getData","getElementById","getElementsByName","getElementsByTagName", + "getElementsByTagNameNS","getExpression","getFeature","getFloatValue","getName","getNamedItem","getNamedItemNS", + "getNamespaceURI","getOverrideStyle","getParameter","getPreventDefault","getPropertyCSSValue","getPropertyPriority", + "getPropertyValue","getRangeAt","getRectValue","getResponseHeader","getRGBColorValue","getSelection","getStringValue", + "getSVGDocument","getUserData","go","hasAttribute","hasAttributeNS","hasAttributes","hasChildNodes","hasFeature", + "hasFocus","hide","home","ImportExportFavorites","importNode","importStylesheet","Init","initEvent","initKeyEvent", + "initMouseEvent","initMutationEvent","initPageTransitionEvent","initPopupBlockedEvent","initUIEvent","inRange", + "insertNode","insertAdjacentElement","insertAdjacentHTML","insertAdjacentText","insertBefore","insertCell","insertData", + "insertRow","insertRule","intersectsNode","isDefaultNamespace","isEqual","isEqualNode","isPointInRange","isSameNode", + "IsSubscribed","isSupported","item","Item","iterateNext","javaEnabled","lastPage","lineTo","load","loadAsync", + "loadBindingDocument","loadOverlay","lookupNamespaceURI","lookupPrefix","maximize","mergeAttributes","minimize", + "move","moveBy","moveEnd","moveRow","moveStart","moveTo","moveToBookmark","moveToElementText","moveToPoint", + "namedItem","namedRecordset","navigate","NavigateAndFind","nextNode","nextPage","normalize","normalizeDocument", + "nSDetach","open","openDialog","openRequest","overrideMimeType","parentElement","parseFromBuffer","parseFromStream", + "parseFromString","pasteHTML","preference","preventBubble","preventCapture","preventDefault","previousNode", + "previousPage","print","processSchemaElement","prompt","quadraticCurveTo","queryCommandEnabled","queryCommandIndeterm", + "queryCommandState","queryCommandSupported","queryCommandText","queryCommandValue","recalc","rect","refresh", + "releaseCapture","releaseEvents","reload","remove","removeAllRanges","removeAttribute","removeAttributeNode", + "removeAttributeNS","removeBehavior","removeBinding","removeChild","removeEventListener","removeExpression", + "removeNamedItem","removeNamedItemNS","removeNode","removeParameter","removeProperty","removeRange","removeRule", + "renameNode","replace","replaceAdjacentText","replaceChild","replaceData","replaceNode","reset","resizeBy", + "resizeTo","restore","restoreImage","restoreImageTo","rotate","routeEvent","save","scale","scroll","scrollBy", + "scrollByLines","scrollByPages","scrollIntoView","scrollTo","select","selectAllChildren","selectionLanguageChange", + "selectNode","selectNodeContents","send","serializeToStream","serializeToString","setActive","setAttribute", + "setAttributeNode","setAttributeNodeNS","setAttributeNS","setBoxObjectFor","setCapture","setCursor","setData", + "setEnd","setEndAfter","setEndBefore","setEndPoint","setExpression","setFloatValue","setInterval","setNamedItem", + "setNamedItemNS","setParameter","setProperty","setPropertyPriority","setRequestHeader","setResizable", + "setSelectionRange","setStart","setStartAfter","setStartBefore","setStringValue","setTimeout","setUserData", + "show","ShowBrowserUI","showHelp","showModalDialog","showModelessDialog","shrinkToFit","sizeToContent", + "snapshotItem","splitText","start","stop","stopPropagation","stroke","strokeRect","submit","substringData", + "supports","surroundContents","swapNode","tags","taintEnabled","toggleImageSize","transformToDocument", + "transformToFragment","translate","unescape","updateCommands","urns","write","writeln", + + # DHTML Event + "onabort","onactivate", + "onafterprint","onafterupdate","onbeforeactivate","onbeforecopy","onbeforecut","onbeforedeactivate","onbeforeeditfocus", + "onbeforepaste","onbeforeprint","onbeforeunload","onbeforeupdate","onblur","onbounce","oncellchange","onchange", + "onclick","onclose","oncontextmenu","oncontrolselect","oncopy","oncut","ondataavailable","ondatasetchanged", + "ondatasetcomplete","ondblclick","ondeactivate","ondrag","ondragdrop","ondragend","ondragenter","ondragleave", + "ondragover","ondragstart","ondrop","onerror","onerrorupdate","onfilterchange","onfinish","onfocus","onfocusin", + "onfocusout","onhelp","onkeydown","onkeypress","onkeyup","onlayoutcomplete","onload","onlosecapture","onmousedown", + "onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onmove","onmoveend", + "onmovestart","onpaint","onpaste","onprogress","onpropertychange","onreadystatechange","onreset","onresize", + "onresizeend","onresizestart","onrowenter","onrowexit","onrowsdelete","onrowsinserted","onscroll","onselect", + "onselectionchange","onselectstart","onstart","onstop","onsubmit","onunload", + + # DHTML Collection + "all","anchors","applets","areas", + "attributes","behaviorUrns","blockFormats","bookmarks","boundElements","cells","childNodes","children","classes", + "Components","controllers","controlRange","elements","embeds","filters","fonts","forms","frames","ids","images", + "imports","interfaces","layers","links","mimeTypes","namespaces","options","pages","plugins","rows","rules","scripts", + "styleSheets","tBodies","TextRange","TextRectangle", + + # IE Default Behavior + "anchorClick","anim","clientCaps","download","homePage","httpFolder", + "mediaBar","saveFavorite","saveHistory","saveSnapshot","userData", + + # IE Default Behavior Object + "MediaItem","PlaylistInfo", + + # IE Default Behavior Property + "attributeCount", + "availHeight","availWidth","bufferDepth","colorDepth","connectionType","cookieEnabled","cpuClass","currentItem", + "disabledUI","duration","enabled","expires","folder","hasNextItem","height","image","javaEnabled","name","nextItem", + "openState","platform","playlistInfo","playState","sound","sourceURL","statics","systemLanguage","target", + "userLanguage","width","XMLDocument", + + # IE Default Behavior Method + "addComponentRequest","addDABehavior","clearComponentRequest","compareVersions", + "doComponentRequest","getAttribute","getAttributeName","getComponentVersion","getItemInfo","isComponentInstalled", + "isHomePage","load","navigate","navigateFrame","navigateHomePage","playNext","playURL","removeAttribute", + "removeDABehavior","save","setAttribute","setHomePage","startDownload","stop", + + # IE Default Behavior Event + "onhide","onload","onopenstatechange", + "onplaystatechange","onsave","onshow", + + # XMLHTTP Object Property + "onreadystatechange","readyState","responseBody","responseStream","responseText", + "responseXML","status","statusText", + + # XMLHTTP Object Method + "abort","getAllResponseHeaders","getResponseHeader","open","send", + "setRequestHeader" +] + + +def search(node, names): + + if node.type == "assignment": + left = node.getChild("left", False) + + if left: + variable = left.getChild("variable", False) + + if variable: + last = variable.getLastChild() + first = variable.getFirstChild() + + if last == first: + if last.type == "identifier": + pass + + elif last.type == "identifier": + name = last.get("name") + + ignore = False + + if name in systemNames or name in qooxdooNames: + ignore = True + + if not ignore: + for item in qooxdooStart: + if name.startswith(item): + ignore = True + + # only apply to names which starts with an underscore + if not name.startswith("_"): + ignore = True + + if not ignore: + if not names.has_key(name): + # print "Add %s" % name + + names[name] = 1 + else: + names[name] += 1 + + if node.hasChildren(): + for child in node.children: + search(child, names) + + return names + + + + +def update(node, list, prefix): + counter = 0 + + if node.type == "identifier": + idenName = node.get("name", False) + + if idenName != None and idenName in list: + replName = "%s%s" % (prefix, mapper.convert(list.index(idenName))) + node.set("name", replName) + counter += 1 + + # print " - Replaced '%s' with '%s'" % (idenName, replName) + + if node.hasChildren(): + for child in node.children: + counter += update(child, list, prefix) + + return counter + + + +def sort(names): + temp = [] + + for name in names: + temp.append({ "name" : name, "number" : names[name] }) + + temp.sort(lambda x, y: y["number"]-x["number"]) + + list = [] + + for item in temp: + list.append(item["name"]) + + print " * Found %s names" % len(list) + + return list diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/optparseext.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/optparseext.py new file mode 100755 index 0000000000..8184413f68 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/optparseext.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Andreas Ecker (ecker) +# +################################################################################ + +from optparse import * + +class ExtendAction(Option): + ACTIONS = Option.ACTIONS + ("extend",) + STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",) + TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",) + + def take_action(self, action, dest, opt, value, values, parser): + if action == "extend": + lvalue = value.split(",") + values.ensure_value(dest, []).extend(lvalue) + else: + Option.take_action( + self, action, dest, opt, value, values, parser) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/resources.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/resources.py new file mode 100755 index 0000000000..58cc1549f6 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/resources.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import os, shutil, re +import config, textutil + + + + +def copy(options, sortedIncludeList, fileDb): + if options.enableResourceFilter: + print " * Processing embeds..." + + definedEmbeds = {} + compiledEmbeds = {} + + for fileId in sortedIncludeList: + fileEmbeds = fileDb[fileId]["embeds"] + + + if len(fileEmbeds) > 0: + print " - Found %i embeds in %s" % (len(fileEmbeds), fileId) + + for fileEmbed in fileEmbeds: + resourceNS = fileEmbed["namespace"] + resourceId = fileEmbed["id"] + embedEntry = fileEmbed["entry"] + + if not definedEmbeds.has_key(resourceNS): + definedEmbeds[resourceNS] = {} + + if not definedEmbeds[resourceNS].has_key(resourceId): + definedEmbeds[resourceNS][resourceId] = [] + + if not embedEntry in definedEmbeds[resourceNS][resourceId]: + definedEmbeds[resourceNS][resourceId].append(embedEntry) + + + # We must do this in a separate step because otherwise the string compare + # above does not work (how to compare compiled regexp?) + + print " * Compiling embeds..." + + for resourceNS in definedEmbeds: + for resourceId in definedEmbeds[resourceNS]: + for embedEntry in definedEmbeds[resourceNS][resourceId]: + if not compiledEmbeds.has_key(resourceNS): + compiledEmbeds[resourceNS] = {} + + if not compiledEmbeds[resourceNS].has_key(resourceId): + compiledEmbeds[resourceNS][resourceId] = [] + + compiledEmbeds[resourceNS][resourceId].append(textutil.toRegExp(embedEntry)) + + + + print " * Syncing files..." + + for fileId in sortedIncludeList: + filePath = fileDb[fileId]["path"] + fileResources = fileDb[fileId]["resources"] + + if len(fileResources) > 0: + print " - Found %i resources in %s" % (len(fileResources), fileId) + + for fileResource in fileResources: + resourceNS = fileResource["namespace"] + resourceId = fileResource["id"] + resourceEntry = fileResource["entry"] + + if options.enableResourceFilter: + if compiledEmbeds.has_key(resourceNS) and compiledEmbeds[resourceNS].has_key(resourceId): + resourceFilter = compiledEmbeds[resourceNS][resourceId] + else: + resourceFilter = [] + + + + # Preparing source directory + + sourceDirectory = os.path.join(fileDb[fileId]["resourceInput"], resourceEntry) + + try: + os.listdir(sourceDirectory) + except OSError: + print " - Source directory isn't readable! Ignore resource!" + continue + + + # Preparing destination directory + + destinationDirectory = os.path.join(fileDb[fileId]["resourceOutput"], resourceEntry) + + + + + + print " - Copying %s [%s.%s]" % (resourceEntry, resourceNS, resourceId) + + for root, dirs, files in os.walk(sourceDirectory): + + # Filter ignored directories + for ignoredDir in config.DIRIGNORE: + if ignoredDir in dirs: + dirs.remove(ignoredDir) + + # Searching for items (resource files) + for itemName in files: + + # Generate absolute source file path + itemSourcePath = os.path.join(root, itemName) + + # Extract relative path and directory + itemRelPath = itemSourcePath.replace(sourceDirectory + os.sep, "") + itemRelDir = os.path.dirname(itemRelPath) + + # Filter items + if options.enableResourceFilter: + include = False + + for filterEntry in resourceFilter: + if filterEntry.search(itemRelPath): + include = True + break + + if not include: + continue + + # Generate destination directory and file path + itemDestDir = os.path.join(destinationDirectory, itemRelDir) + itemDestPath = os.path.join(itemDestDir, itemName) + + # Check/Create destination directory + if not os.path.exists(itemDestDir): + os.makedirs(itemDestDir) + + # Copy file + if options.verbose: + print " - Copying file: %s" % itemRelPath + + shutil.copyfile(itemSourcePath, itemDestPath) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/settings.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/settings.py new file mode 100755 index 0000000000..aee16e542e --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/settings.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import sys, re, os, optparse +import filetool + + + + +def generate(options): + if len(options.defineRuntimeSetting) == 0: + return "" + + typeFloat = re.compile("^([0-9\-]+\.[0-9]+)$") + typeNumber = re.compile("^([0-9\-])$") + + settingsStr = "" + + settingsStr += 'if(!window.qx)qx={};' + + if options.addNewLines: + settingsStr += "\n" + + settingsStr += 'if(!qx.Settings)qx.Settings={};' + + if options.addNewLines: + settingsStr += "\n" + + settingsStr += 'if(!qx.Settings._customSettings)qx.Settings._customSettings={};' + + if options.addNewLines: + settingsStr += "\n" + + for setting in options.defineRuntimeSetting: + settingSplit = setting.split(":") + settingKey = settingSplit.pop(0) + settingValue = ":".join(settingSplit) + + settingKeySplit = settingKey.split(".") + settingKeyName = settingKeySplit.pop() + settingKeySpace = ".".join(settingKeySplit) + + checkStr = 'if(!qx.Settings._customSettings["%s"])qx.Settings._customSettings["%s"]={};' % (settingKeySpace, settingKeySpace) + if not checkStr in settingsStr: + settingsStr += checkStr + + if options.addNewLines: + settingsStr += "\n" + + settingsStr += 'qx.Settings._customSettings["%s"]["%s"]=' % (settingKeySpace, settingKeyName) + + if settingValue == "false" or settingValue == "true" or typeFloat.match(settingValue) or typeNumber.match(settingValue): + settingsStr += '%s' % settingValue + + else: + settingsStr += '"%s"' % settingValue.replace("\"", "\\\"") + + settingsStr += ";" + + if options.addNewLines: + settingsStr += "\n" + + return settingsStr + + + + +def main(): + parser = optparse.OptionParser() + + parser.add_option("-d", "--define-runtime-setting", action="append", dest="defineRuntimeSetting", metavar="NAMESPACE.KEY:VALUE", default=[], help="Define a setting.") + parser.add_option("-s", "--settings-script-file", dest="settingsScriptFile", metavar="FILENAME", help="Name of settings script file.") + parser.add_option("-n", "--add-new-lines", action="store_true", dest="addNewLines", default=False, help="Keep newlines in compiled files.") + + (options, args) = parser.parse_args() + + if options.settingsScriptFile == None: + print " * Please define the output file!" + sys.exit(1) + + if len(options.defineRuntimeSetting) == 0: + print " * Please define at least one runtime setting!" + sys.exit(1) + + print " * Saving settings to %s" % options.settingsScriptFile + filetool.save(options.settingsScriptFile, generate(options)) + + + + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/stringoptimizer.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/stringoptimizer.py new file mode 100755 index 0000000000..3796192c29 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/stringoptimizer.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +import tree + + +def search(node, verbose=False): + return search_loop(node, {}, verbose) + + +def search_loop(node, stringMap={}, verbose=False): + if node.type == "constant" and node.get("constantType") == "string": + + if verbose: + pvalue = node.get("value") + if isinstance(pvalue, unicode): + pvalue = pvalue.encode("utf-8") + print " - Found: %s" % pvalue + + if node.get("detail") == "singlequotes": + quote = "'" + elif node.get("detail") == "doublequotes": + quote = '"' + + value = "%s%s%s" % (quote, node.get("value"), quote) + + if value in stringMap: + stringMap[value] += 1 + else: + stringMap[value] = 1 + + if check(node, verbose): + for child in node.children: + search_loop(child, stringMap, verbose) + + return stringMap + + + +def check(node, verbose=False): + # Needs children + if not node.hasChildren(): + return False + + # Try to find all output statements + if node.type == "call": + cu = node + nx = cu.getChild("operand", False) + + if nx != None: + cu = nx + + all = cu.getAllChildrenOfType("identifier") + + for ch in all: + if ch.get("name", False) in [ "Error", "debug", "info", "warning", "error", "alert" ]: + if verbose: + print " - Ignore output statement at line: %s" % ch.get("line") + return False + + # Try to find all constant assignments (ns.UPPER = string) + elif node.type == "assignment": + left = node.getChild("left", False) + if left != None: + var = left.getChild("variable", False) + + if var != None: + last = var.getLastChild() + + if last.type == "identifier" and last.get("name").isupper(): + if verbose: + print " - Ignore constant assignment at line: %s" % last.get("line") + return False + + # Try to find all constant assignments from Maps ({ UPPER : string }) + elif node.type == "keyvalue": + if node.get("key").isupper(): + if verbose: + print " - Ignore constant key value at line: %s" % node.get("line") + return False + + return True + + + +def sort(stringMap): + stringList = [] + + for value in stringMap: + stringList.append({ "value" : value, "number" : stringMap[value] }) + + stringList.sort(lambda x, y: y["number"]-x["number"]) + + return stringList + + + + +def replace(node, stringList, var="$", verbose=False): + if node.type == "constant" and node.get("constantType") == "string": + if node.get("detail") == "singlequotes": + quote = "'" + elif node.get("detail") == "doublequotes": + quote = '"' + + oldvalue = "%s%s%s" % (quote, node.get("value"), quote) + + pos = 0 + for item in stringList: + if item["value"] == oldvalue: + newvalue = "%s[%s]" % (var, pos) + + if verbose: + poldvalue = oldvalue + if isinstance(poldvalue, unicode): + poldvalue = poldvalue.encode("utf-8") + print " - Replace: %s => %s" % (poldvalue, newvalue) + + line = node.get("line") + + + # GENERATE IDENTIFIER + + newidentifier = tree.Node("identifier") + newidentifier.set("line", line) + + childidentifier = tree.Node("identifier") + childidentifier.set("line", line) + childidentifier.set("name", var) + + newidentifier.addChild(childidentifier) + + + + # GENERATE KEY + + newkey = tree.Node("key") + newkey.set("line", line) + + newconstant = tree.Node("constant") + newconstant.set("line", line) + newconstant.set("constantType", "number") + newconstant.set("value", "%s" % pos) + + newkey.addChild(newconstant) + + + + # COMBINE CHILDREN + + newnode = tree.Node("accessor") + newnode.set("line", line) + newnode.set("optimized", True) + newnode.set("original", oldvalue) + newnode.addChild(newidentifier) + newnode.addChild(newkey) + + + # REPLACE NODE + + node.parent.replaceChild(node, newnode) + break + + pos += 1 + + if check(node, verbose): + for child in node.children: + replace(child, stringList, var, verbose) + + + +def replacement(stringList, var="$"): + repl = "%s=[" % var + + for item in stringList: + repl += "%s," % (item["value"]) + + repl = repl[:-1] + "];" + + return repl diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/svninfo.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/svninfo.py new file mode 100755 index 0000000000..9e7025d0bd --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/svninfo.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import os, sys, re, optparse +import filetool + + + +DIRINFO = re.compile("dir\n([0-9]+)\nhttps://.*/svnroot/qooxdoo/(\w+)/(\w+)/", re.M | re.S) + + + +def query(path): + if os.path.exists(path): + entries = os.path.join(path, ".svn", "entries") + + if os.path.exists(entries): + content = filetool.read(entries) + + mtch = DIRINFO.search(content) + if mtch: + folder = mtch.group(2) + if folder in [ "tags", "branches" ]: + folder = mtch.group(3) + + revision = mtch.group(1) + + return revision, folder + + return None, None + + + +def format(revision, folder): + return "(r%s) [%s]" % (revision, folder) + + + +if __name__ == '__main__': + try: + parser = optparse.OptionParser() + + (options, args) = parser.parse_args() + + revision, folder = query(args[0]) + if revision != None: + print format(revision, folder) + + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/textile.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/textile.py new file mode 100755 index 0000000000..cc6f2873c9 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/textile.py @@ -0,0 +1,2910 @@ +#!/usr/bin/env python +# _*_ coding: latin1 _*_ + +"""This is Textile +A Humane Web Text Generator + +TODO: +* Make it work with Python 2.1. +* Make it work with Python 1.5.2? Or that's too optimistic? + +--- +To get an overview of all PyTextile's features, simply +type 'tell me about textile.' in a single line. +""" + +__authors__ = ["Roberto A. F. De Almeida (roberto@dealmeida.net)", + "Mark Pilgrim (f8dy@diveintomark.org)"] +__version__ = "2.0.10" +__date__ = "2004/10/06" +__copyright__ = """ +Copyright (c) 2004, Roberto A. F. De Almeida, http://dealmeida.net/ +Copyright (c) 2003, Mark Pilgrim, http://diveintomark.org/ +All rights reserved. + +Original PHP version: +Version 1.0 +21 Feb, 2003 + +Copyright (c) 2003, Dean Allen, www.textism.com +All rights reserved. + +Parts of the documentation and some of the regular expressions are (c) Brad +Choate, http://bradchoate.com/. Thanks, Brad! +""" +__license__ = """ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name Textile nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +""" +__history__ = """ +1.0 - 2003/03/19 - MAP - initial release +1.01 - 2003/03/19 - MAP - don't strip whitespace within <pre> tags; + map high-bit ASCII to HTML numeric entities +1.02 - 2003/03/19 - MAP - changed hyperlink qtag expression to only + match valid URL characters (per RFC 2396); fixed preg_replace to + not match across line breaks (solves lots of problems with + mistakenly matching overlapping inline markup); fixed whitespace + stripping to only strip whitespace from beginning and end of lines, + not immediately before and after HTML tags. +1.03 - 2003/03/20 - MAP - changed hyperlink qtag again to more + closely match original Textile (fixes problems with links + immediately followed by punctuation -- somewhere Dean is + grinning right now); handle curly apostrophe with "ve" + contraction; clean up empty titles at end. +1.04 - 2003/03/23 - MAP - lstrip input to deal with extra spaces at + beginning of first line; tweaked list loop to handle consecutive lists +1.1 - 2003/06/06 - MAP - created initial test suite for links and images, + and fixed a bunch of related bugs to pass them +1.11 - 2003/07/20 - CL - don't demoronise unicode strings; handle + "they're" properly +1.12 - 2003/07/23 - GW - print debug messages to stderr; handle bq(cite). +1.13 - 2003/07/23 - MAP - wrap bq. text in <p>...</p> +2 - 2004/03/26 - RAFA - rewritten from (almost) scratch to include + all features from Textile 2 and a little bit more. +2.0.1 - 2004/04/02 - RAFA - Fixed validating function that uses uTidyLib. +2.0.2 - 2004/04/02 - RAFA - Fixed problem with caps letters in URLs. +2.0.3 - 2004/04/19 - RAFA - Multiple classes are allowed, thanks to Dave + Anderson. The "lang" attribute is now removed from <code>, to be valid + XHTML. Fixed <span class="caps">UCAS</span> problem. +2.0.4 - 2004/05/20 - RAFA, CLB - Added inline formatting to table cells. + Curt Bergmann fixed a bug with the colspan formatting. Added Amazon + Associated id. +2.0.5 - 2004/06/01 - CL - Applied patch from Chris Lawrence to (1) fix + that Amazon associates ID was being added to all search URIs, (2) + customize the Amazon site used with the AMAZON variable, and (3) added + an "isbn" URI type that links directly to an Amazon product by ISBN or + Amazon ASIN. +2.0.6 - 2004/06/02 - RAFA - Fixed CAPS problem, again. I hope this is + the last time. +2.0.7 - 2004/06/04 - RAFA, MW - Fixed bullet macro, thanks to Adam + Messinger. Added patch from Michal Wallace changing {}.pop() for + compatibility with Python 2.2.x. +2.0.8 - 2004/06/25 - RAFA - Strip tags when adding the content from a + footnote to the reference link. Escaped '<' and '>' in the self- + generated documentation. +2.0.9 - 2004/10/04 - RAFA - In images, if ALT is not defined, add an + empty attribute. Added "LaTeX" style open/close quotes. Fixed a bug + where the acronym definition was being formatted with inline rules. + Handle "broken" lines correctly, removing the <br /> from inside + split HTML tags. +2.0.10 - 2004/10/06 - RAFA, LO - Escape all non-escaped ampersands. + Applied "trivial patch" from Ludvig Omholt to remove newline right + after the <pre> tag. +""" + +# Set your encoding here. +ENCODING = 'utf-8' + +# Output? Non-ASCII characters will be automatically +# converted to XML entities if you choose ASCII. +OUTPUT = 'utf-8' + +# PyTextile can optionally validate the generated +# XHTML code. We can use either mxTidy or uTidyLib. +# You can change the default behaviour here. +VALIDATE = 0 + +# If you want h1. to be translated to something other +# than <h1>, change this offset. You can also pass it +# as an argument to textile(). +HEAD_OFFSET = 0 + +# If you want to use itex2mml, specify the full path +# to the binary here. You can download it from here: +# http://golem.ph.utexas.edu/~distler/blog/files/itexToMML.tar.gz +itex2mml = None +#itex2mml = '/usr/local/bin/itex2MML' +#itex2mml = '/usr/people/almeida/bin/itex2MML' + +# PyTextile can optionally sanitize the generated XHTML, +# which is good for weblog comments or if you don't trust +# yourself. +SANITIZE = 1 + +# Turn debug on? +DEBUGLEVEL = 0 + +# Amazon associate for links: "keywords":amazon +# If you don't have one, please consider leaving mine here as +# a small compensation for writing PyTextile. It's commented +# off as default. +#amazon_associate_id = 'bomtempo-21' +amazon_associate_id = None + +#AMAZON = 'www.amazon.co.uk' +AMAZON = 'www.amazon.com' + +import re +import sys +import os +import sgmllib +import unicodedata + + +def _in_tag(text, tag): + """Extracts text from inside a tag. + + This function extracts the text from inside a given tag. + It's useful to get the text between <body></body> or + <pre></pre> when using the validators or the colorizer. + """ + if text.count('<%s' % tag): + text = text.split('<%s' % tag, 1)[1] + if text.count('>'): + text = text.split('>', 1)[1] + if text.count('</%s' % tag): + text = text.split('</%s' % tag, 1)[0] + + text = text.strip().replace('\r\n', '\n') + + return text + + +# If you want PyTextile to automatically colorize +# your Python code, you need the htmlizer module +# from Twisted. (You can just grab this file from +# the distribution, it has no other dependencies.) +try: + #from twisted.python import htmlizer + import htmlizer + from StringIO import StringIO + + def _color(code): + """Colorizer Python code. + + This function wraps a text string in a StringIO, + and passes it to the htmlizer function from + Twisted. + """ + # Fix line continuations. + code = preg_replace(r' \\\n', ' \\\\\n', code) + + code_in = StringIO(code) + code_out = StringIO() + + htmlizer.filter(code_in, code_out) + + # Remove <pre></pre> from input. + code = _in_tag(code_out.getvalue(), 'pre') + + # Fix newlines. + code = code.replace('<span class="py-src-newline">\n</span>', '<span class="py-src-newline"></span>\n') + + return code + +except ImportError: + htmlizer = None + + +# PyTextile can optionally validate the generated +# XHTML code using either mxTidy or uTidyLib. +try: + # This is mxTidy. + from mx.Tidy import Tidy + + def _tidy1(text): + """mxTidy's XHTML validator. + + This function is a wrapper to mxTidy's validator. + """ + nerrors, nwarnings, text, errortext = Tidy.tidy(text, output_xhtml=1, numeric_entities=1, wrap=0) + return _in_tag(text, 'body') + + _tidy = _tidy1 + +except ImportError: + try: + # This is uTidyLib. + import tidy + + def _tidy2(text): + """uTidyLib's XHTML validator. + + This function is a wrapper to uTidyLib's validator. + """ + text = tidy.parseString(text, output_xhtml=1, add_xml_decl=0, indent=0, tidy_mark=0) + return _in_tag(str(text), 'body') + + _tidy = _tidy2 + + except ImportError: + _tidy = None + + +# This is good for debugging. +def _debug(s, level=1): + """Outputs debug information to sys.stderr. + + This function outputs debug information if DEBUGLEVEL is + higher than a given treshold. + """ + if DEBUGLEVEL >= level: print >> sys.stderr, s + + +############################# +# Useful regular expressions. +parameters = { + # Horizontal alignment. + 'align': r'''(?:(?:<>|[<>=]) # Either '<>', '<', '>' or '=' + (?![^\s]*(?:<>|[<>=]))) # Look-ahead to ensure it happens once + ''', + + # Horizontal padding. + 'padding': r'''(?:[\(\)]+) # Any number of '(' and/or ')' + ''', + + # Class and/or id. + 'classid': r'''( # + (?:\(\#[\w]+\)) # (#id) + | # + (?:\((?:[\w]+(?:\s[\w]+)*) # + (?:\#[\w]+)?\)) # (class1 class2 ... classn#id) or (class1 class2 ... classn) + ) # + (?![^\s]*(?:\([\w#]+\))) # must happen once + ''', + + # Language. + 'lang': r'''(?:\[[\w-]+\]) # [lang] + (?![^\s]*(?:\[.*?\])) # must happen once + ''', + + # Style. + 'style': r'''(?:{[^\}]+}) # {style} + (?![^\s]*(?:{.*?})) # must happen once + ''', +} + +res = { + # Punctuation. + 'punct': r'''[\!"#\$%&'()\*\+,\-\./:;<=>\?@\[\\\]\^_`{\|}\~]''', + + # URL regular expression. + 'url': r'''(?=[a-zA-Z0-9./#]) # Must start correctly + (?: # Match the leading part (proto://hostname, or just hostname) + (?:ftp|https?|telnet|nntp) # protocol + :// # :// + (?: # Optional 'username:password@' + \w+ # username + (?::\w+)? # optional :password + @ # @ + )? # + [-\w]+(?:\.\w[-\w]*)+ # hostname (sub.example.com) + | # + (?:mailto:)? # Optional mailto: + [-\+\w]+ # username + \@ # at + [-\w]+(?:\.\w[-\w]*)+ # hostname + | # + (?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\.)+ # domain without protocol + (?:com\b # TLD + | edu\b # + | biz\b # + | gov\b # + | in(?:t|fo)\b # .int or .info + | mil\b # + | net\b # + | org\b # + | museum\b # + | aero\b # + | coop\b # + | name\b # + | pro\b # + | [a-z][a-z]\b # two-letter country codes + ) # + )? # + (?::\d+)? # Optional port number + (?: # Rest of the URL, optional + /? # Start with '/' + [^.!,?;:"'<>()\[\]{}\s\x7F-\xFF]* # Can't start with these + (?: # + [.!,?;:]+ # One or more of these + [^.!,?;:"'<>()\[\]{}\s\x7F-\xFF]+ # Can't finish with these + #'" # # or ' or " + )* # + )? # + ''', + + + # Block attributes. + 'battr': r'''(?P<parameters> # + (?: %(align)s # alignment + | %(classid)s # class and/or id + | %(padding)s # padding tags + | %(lang)s # [lang] + | %(style)s # {style} + )+ # + )? # + ''' % parameters, + + # (Un)ordered list attributes. + 'olattr': r'''(?P<olparameters> # + (?: %(align)s # alignment + | ((?:\(\#[\w]+\)) # (#id) + | # + (?:\((?:[\w]+(?:\s[\w]+)*) # + (?:\#[\w]+)?\)) # (class1 class2 ... classn#id) or (class1 class2 ... classn) + ) # + | %(padding)s # padding tags + | %(lang)s # [lang] + | %(style)s # {style} + )+ # + )? # + ''' % parameters, + + # List item attributes. + 'liattr': r'''(?P<liparameters> # + (?: %(align)s # alignment + | %(classid)s # class and/or id + | %(padding)s # padding tags + | %(lang)s # [lang] + | %(style)s # {style} + )+ # + )? # + ''' % parameters, + + # Qtag attributes. + 'qattr': r'''(?P<parameters> # + (?: %(classid)s # class and/or id + | %(lang)s # [lang] + | %(style)s # {style} + )+ # + )? # + ''' % parameters, + + # Link attributes. + 'lattr': r'''(?P<parameters> # Links attributes + (?: %(align)s # alignment + | %(classid)s # class and/or id + | %(lang)s # [lang] + | %(style)s # {style} + )+ # + )? # + ''' % parameters, + + # Image attributes. + 'iattr': r'''(?P<parameters> # + (?: # + (?: [<>]+ # horizontal alignment tags + (?![^\s]*(?:[<>]))) # (must happen once) + | # + (?: [\-\^~]+ # vertical alignment tags + (?![^\s]*(?:[\-\^~]))) # (must happen once) + | %(classid)s # class and/or id + | %(padding)s # padding tags + | %(style)s # {style} + )+ # + )? # + ''' % parameters, + + # Resize attributes. + 'resize': r'''(?: # + (?:([\d]+%?)x([\d]+%?)) # 20x10 + | # + (?: # or + (?:([\d]+)%?w\s([\d]+)%?h) # 10h 20w + | # or + (?:([\d]+)%?h\s([\d]+)%?w) # 20w 10h + ) # + )? # + ''', + + # Table attributes. + 'tattr': r'''(?P<parameters> # + (?: # + (?: [\^~] # vertical alignment + (?![^\s]*(?:[\^~]))) # (must happen once) + | %(align)s # alignment + | %(lang)s # [lang] + | %(style)s # {style} + | %(classid)s # class and/or id + | %(padding)s # padding + | _ # is this a header row/cell? + | \\\d+ # colspan + | /\d+ # rowspan + )+ # + )? # + ''' % parameters, +} + + +def preg_replace(pattern, replacement, text): + """Alternative re.sub that handles empty groups. + + This acts like re.sub, except it replaces empty groups with '' + instead of raising an exception. + """ + + def replacement_func(matchobj): + counter = 1 + rc = replacement + _debug(matchobj.groups()) + for matchitem in matchobj.groups(): + if not matchitem: + matchitem = '' + + rc = rc.replace(r'\%s' % counter, matchitem) + counter += 1 + + return rc + + p = re.compile(pattern) + _debug(pattern) + + return p.sub(replacement_func, text) + + +def html_replace(pattern, replacement, text): + """Replacement outside HTML tags. + + Does a preg_replace only outside HTML tags. + """ + # If there is no html, do a simple search and replace. + if not re.search(r'''<.*>''', text): + return preg_replace(pattern, replacement, text) + + else: + lines = [] + # Else split the text into an array at <>. + for line in re.split('(<.*?>)', text): + if not re.match('<.*?>', line): + line = preg_replace(pattern, replacement, line) + + lines.append(line) + + return ''.join(lines) + + +# PyTextile can optionally sanitize the generated XHTML, +# which is good for weblog comments. This code is from +# Mark Pilgrim's feedparser. +class _BaseHTMLProcessor(sgmllib.SGMLParser): + elements_no_end_tag = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', + 'img', 'input', 'isindex', 'link', 'meta', 'param'] + + def __init__(self): + sgmllib.SGMLParser.__init__(self) + + def reset(self): + self.pieces = [] + sgmllib.SGMLParser.reset(self) + + def normalize_attrs(self, attrs): + # utility method to be called by descendants + attrs = [(k.lower(), sgmllib.charref.sub(lambda m: unichr(int(m.groups()[0])), v).strip()) for k, v in attrs] + attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] + return attrs + + def unknown_starttag(self, tag, attrs): + # called for each start tag + # attrs is a list of (attr, value) tuples + # e.g. for <pre class="screen">, tag="pre", attrs=[("class", "screen")] + strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs]) + if tag in self.elements_no_end_tag: + self.pieces.append("<%(tag)s%(strattrs)s />" % locals()) + else: + self.pieces.append("<%(tag)s%(strattrs)s>" % locals()) + + def unknown_endtag(self, tag): + # called for each end tag, e.g. for </pre>, tag will be "pre" + # Reconstruct the original end tag. + if tag not in self.elements_no_end_tag: + self.pieces.append("</%(tag)s>" % locals()) + + def handle_charref(self, ref): + # called for each character reference, e.g. for " ", ref will be "160" + # Reconstruct the original character reference. + self.pieces.append("&#%(ref)s;" % locals()) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for "©", ref will be "copy" + # Reconstruct the original entity reference. + self.pieces.append("&%(ref)s;" % locals()) + + def handle_data(self, text): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + # Store the original text verbatim. + self.pieces.append(text) + + def handle_comment(self, text): + # called for each HTML comment, e.g. <!-- insert Javascript code here --> + # Reconstruct the original comment. + self.pieces.append("<!--%(text)s-->" % locals()) + + def handle_pi(self, text): + # called for each processing instruction, e.g. <?instruction> + # Reconstruct original processing instruction. + self.pieces.append("<?%(text)s>" % locals()) + + def handle_decl(self, text): + # called for the DOCTYPE, if present, e.g. + # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + # "http://www.w3.org/TR/html4/loose.dtd"> + # Reconstruct original DOCTYPE + self.pieces.append("<!%(text)s>" % locals()) + + def output(self): + """Return processed HTML as a single string""" + return "".join(self.pieces) + + +class _HTMLSanitizer(_BaseHTMLProcessor): + acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', + 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', + 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', + 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', + 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', + 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', + 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', + 'thead', 'tr', 'tt', 'u', 'ul', 'var'] + + acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', + 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', + 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', + 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', + 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', + 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', + 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', + 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', + 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', + 'usemap', 'valign', 'value', 'vspace', 'width'] + + unacceptable_elements_with_end_tag = ['script', 'applet'] + + # This if for MathML. + mathml_elements = ['math', 'mi', 'mn', 'mo', 'mrow', 'msup'] + mathml_attributes = ['mode', 'xmlns'] + + acceptable_elements = acceptable_elements + mathml_elements + acceptable_attributes = acceptable_attributes + mathml_attributes + + def reset(self): + _BaseHTMLProcessor.reset(self) + self.unacceptablestack = 0 + + def unknown_starttag(self, tag, attrs): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack += 1 + return + attrs = self.normalize_attrs(attrs) + attrs = [(key, value) for key, value in attrs if key in self.acceptable_attributes] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + + def unknown_endtag(self, tag): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack -= 1 + return + _BaseHTMLProcessor.unknown_endtag(self, tag) + + def handle_pi(self, text): + pass + + def handle_decl(self, text): + pass + + def handle_data(self, text): + if not self.unacceptablestack: + _BaseHTMLProcessor.handle_data(self, text) + + +class Textiler: + """Textile formatter. + + This is the base class for the PyTextile text processor. + """ + def __init__(self, text=''): + """Instantiate the class, passing the text to be formatted. + + Here we pre-process the text and collect all the link + lookups for later. + """ + self.text = text + + # Basic regular expressions. + self.res = res + + # Smart searches. + self.searches = {} + self.searches['imdb'] = 'http://www.imdb.com/Find?for=%s' + self.searches['google'] = 'http://www.google.com/search?q=%s' + self.searches['python'] = 'http://www.python.org/doc/current/lib/module-%s.html' + if amazon_associate_id: + self.searches['isbn'] = ''.join(['http://', AMAZON, '/exec/obidos/ASIN/%s/', amazon_associate_id]) + self.searches['amazon'] = ''.join(['http://', AMAZON, '/exec/obidos/external-search?mode=blended&keyword=%s&tag=', amazon_associate_id]) + else: + self.searches['isbn'] = ''.join(['http://', AMAZON, '/exec/obidos/ASIN/%s']) + self.searches['amazon'] = ''.join(['http://', AMAZON, '/exec/obidos/external-search?mode=blended&keyword=%s']) + + # These are the blocks we know. + self.signatures = [ + # Paragraph. + (r'''^p # Paragraph signature + %(battr)s # Paragraph attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended paragraph denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.paragraph), + + # Pre-formatted text. + (r'''^pre # Pre signature + %(battr)s # Pre attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended pre denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.pre), + + # Block code. + (r'''^bc # Blockcode signature + %(battr)s # Blockcode attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended blockcode denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.bc), + + # Blockquote. + (r'''^bq # Blockquote signature + %(battr)s # Blockquote attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended blockquote denoted by a second dot + (:(?P<cite> # Optional cite attribute + ( # + %(url)s # URL + | "[\w]+(?:\s[\w]+)*" # "Name inside quotes" + )) # + )? # + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.blockquote), + + # Header. + (r'''^h # Header signature + (?P<header>\d) # Header number + %(battr)s # Header attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended header denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.header), + + # Footnote. + (r'''^fn # Footnote signature + (?P<footnote>[\d]+) # Footnote number + (?P<dot>\.) # . + (?P<extend>\.)? # Extended footnote denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''', self.footnote), + + # Definition list. + (r'''^dl # Definition list signature + %(battr)s # Definition list attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended definition list denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.dl), + + # Ordered list (attributes to first <li>). + (r'''^%(olattr)s # Ordered list attributes + \# # Ordered list signature + %(liattr)s # List item attributes + (?P<dot>\.)? # . + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.ol), + + # Unordered list (attributes to first <li>). + (r'''^%(olattr)s # Unrdered list attributes + \* # Unordered list signature + %(liattr)s # Unordered list attributes + (?P<dot>\.)? # . + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.ul), + + # Escaped text. + (r'''^==?(?P<text>.*?)(==)?$ # Escaped text + ''', self.escape), + + (r'''^(?P<text><.*)$ # XHTML tag + ''', self.escape), + + # itex code. + (r'''^(?P<text> # itex code + \\\[ # starts with \[ + .*? # complicated mathematical equations go here + \\\]) # ends with \] + ''', self.itex), + + # Tables. + (r'''^table # Table signature + %(tattr)s # Table attributes + (?P<dot>\.) # . + (?P<extend>\.)? # Extended blockcode denoted by a second dot + \s # whitespace + (?P<text>.*) # text + ''' % self.res, self.table), + + # Simple tables. + (r'''^(?P<text> + \| + .*) + ''', self.table), + + # About. + (r'''^(?P<text>tell\sme\sabout\stextile\.)$''', self.about), + ] + + + def protectPre(self, text): + regexps = re.compile(r'''^<pre>?(?P<text>.*?)</pre>?$''', re.VERBOSE | re.DOTALL | re.M) + counter = 0 + self.protectedPres = [] + + for item in regexps.findall(text): + text = text.replace(item, "[[[[[REPL%s]]]]]" % counter, 1) + self.protectedPres.append(item) + counter += 1 + + #if len(self.protectedPres) > 0: + # print ">>>> PREPROCESSED: %s items" % len(self.protectedPres) + + return text + + + def preprocess(self): + """Pre-processing of the text. + + Remove whitespace, fix carriage returns. + """ + # Remove whitespace. + self.text = self.text.strip() + + # Zap carriage returns. + self.text = self.text.replace("\r\n", "\n") + self.text = self.text.replace("\r", "\n") + + # Protect existing pre blocks + self.text = self.protectPre(self.text) + + # Minor sanitizing. + self.text = self.sanitize(self.text) + + + def postprocess(self, text): + counter = 0 + + #if len(self.protectedPres) > 0: + # print ">>>> POSTPROCESS: %s items" % len(self.protectedPres) + + for entry in self.protectedPres: + text = text.replace("[[[[[REPL%s]]]]]" % counter, entry, 1) + counter += 1 + + return text + + + def grab_links(self): + """Grab link lookups. + + Check the text for link lookups, store them in a + dictionary, and clean them up. + """ + # Grab links like this: '[id]example.com' + links = {} + p = re.compile(r'''(?:^|\n)\[([\w]+?)\](%(url)s)(?:$|\n)''' % self.res, re.VERBOSE) + for key, link in p.findall(self.text): + links[key] = link + + # And clear them from the text. + self.text = p.sub('', self.text) + + return links + + + def process(self, head_offset=HEAD_OFFSET, validate=VALIDATE, sanitize=SANITIZE, output=OUTPUT, encoding=ENCODING): + """Process the text. + + Here we actually process the text, splitting the text in + blocks and applying the corresponding function to each + one of them. + """ + # Basic global changes. + self.preprocess() + + # Grab lookup links and clean them from the text. + self._links = self.grab_links() + + # Offset for the headers. + self.head_offset = head_offset + + # Process each block. + self.blocks = self.split_text() + + text = [] + for [function, captures] in self.blocks: + text.append(function(**captures)) + + text = '\n\n'.join(text) + + # Add titles to footnotes. + text = self.footnotes(text) + + # Convert to desired output. + text = unicode(text, encoding) + text = text.encode(output, 'xmlcharrefreplace') + + # Postprocess + text = self.postprocess(text) + + # Sanitize? + if sanitize: + p = _HTMLSanitizer() + p.feed(text) + text = p.output() + + # Validate output. + if _tidy and validate: + text = _tidy(text) + + return text + + + def sanitize(self, text): + """Fix single tags. + + Fix tags like <img />, <br /> and <hr />. + + --- + h1. Sanitizing + + Textile can help you generate valid XHTML(eXtensible HyperText Markup Language). + It will fix any single tags that are not properly closed, like + @<img />@, @<br />@ and @<hr />@. + + If you have "mx.Tidy":http://www.egenix.com/files/python/mxTidy.html + and/or "µTidyLib":http://utidylib.sourceforge.net/ installed, + it also can optionally validade the generated code with these wrappers + to ensure 100% valid XHTML(eXtensible HyperText Markup Language). + """ + # Fix single tags like <img /> and <br />. + text = preg_replace(r'''<(img|br|hr)(.*?)(?:\s*/?\s*)?>''', r'''<\1\2 />''', text) + + # Remove ampersands. + text = preg_replace(r'''&(?!#?[xX]?(?:[0-9a-fA-F]+|\w{1,8});)''', r'''&''', text) + + return text + + + def split_text(self): + """Process the blocks from the text. + + Split the blocks according to the signatures, join extended + blocks and associate each one of them with a function to + process them. + + --- + h1. Blocks + + Textile process your text by dividing it in blocks. Each block + is identified by a signature and separated from other blocks by + an empty line. + + All signatures should end with a period followed by a space. A + header @<h1></h1>@ can be done this way: + + pre. h1. This is a header 1. + + Blocks may continue for multiple paragraphs of text. If you want + a block signature to stay "active", use two periods after the + signature instead of one. For example: + + pre.. bq.. This is paragraph one of a block quote. + + This is paragraph two of a block quote. + + =p. Now we're back to a regular paragraph. + + p. Becomes: + + pre.. <blockquote> + <p>This is paragraph one of a block quote.</p> + + <p>This is paragraph two of a block quote.</p> + </blockquote> + + <p>Now we’re back to a regular paragraph.</p> + + p. The blocks can be customised by adding parameters between the + signature and the period. These include: + + dl. {style rule}:A CSS(Cascading Style Sheets) style rule. + [ll]:A language identifier (for a "lang" attribute). + (class) or (#id) or (class#id):For CSS(Cascading Style Sheets) class and id attributes. + >, <, =, <>:Modifier characters for alignment. Right-justification, left-justification, centered, and full-justification. The paragraph will also receive the class names "right", "left", "center" and "justify", respectively. + ( (one or more):Adds padding on the left. 1em per "(" character is applied. When combined with the align-left or align-right modifier, it makes the block float. + ) (one or more):Adds padding on the right. 1em per ")" character is applied. When combined with the align-left or align-right modifier, it makes the block float. + + Here's an overloaded example: + + pre. p(())>(class#id)[en]{color:red}. A simple paragraph. + + Becomes: + + pre. <p lang="en" style="color:red;padding-left:2em;padding-right:2em;float:right;" class="class right" id="id">A simple paragraph.</p> + """ + # Clear signature. + clear_sig = r'''^clear(?P<alignment>[<>])?\.$''' + clear = None + + extending = 0 + + + + # We capture the \n's because they are important inside "pre..". + blocks = re.split(r'''((\n\s*){2,})''', self.text) + output = [] + for block in blocks: + # Check for the clear signature. + m = re.match(clear_sig, block) + if m: + clear = m.group('alignment') + if clear: + clear = {'<': 'clear:left;', '>': 'clear:right;'}[clear] + else: + clear = 'clear:both;' + + else: + # Check each of the code signatures. + for regexp, function in self.signatures: + p = re.compile(regexp, (re.VERBOSE | re.DOTALL)) + m = p.match(block) + if m: + # Put everything in a dictionary. + captures = m.groupdict() + + # If we are extending a block, we require a dot to + # break it, so we can start lines with '#' inside + # an extended <pre> without matching an ordered list. + if extending and not captures.get('dot', None): + output[-1][1]['text'] += block + break + elif captures.has_key('dot'): + del captures['dot'] + + # If a signature matches, we are not extending a block. + extending = 0 + + # Check if we should extend this block. + if captures.has_key('extend'): + extending = captures['extend'] + del captures['extend'] + + # Apply head_offset. + if captures.has_key('header'): + captures['header'] = int(captures['header']) + self.head_offset + + # Apply clear. + if clear: + captures['clear'] = clear + clear = None + + # Save the block to be processed later. + output.append([function, captures]) + + break + + else: + if extending: + # Append the text to the last block. + output[-1][1]['text'] += block + elif block.strip(): + output.append([self.paragraph, {'text': block}]) + + return output + + + def parse_params(self, parameters, clear=None, align_type='block'): + """Parse the parameters from a block signature. + + This function parses the parameters from a block signature, + splitting the information about class, id, language and + style. The positioning (indentation and alignment) is parsed + and stored in the style. + + A paragraph like: + + p>(class#id){color:red}[en]. Paragraph. + + or: + + p{color:red}[en](class#id)>. Paragraph. + + will have its parameters parsed to: + + output = {'lang' : 'en', + 'class': 'class', + 'id' : 'id', + 'style': 'color:red;text-align:right;'} + + Note that order is not important. + """ + if not parameters: + if clear: + return {'style': clear} + else: + return {} + + output = {} + + # Match class from (class) or (class#id). + m = re.search(r'''\((?P<class>[\w]+(\s[\w]+)*)(\#[\w]+)?\)''', parameters) + if m: output['class'] = m.group('class') + + # Match id from (#id) or (class#id). + m = re.search(r'''\([\w]*(\s[\w]+)*\#(?P<id>[\w]+)\)''', parameters) + if m: output['id'] = m.group('id') + + # Match [language]. + m = re.search(r'''\[(?P<lang>[\w-]+)\]''', parameters) + if m: output['lang'] = m.group('lang') + + # Match {style}. + m = re.search(r'''{(?P<style>[^\}]+)}''', parameters) + if m: + output['style'] = m.group('style').replace('\n', '') + + # If necessary, apppend a semi-comma to the style. + if not output['style'].endswith(';'): + output['style'] += ';' + + # Clear the block? + if clear: + output['style'] = output.get('style', '') + clear + + # Remove classes, ids, langs and styles. This makes the + # regular expression for the positioning much easier. + parameters = preg_replace(r'''\([\#\w\s]+\)''', '', parameters) + parameters = preg_replace(r'''\[[\w-]+\]''', '', parameters) + parameters = preg_replace(r'''{[\w:;#%-]+}''', '', parameters) + + style = [] + + # Count the left indentation. + l_indent = parameters.count('(') + if l_indent: style.append('padding-left:%dem;' % l_indent) + + # Count the right indentation. + r_indent = parameters.count(')') + if r_indent: style.append('padding-right:%dem;' % r_indent) + + # Add alignment. + if align_type == 'image': + align = [('<', 'float:left;', ' left'), + ('>', 'float:right;', ' right')] + + valign = [('^', 'vertical-align:text-top;', ' top'), + ('-', 'vertical-align:middle;', ' middle'), + ('~', 'vertical-align:text-bottom;', ' bottom')] + + # Images can have both a vertical and a horizontal alignment. + for alignments in [align, valign]: + for _align, _style, _class in alignments: + if parameters.count(_align): + style.append(_style) + + # Append a class name related to the alignment. + output['class'] = output.get('class', '') + _class + break + + elif align_type == 'table': + align = [('<', 'left'), + ('>', 'right'), + ('=', 'center'), + ('<>', 'justify')] + + valign = [('^', 'top'), + ('~', 'bottom')] + + # Horizontal alignment. + for _align, _style, in align: + if parameters.count(_align): + output['align'] = _style + + # Vertical alignment. + for _align, _style, in valign: + if parameters.count(_align): + output['valign'] = _style + + # Colspan and rowspan. + m = re.search(r'''\\(\d+)''', parameters) + if m: + #output['colspan'] = m.groups() + output['colspan'] = int(m.groups()[0]) + + m = re.search(r'''/(\d+)''', parameters) + if m: + output['rowspan'] = int(m.groups()[0]) + + else: + if l_indent or r_indent: + alignments = [('<>', 'text-align:justify;', ' justify'), + ('=', 'text-align:center;', ' center'), + ('<', 'float:left;', ' left'), + ('>', 'float:right;', ' right')] + else: + alignments = [('<>', 'text-align:justify;', ' justify'), + ('=', 'text-align:center;', ' center'), + ('<', 'text-align:left;', ' left'), + ('>', 'text-align:right;', ' right')] + + for _align, _style, _class in alignments: + if parameters.count(_align): + style.append(_style) + + # Append a class name related to the alignment. + output['class'] = output.get('class', '') + _class + break + + # Join all the styles. + output['style'] = output.get('style', '') + ''.join(style) + + # Remove excess whitespace. + if output.has_key('class'): + output['class'] = output['class'].strip() + + return output + + + def build_open_tag(self, tag, attributes={}, single=0): + """Build the open tag with specified attributes. + + This function is used by all block builders to + generate the opening tags with the attributes of + the block. + """ + # Open tag. + open_tag = ['<%s' % tag] + for k,v in attributes.items(): + # The ALT attribute can be empty. + if k == 'alt' or v: open_tag.append(' %s="%s"' % (k, v)) + + if single: + open_tag.append(' /') + + # Close tag. + open_tag.append('>') + + return ''.join(open_tag) + + + def paragraph(self, text, parameters=None, attributes=None, clear=None): + """Process a paragraph. + + This function processes the paragraphs, enclosing the text in a + <p> tag and breaking lines with <br />. Paragraphs are formatted + with all the inline rules. + + --- + h1. Paragraph + + This is how you write a paragraph: + + pre. p. This is a paragraph, although a short one. + + Since the paragraph is the default block, you can safely omit its + signature ([@p@]). Simply write: + + pre. This is a paragraph, although a short one. + + Text in a paragraph block is wrapped in @<p></p>@ tags, and + newlines receive a <br /> tag. In both cases Textile will process + the text to: + + pre. <p>This is a paragraph, although a short one.</p> + + Text in a paragraph block is processed with all the inline rules. + """ + # Split the lines. + lines = re.split('\n{2,}', text) + + # Get the attributes. + attributes = attributes or self.parse_params(parameters, clear) + + output = [] + for line in lines: + if line: + # Clean the line. + line = line.strip() + + # Build the tag. + open_tag = self.build_open_tag('p', attributes) + close_tag = '</p>' + + # Pop the id because it must be unique. + if attributes.has_key('id'): del attributes['id'] + + # Break lines. + # line = preg_replace(r'(<br />|\n)+', '<br />\n', line) + + # Remove <br /> from inside broken HTML tags. + line = preg_replace(r'(<[^>]*)<br />\n(.*?>)', r'\1 \2', line) + + # Inline formatting. + line = self.inline(line) + + output.append(open_tag + line + close_tag) + + return '\n\n'.join(output) + + + def pre(self, text, parameters=None, clear=None): + """Process pre-formatted text. + + This function processes pre-formatted text into a <pre> tag. + No HTML is added for the lines, but @<@ and @>@ are translated into + HTML entities. + + --- + h1. Pre-formatted text + + Pre-formatted text can be specified using the @pre@ signature. + Inside a "pre" block, whitespace is preserved and @<@ and @>@ are + translated into HTML(HyperText Markup Language) entities + automatically. + + Text in a "pre" block is _not processed_ with any inline rule. + + Here's a simple example: + + pre. pre. This text is pre-formatted. + Nothing interesting happens inside here... + + Will become: + + pre. <pre> + This text is pre-formatted. + Nothing interesting happens inside here... + </pre> + """ + + # Remove trailing whitespace. + text = text.rstrip() + + # Get the attributes. + attributes = self.parse_params(parameters, clear) + + # Build the tag. + #open_tag = self.build_open_tag('pre', attributes) + '\n' + open_tag = self.build_open_tag('pre', attributes) + close_tag = '\n</pre>' + + # Replace < and >. + text = text.replace('<', '<') + text = text.replace('>', '>') + + return open_tag + text + close_tag + + + def bc(self, text, parameters=None, clear=None): + """Process block code. + + This function processes block code into a <code> tag inside a + <pre>. No HTML is added for the lines, but @<@ and @>@ are translated + into HTML entities. + + --- + h1. Block code + + A block code, specified by the @bc@ signature, is a block of + pre-formatted text which also receives a @<code></code>@ tag. As + with "pre", whitespace is preserved and @<@ and @>@ are translated + into HTML(HyperText Markup Language) entities automatically. + + Text in a "bc" code is _not processed_ with the inline rules. + + If you have "Twisted":http://www.twistedmatrix.com/ installed, + Textile can automatically colorize your Python code if you + specify its language as "Python": + + pre. bc[python]. from twisted.python import htmlizer + + This will become: + + pre. <pre> + <code lang="python"> + <span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span><span class="py-src-op">.</span><span class="py-src-variable">python</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">htmlizer</span> + </code> + </pre> + + The colors can be specified in your CSS(Cascading Style Sheets) + file. If you don't want to install Twisted, you can download just + the @htmlizer@ module "independently":http://dealmeida.net/code/htmlizer.py.txt. + """ + + # Get the attributes. + attributes = self.parse_params(parameters, clear) + + # XHTML <code> can't have the attribute lang. + if attributes.has_key('lang'): + lang = attributes['lang'] + del attributes['lang'] + else: + lang = None + + # Build the tag. + open_tag = '<pre>\n' + self.build_open_tag('code', attributes) + '\n' + close_tag = '\n</code>\n</pre>' + + # Colorize Python code? + if htmlizer and lang == 'python': + text = _color(text) + else: + # Replace < and >. + text = text.replace('<', '<') + text = text.replace('>', '>') + + return open_tag + text + close_tag + + + def dl(self, text, parameters=None, clear=None): + """Process definition list. + + This function process definition lists. The text inside + the <dt> and <dd> tags is processed for inline formatting. + + --- + h1. Definition list + + A definition list starts with the signature @dl@, and has + its items separated by a @:@. Here's a simple example: + + pre. dl. name:Sir Lancelot of Camelot. + quest:To seek the Holy Grail. + color:Blue. + + Becomes: + + pre. <dl> + <dt>name</dt> + <dd>Sir Lancelot of Camelot.</dd> + <dt>quest</dt> + <dd>To seek the Holy Grail.</dd> + <dt>color</dt> + <dd>Blue.</dd> + </dl> + """ + # Get the attributes. + attributes = self.parse_params(parameters, clear) + + # Build the tag. + open_tag = self.build_open_tag('dl', attributes) + '\n' + close_tag = '\n</dl>' + + lines = text.split('\n') + output = [] + for line in lines: + if line.count(':'): + [dt, dd] = line.split(':', 1) + else: + dt,dd = line, '' + + if dt: output.append('<dt>%s</dt>\n<dd>%s</dd>' % (dt, dd)) + + text = '\n'.join(output) + + text = self.inline(text) + + return open_tag + text + close_tag + + + def blockquote(self, text, parameters=None, cite=None, clear=None): + """Process block quote. + + The block quote is inserted into a <blockquote> tag, and + processed as a paragraph. An optional cite attribute can + be appended on the last line after two dashes (--), or + after the period following ':' for compatibility with the + Perl version. + + --- + h1. Blockquote + + A blockquote is denoted by the signature @bq@. The text in this + block will be enclosed in @<blockquote></blockquote>@ and @<p></p>@, + receiving the same formatting as a paragraph. For example: + + pre. bq. This is a blockquote. + + Becomes: + + pre. <blockquote> + <p>This is a blockquote.</p> + </blockquote> + + You can optionally specify the @cite@ attribute of the blockquote, + using the following syntax: + + pre. bq.:http://example.com Some text. + + pre. bq.:"John Doe" Some other text. + + Becomes: + + pre. <blockquote cite="http://example.com"> + <p>Some text.</p> + </blockquote> + + pre. <blockquote cite="John Doe"> + <p>Some other text.</p> + </blockquote> + + You can also specify the @cite@ using a pair of dashes on the + last line of the blockquote: + + pre. bq. Some text. + -- http://example.com + """ + + # Get the attributes. + attributes = self.parse_params(parameters, clear) + + if cite: + # Remove the quotes? + cite = cite.strip('"') + attributes['cite'] = cite + else: + # The citation should be on the last line. + text = text.split('\n') + if text[-1].startswith('-- '): + attributes['cite'] = text.pop()[3:] + + text = '\n'.join(text) + + # Build the tag. + open_tag = self.build_open_tag('blockquote', attributes) + '\n' + close_tag = '\n</blockquote>' + + # Process the paragraph, passing the attributes. + # Does it make sense to pass the id, class, etc. to + # the paragraph instead of applying it to the + # blockquote tag? + text = self.paragraph(text) + + return open_tag + text + close_tag + + + def header(self, text, parameters=None, header=1, clear=None): + """Process a header. + + The header number is captured by the regular + expression and lives in header. If head_offset is + set, it is adjusted accordingly. + + --- + h1. Header + + A header is produced by the signature @hn@, where @n@ goes + from 1 to 6. You can adjust the relative output of the headers + passing a @head_offset@ attribute when calling @textile()@. + + To make a header: + + pre. h1. This is a header. + + Becomes: + + pre. <h1>This is a header.</h1> + """ + # Get the attributes. + attributes = self.parse_params(parameters, clear) + + # Get the header number and limit it between 1 and 6. + n = header + n = min(n,6) + n = max(n,1) + + # Build the tag. + open_tag = self.build_open_tag('h%d' % n, attributes) + close_tag = '</h%d>' % n + + text = self.inline(text) + + return open_tag + text + close_tag + + + def footnote(self, text, parameters=None, footnote=1, clear=None): + """Process a footnote. + + A footnote is formatted as a paragraph of class + 'footnote' and id 'fn%d', starting with the footnote + number in a <sup> tag. Here we just build the + attributes and pass them directly to self.paragraph(). + + --- + h1. Footnote + + A footnote is produced by the signature @fn@ followed by + a number. Footnotes are paragraphs of a special CSS(Cascading Style Sheets) + class. An example: + + pre. fn1. This is footnote number one. + + Will produce this: + + pre. <p class="footnote" id="fn1"><sup>1</sup> This is footnote number one.</p> + + This footnote can be referenced anywhere on the text by the + following way: + + pre. This is a reference[1] to footnote number one. + + Which becomes: + + pre. <p>This is a reference<sup class="footnote"><a href="#fn1" title="This is footnote number one.">1</a></sup> to footnote number 1.</p> + + Note that the text from the footnote appears in the @title@ of the + link pointing to it. + """ + # Get the number. + n = int(footnote) + + # Build the attributes to the paragraph. + attributes = self.parse_params(parameters, clear) + attributes['class'] = 'footnote' + attributes['id'] = 'fn%d' % n + + # Build the paragraph text. + text = ('<sup>%d</sup> ' % n) + text + + # And return the paragraph. + return self.paragraph(text=text, attributes=attributes) + + + def build_li(self, items, liattributes): + """Build the list item. + + This function build the list item of an (un)ordered list. It + works by peeking at the next list item, and searching for a + multi-list. If a multi-list is found, it is processed and + appended inside the list item tags, as it should be. + """ + lines = [] + while len(items): + item = items.pop(0) + + # Clean the line. + item = item.lstrip() + item = item.replace('\n', '<br />\n') + + # Get list item attributes. + p = re.compile(r'''^%(liattr)s\s''' % self.res, re.VERBOSE) + m = p.match(item) + if m: + c = m.groupdict('') + liparameters = c['liparameters'] + item = p.sub('', item) + else: + liparameters = '' + + liattributes = liattributes or self.parse_params(liparameters) + + # Build the item tag. + open_tag_li = self.build_open_tag('li', liattributes) + + # Reset the attributes, which should be applied + # only to the first <li>. + liattributes = {} + + # Build the closing tag. + close_tag_li = '</li>' + + # Multi-list recursive routine. + # Here we check the _next_ items for a multi-list. If we + # find one, we extract all items of the multi-list and + # process them recursively. + if len(items): + inlist = [] + + # Grab all the items that start with # or *. + n_item = items.pop(0) + + # Grab the <ol> parameters. + p = re.compile(r'''^%(olattr)s''' % self.res, re.VERBOSE) + m = p.match(n_item) + if m: + c = m.groupdict('') + olparameters = c['olparameters'] + tmp = p.sub('', n_item) + else: + olparameters = '' + + # Check for an ordered list inside this one. + if tmp.startswith('#'): + n_item = tmp + inlist.append(n_item) + while len(items): + # Peek into the next item. + n_item = items.pop(0) + if n_item.startswith('#'): + inlist.append(n_item) + else: + items.insert(0, n_item) + break + + inlist = self.ol('\n'.join(inlist), olparameters=olparameters) + item = item + '\n' + inlist + '\n' + + # Check for an unordered list inside this one. + elif tmp.startswith('*'): + n_item = tmp + inlist.append(n_item) + while len(items): + # Peek into the next item. + n_item = items.pop(0) + if n_item.startswith('*'): + inlist.append(n_item) + else: + items.insert(0, n_item) + break + + inlist = self.ul('\n'.join(inlist), olparameters=olparameters) + item = item + '\n' + inlist + '\n' + + # Otherwise we just put it back in the list. + else: + items.insert(0, n_item) + + item = self.inline(item) + + item = open_tag_li + item + close_tag_li + lines.append(item) + + return '\n'.join(lines) + + + def ol(self, text, liparameters=None, olparameters=None, clear=None): + """Build an ordered list. + + This function basically just sets the <ol></ol> with the + right attributes, and then pass everything inside to + _build_li, which does the real tough recursive job. + + --- + h1. Ordered lists + + Ordered lists can be constructed this way: + + pre. # Item number 1. + # Item number 2. + # Item number 3. + + And you get: + + pre. <ol> + <li>Item number 1.</li> + <li>Item number 2.</li> + <li>Item number 3.</li> + </ol> + + If you want a list to "break" an extended block, you should + add a period after the hash. This is useful for writing + Python code: + + pre.. bc[python].. #!/usr/bin/env python + + # This is a comment, not an ordered list! + # So this won't break the extended "bc". + + p. Lists can be nested: + + pre. # Item number 1. + ## Item number 1a. + ## Item number 1b. + # Item number 2. + ## Item number 2a. + + Textile will transform this to: + + pre. <ol> + <li>Item number 1. + <ol> + <li>Item number 1a.</li> + <li>Item number 1b.</li> + </ol> + </li> + <li>Item number 2. + <ol> + <li>Item number 2a.</li> + </ol> + </li> + </ol> + + You can also mix ordered and unordered lists: + + pre. * To write well you need: + *# to read every day + *# to write every day + *# and X + + You'll get this: + + pre. <ul> + <li>To write well you need: + <ol> + <li>to read every day</li> + <li>to write every day</li> + <li>and X</li> + </ol> + </li> + </ul> + + To style a list, the parameters should go before the hash if you want + to set the attributes on the @<ol>@ tag: + + pre. (class#id)# one + # two + # three + + If you want to customize the firsr @<li>@ tag, apply the parameters + after the hash: + + pre. #(class#id) one + # two + # three + """ + # Get the attributes. + olattributes = self.parse_params(olparameters, clear) + liattributes = self.parse_params(liparameters) + + # Remove list depth. + if text.startswith('#'): + text = text[1:] + + items = text.split('\n#') + + # Build the open tag. + open_tag = self.build_open_tag('ol', olattributes) + '\n' + + close_tag = '\n</ol>' + + # Build the list items. + text = self.build_li(items, liattributes) + + return open_tag + text + close_tag + + + def ul(self, text, liparameters=None, olparameters=None, clear=None): + """Build an unordered list. + + This function basically just sets the <ul></ul> with the + right attributes, and then pass everything inside to + _build_li, which does the real tough recursive job. + + --- + h1. Unordered lists + + Unordered lists behave exactly like the ordered lists, and are + defined using a star: + + pre. * Python + * Perl + * PHP + + Becomes: + + pre. <ul> + <li>Python</li> + <li>Perl</li> + <li><span class="caps">PHP</span></li> + </ul> + """ + # Get the attributes. + olattributes = self.parse_params(olparameters, clear) + liattributes = self.parse_params(liparameters) + + # Remove list depth. + if text.startswith('*'): + text = text[1:] + + items = text.split('\n*') + + # Build the open tag. + open_tag = self.build_open_tag('ul', olattributes) + '\n' + + close_tag = '\n</ul>' + + # Build the list items. + text = self.build_li(items, liattributes) + + return open_tag + text + close_tag + + + def table(self, text, parameters=None, clear=None): + """Build a table. + + To build a table we split the text in lines to get the + rows, and split the rows between '|' to get the individual + cells. + + --- + h1. Tables + + Making a simple table is as easy as possible: + + pre. |a|b|c| + |1|2|3| + + Will be processed into: + + pre. <table> + <tr> + <td>a</td> + <td>b</td> + <td>c</td> + </tr> + <tr> + <td>1</td> + <td>2</td> + <td>3</td> + </tr> + </table> + + If you want to customize the @<table>@ tag, you must use the + @table@ signature: + + pre. table(class#id)[en]. |a|b|c| + |1|2|3| + + To customize a row, apply the modifier _before_ the first @|@: + + pre. table. (class)<>|a|b|c| + |1|2|3| + + Individual cells can by customized by adding the parameters _after_ + the @|@, proceded by a period and a space: + + pre. |(#id). a|b|c| + |1|2|3| + + The allowed modifiers are: + + dl. {style rule}:A CSS(Cascading Style Sheets) style rule. + (class) or (#id) or (class#id):A CSS(Cascading Style Sheets) class and/or id attribute. + ( (one or more):Adds 1em of padding to the left for each '(' character. + ) (one or more):Adds 1em of padding to the right for each ')' character. + <:Aligns to the left (floats to left for tables if combined with the ')' modifier). + >:Aligns to the right (floats to right for tables if combined with the '(' modifier). + =:Aligns to center (sets left, right margins to 'auto' for tables). + <>:For cells only. Justifies text. + ^:For rows and cells only. Aligns to the top. + ~ (tilde):For rows and cells only. Aligns to the bottom. + _ (underscore):Can be applied to a table row or cell to indicate a header row or cell. + \\2 or \\3 or \\4, etc.:Used within cells to indicate a colspan of 2, 3, 4, etc. columns. When you see "\\", think "push forward". + /2 or /3 or /4, etc.:Used within cells to indicate a rowspan of 2, 3, 4, etc. rows. When you see "/", think "push downward". + + When a cell is identified as a header cell and an alignment is + specified, that becomes the default alignment for cells below it. + You can always override this behavior by specifying an alignment + for one of the lower cells. + """ + attributes = self.parse_params(parameters, clear, align_type='table') + #attributes['cellspacing'] = '0' + + # Build the <table>. + open_tag = self.build_open_tag('table', attributes) + '\n' + close_tag = '</table>' + + output = [] + default_align = {} + rows = re.split(r'''\n+''', text) + for row in rows: + # Get the columns. + columns = row.split('|') + + # Build the <tr>. + parameters = columns.pop(0) + + rowattr = self.parse_params(parameters, align_type='table') + open_tr = self.build_open_tag('tr', rowattr) + '\n' + output.append(open_tr) + + # Does the row define headers? + if parameters.count('_'): + td_tag = 'th' + else: + td_tag = 'td' + + col = 0 + for cell in columns[:-1]: + p = re.compile(r'''(?:%(tattr)s\.\s)?(?P<text>.*)''' % self.res, re.VERBOSE) + m = p.match(cell) + if m: + c = m.groupdict('') + cellattr = self.parse_params(c['parameters'], align_type='table') + + # Get the width of this cell. + width = cellattr.get('colspan', 1) + + # Is this a header? + if c['parameters'].count('_'): + td_tag = 'th' + + # If it is a header, let's set the default alignment. + if td_tag == 'th': + # Set the default aligment for all cells below this one. + # This is a little tricky because this header can have + # a colspan set. + for i in range(col, col+width): + default_align[i] = cellattr.get('align', None) + + else: + # Apply the default align, if any. + cellattr['align'] = cellattr.get('align', default_align.get(col, None)) + + open_td = self.build_open_tag(td_tag, cellattr) + close_td = '</%s>\n' % td_tag + + #output.append(open_td + c['text'].strip() + close_td) + output.append(open_td + self.inline(c['text'].strip()) + close_td) + + col += width + + output.append('</tr>\n') + + text = open_tag + ''.join(output) + close_tag + + return text + + + def escape(self, text): + """Do nothing. + + This is used to match escaped text. Nothing to see here! + + --- + h1. Escaping + + If you don't want Textile processing a block, you can simply + enclose it inside @==@: + + pre. p. Regular paragraph + + pre. == + Escaped portion -- will not be formatted + by Textile at all + == + + pre. p. Back to normal. + + This can also be used inline, disabling the formatting temporarily: + + pre. p. This is ==*a test*== of escaping. + """ + return text + + + def itex(self, text): + """Convert itex to MathML. + + If the itex2mml binary is set, we use it to convert the + itex to MathML. Otherwise, the text is unprocessed and + return as is. + + --- + h1. itex + + Textile can automatically convert itex code to MathML(Mathematical Markup Language) + for you, if you have the itex2MML binary (you can download it + from the "Movable Type plugin":http://golem.ph.utexas.edu/~distler/blog/files/itexToMML.tar.gz). + + Block equations should be enclosed inbetween @\[@ and @\]@: + + pre. \[ e^{i\pi} + 1 = 0 \] + + Will be translated to: + + pre. <math xmlns='http://www.w3.org/1998/Math/MathML' mode='display'> + <msup><mi>e</mi> <mrow><mi>i</mi> + <mi>&pi;</mi></mrow></msup> + <mo>+</mo><mn>1</mn><mo>=</mo><mn>0</mn> + </math> + + Equations can also be displayed inline: + + pre. Euler's formula, $e^{i\pi}+1=0$, ... + + (Note that if you want to display MathML(Mathematical Markup Language) + your content must be served as @application/xhtml+xml@, which is not + accepted by all browsers.) + """ + if itex2mml: + try: + text = os.popen("echo '%s' | %s" % (text, itex2mml)).read() + except: + pass + + return text + + + def about(self, text=None): + """Show PyTextile's functionalities. + + An introduction to PyTextile. Can be called when running the + main script or if you write the following line: + + 'tell me about textile.' + + But keep it a secret! + """ + + about = [] + about.append(textile('h1. This is Textile', head_offset=self.head_offset)) + about.append(textile(__doc__.split('---', 1)[1], head_offset=self.head_offset)) + + functions = [(self.split_text, 1), + (self.paragraph, 2), + (self.pre, 2), + (self.bc, 2), + (self.blockquote, 2), + (self.dl, 2), + (self.header, 2), + (self.footnote, 2), + (self.escape, 2), + (self.itex, 2), + (self.ol, 2), + (self.ul, 2), + (self.table, 2), + (self.inline, 1), + (self.qtags, 2), + (self.glyphs, 2), + (self.macros, 2), + (self.acronym, 2), + (self.images, 1), + (self.links, 1), + (self.sanitize, 1), + ] + + for function, offset in functions: + doc = function.__doc__.split('---', 1)[1] + doc = doc.split('\n') + lines = [] + for line in doc: + line = line.strip() + lines.append(line) + + doc = '\n'.join(lines) + about.append(textile(doc, head_offset=self.head_offset+offset)) + + about = '\n'.join(about) + about = about.replace('<br />', '') + + return about + + + def acronym(self, text): + """Process acronyms. + + Acronyms can have letters in upper and lower caps, or even numbers, + provided that the numbers and upper caps are the same in the + abbreviation and in the description. For example: + + XHTML(eXtensible HyperText Markup Language) + OPeNDAP(Open source Project for a Network Data Access Protocol) + L94(Levitus 94) + + are all valid acronyms. + + --- + h1. Acronyms + + You can define acronyms in your text the following way: + + pre. This is XHTML(eXtensible HyperText Markup Language). + + The resulting code is: + + pre. <p><acronym title="eXtensible HyperText Markup Language"><span class="caps">XHTML</span></acronym></p> + + Acronyms can have letters in upper and lower caps, or even numbers, + provided that the numbers and upper caps are the same in the + abbreviation and in the description. For example: + + pre. XHTML(eXtensible HyperText Markup Language) + OPeNDAP(Open source Project for a Network Data Access Protocol) + L94(Levitus 94) + + are all valid acronyms. + """ + # Find the acronyms. + acronyms = r'''(?P<acronym>[\w]+)\((?P<definition>[^\(\)]+?)\)''' + + # Check all acronyms. + for acronym, definition in re.findall(acronyms, text): + caps_acronym = ''.join(re.findall('[A-Z\d]+', acronym)) + caps_definition = ''.join(re.findall('[A-Z\d]+', definition)) + if caps_acronym and caps_acronym == caps_definition: + text = text.replace('%s(%s)' % (acronym, definition), '<acronym title="%s">%s</acronym>' % (definition, acronym)) + + text = html_replace(r'''(^|\s)([A-Z]{3,})\b(?!\()''', r'''\1<span class="caps">\2</span>''', text) + + return text + + + def footnotes(self, text): + """Add titles to footnotes references. + + This function searches for footnotes references like this [1], and + adds a title to the link containing the first paragraph of the + footnote. + """ + # Search for footnotes. + p = re.compile(r'''<p class="footnote" id="fn(?P<n>\d+)"><sup>(?P=n)</sup>(?P<note>.*)</p>''') + for m in p.finditer(text): + n = m.group('n') + note = m.group('note').strip() + + # Strip HTML from note. + note = re.sub('<.*?>', '', note) + + # Add the title. + text = text.replace('<a href="#fn%s">' % n, '<a href="#fn%s" title="%s">' % (n, note)) + + return text + + + def macros(self, m): + """Quick macros. + + This function replaces macros inside brackets using a built-in + dictionary, and also unicode names if the key doesn't exist. + + --- + h1. Macros + + Textile has support for character macros, which should be enclosed + in curly braces. A few useful ones are: + + pre. {C=} or {=C}: euro sign + {+-} or {-+}: plus-minus sign + {L-} or {-L}: pound sign. + + You can also make accented characters: + + pre. Expos{e'} + + Becomes: + + pre. <p>Expos&#233;</p> + + You can also specify Unicode names like: + + pre. {umbrella} + {white smiling face} + """ + entity = m.group(1) + + macros = {'c|': '¢', # cent sign + '|c': '¢', # cent sign + 'L-': '£', # pound sign + '-L': '£', # pound sign + 'Y=': '¥', # yen sign + '=Y': '¥', # yen sign + '(c)': '©', # copyright sign + '<<': '«', # left-pointing double angle quotation + '(r)': '®', # registered sign + '+_': '±', # plus-minus sign + '_+': '±', # plus-minus sign + '>>': '»', # right-pointing double angle quotation + '1/4': '¼', # vulgar fraction one quarter + '1/2': '½', # vulgar fraction one half + '3/4': '¾', # vulgar fraction three quarters + 'A`': 'À', # latin capital letter a with grave + '`A': 'À', # latin capital letter a with grave + 'A\'': 'Á', # latin capital letter a with acute + '\'A': 'Á', # latin capital letter a with acute + 'A^': 'Â', # latin capital letter a with circumflex + '^A': 'Â', # latin capital letter a with circumflex + 'A~': 'Ã', # latin capital letter a with tilde + '~A': 'Ã', # latin capital letter a with tilde + 'A"': 'Ä', # latin capital letter a with diaeresis + '"A': 'Ä', # latin capital letter a with diaeresis + 'Ao': 'Å', # latin capital letter a with ring above + 'oA': 'Å', # latin capital letter a with ring above + 'AE': 'Æ', # latin capital letter ae + 'C,': 'Ç', # latin capital letter c with cedilla + ',C': 'Ç', # latin capital letter c with cedilla + 'E`': 'È', # latin capital letter e with grave + '`E': 'È', # latin capital letter e with grave + 'E\'': 'É', # latin capital letter e with acute + '\'E': 'É', # latin capital letter e with acute + 'E^': 'Ê', # latin capital letter e with circumflex + '^E': 'Ê', # latin capital letter e with circumflex + 'E"': 'Ë', # latin capital letter e with diaeresis + '"E': 'Ë', # latin capital letter e with diaeresis + 'I`': 'Ì', # latin capital letter i with grave + '`I': 'Ì', # latin capital letter i with grave + 'I\'': 'Í', # latin capital letter i with acute + '\'I': 'Í', # latin capital letter i with acute + 'I^': 'Î', # latin capital letter i with circumflex + '^I': 'Î', # latin capital letter i with circumflex + 'I"': 'Ï', # latin capital letter i with diaeresis + '"I': 'Ï', # latin capital letter i with diaeresis + 'D-': 'Ð', # latin capital letter eth + '-D': 'Ð', # latin capital letter eth + 'N~': 'Ñ', # latin capital letter n with tilde + '~N': 'Ñ', # latin capital letter n with tilde + 'O`': 'Ò', # latin capital letter o with grave + '`O': 'Ò', # latin capital letter o with grave + 'O\'': 'Ó', # latin capital letter o with acute + '\'O': 'Ó', # latin capital letter o with acute + 'O^': 'Ô', # latin capital letter o with circumflex + '^O': 'Ô', # latin capital letter o with circumflex + 'O~': 'Õ', # latin capital letter o with tilde + '~O': 'Õ', # latin capital letter o with tilde + 'O"': 'Ö', # latin capital letter o with diaeresis + '"O': 'Ö', # latin capital letter o with diaeresis + 'O/': 'Ø', # latin capital letter o with stroke + '/O': 'Ø', # latin capital letter o with stroke + 'U`': 'Ù', # latin capital letter u with grave + '`U': 'Ù', # latin capital letter u with grave + 'U\'': 'Ú', # latin capital letter u with acute + '\'U': 'Ú', # latin capital letter u with acute + 'U^': 'Û', # latin capital letter u with circumflex + '^U': 'Û', # latin capital letter u with circumflex + 'U"': 'Ü', # latin capital letter u with diaeresis + '"U': 'Ü', # latin capital letter u with diaeresis + 'Y\'': 'Ý', # latin capital letter y with acute + '\'Y': 'Ý', # latin capital letter y with acute + 'a`': 'à', # latin small letter a with grave + '`a': 'à', # latin small letter a with grave + 'a\'': 'á', # latin small letter a with acute + '\'a': 'á', # latin small letter a with acute + 'a^': 'â', # latin small letter a with circumflex + '^a': 'â', # latin small letter a with circumflex + 'a~': 'ã', # latin small letter a with tilde + '~a': 'ã', # latin small letter a with tilde + 'a"': 'ä', # latin small letter a with diaeresis + '"a': 'ä', # latin small letter a with diaeresis + 'ao': 'å', # latin small letter a with ring above + 'oa': 'å', # latin small letter a with ring above + 'ae': 'æ', # latin small letter ae + 'c,': 'ç', # latin small letter c with cedilla + ',c': 'ç', # latin small letter c with cedilla + 'e`': 'è', # latin small letter e with grave + '`e': 'è', # latin small letter e with grave + 'e\'': 'é', # latin small letter e with acute + '\'e': 'é', # latin small letter e with acute + 'e^': 'ê', # latin small letter e with circumflex + '^e': 'ê', # latin small letter e with circumflex + 'e"': 'ë', # latin small letter e with diaeresis + '"e': 'ë', # latin small letter e with diaeresis + 'i`': 'ì', # latin small letter i with grave + '`i': 'ì', # latin small letter i with grave + 'i\'': 'í', # latin small letter i with acute + '\'i': 'í', # latin small letter i with acute + 'i^': 'î', # latin small letter i with circumflex + '^i': 'î', # latin small letter i with circumflex + 'i"': 'ï', # latin small letter i with diaeresis + '"i': 'ï', # latin small letter i with diaeresis + 'n~': 'ñ', # latin small letter n with tilde + '~n': 'ñ', # latin small letter n with tilde + 'o`': 'ò', # latin small letter o with grave + '`o': 'ò', # latin small letter o with grave + 'o\'': 'ó', # latin small letter o with acute + '\'o': 'ó', # latin small letter o with acute + 'o^': 'ô', # latin small letter o with circumflex + '^o': 'ô', # latin small letter o with circumflex + 'o~': 'õ', # latin small letter o with tilde + '~o': 'õ', # latin small letter o with tilde + 'o"': 'ö', # latin small letter o with diaeresis + '"o': 'ö', # latin small letter o with diaeresis + ':-': '÷', # division sign + '-:': '÷', # division sign + 'o/': 'ø', # latin small letter o with stroke + '/o': 'ø', # latin small letter o with stroke + 'u`': 'ù', # latin small letter u with grave + '`u': 'ù', # latin small letter u with grave + 'u\'': 'ú', # latin small letter u with acute + '\'u': 'ú', # latin small letter u with acute + 'u^': 'û', # latin small letter u with circumflex + '^u': 'û', # latin small letter u with circumflex + 'u"': 'ü', # latin small letter u with diaeresis + '"u': 'ü', # latin small letter u with diaeresis + 'y\'': 'ý', # latin small letter y with acute + '\'y': 'ý', # latin small letter y with acute + 'y"': 'ÿ', # latin small letter y with diaeresis + '"y': 'ÿ', # latin small letter y with diaeresis + 'OE': 'Œ', # latin capital ligature oe + 'oe': 'œ', # latin small ligature oe + '*': '•', # bullet + 'Fr': '₣', # french franc sign + 'L=': '₤', # lira sign + '=L': '₤', # lira sign + 'Rs': '₨', # rupee sign + 'C=': '€', # euro sign + '=C': '€', # euro sign + 'tm': '™', # trade mark sign + '<-': '←', # leftwards arrow + '->': '→', # rightwards arrow + '<=': '⇐', # leftwards double arrow + '=>': '⇒', # rightwards double arrow + '=/': '≠', # not equal to + '/=': '≠', # not equal to + '<_': '≤', # less-than or equal to + '_<': '≤', # less-than or equal to + '>_': '≥', # greater-than or equal to + '_>': '≥', # greater-than or equal to + ':(': '☹', # white frowning face + ':)': '☺', # white smiling face + 'spade': '♠', # black spade suit + 'club': '♣', # black club suit + 'heart': '♥', # black heart suit + 'diamond': '♦', # black diamond suit + } + + try: + # Try the key. + entity = macros[entity] + except KeyError: + try: + # Try a unicode entity. + entity = unicodedata.lookup(entity) + entity = entity.encode('ascii', 'xmlcharrefreplace') + except: + # Return the unmodified entity. + entity = '{%s}' % entity + + return entity + + + def glyphs(self, text): + """Glyph formatting. + + This function replaces quotations marks, dashes and a few other + symbol for numerical entities. The em/en dashes use definitions + comes from http://alistapart.com/articles/emen/. + + --- + h1. Glyphs + + Textile replaces some of the characters in your text with their + equivalent numerical entities. These include: + + * Replace single and double primes used as quotation marks with HTML(HyperText Markup Language) entities for opening and closing quotation marks in readable text, while leaving untouched the primes required within HTML(HyperText Markup Language) tags. + * Replace double hyphens (==--==) with an em-dash (—) entity. + * Replace triple hyphens (==---==) with two em-dash (——) entities. + * Replace single hyphens surrounded by spaces with an en-dash (–) entity. + * Replace triplets of periods (==...==) with an ellipsis (…) entity. + * Convert many nonstandard characters to browser-safe entities corresponding to keyboard input. + * Convert ==(TM)==, ==(R)==, and ==(C)== to ™, ®, and ©. + * Convert the letter x to a dimension sign: 2==x==4 to 2x4 and 8 ==x== 10 to 8x10. + """ + glyphs = [(r'''"(?<!\w)\b''', r'''“'''), # double quotes + (r'''"''', r'''”'''), # double quotes + (r"""\b'""", r'''’'''), # single quotes + (r"""'(?<!\w)\b""", r'''‘'''), # single quotes + (r"""'""", r'''’'''), # single single quote + (r'''(\b|^)( )?\.{3}''', r'''\1…'''), # ellipsis + (r'''\b---\b''', r'''——'''), # double em dash + (r'''\s?--\s?''', r'''—'''), # em dash + (r'''(\d+)-(\d+)''', r'''\1–\2'''), # en dash (1954-1999) + (r'''(\d+)-(\W)''', r'''\1—\2'''), # em dash (1954--) + (r'''\s-\s''', r''' – '''), # en dash + (r'''(\d+) ?x ?(\d+)''', r'''\1×\2'''), # dimension sign + (r'''\b ?(\((tm|TM)\))''', r'''™'''), # trademark + (r'''\b ?(\([rR]\))''', r'''®'''), # registered + (r'''\b ?(\([cC]\))''', r'''©'''), # copyright + (r'''([^\s])\[(\d+)\]''', # + r'''\1<sup class="footnote"><a href="#fn\2">\2</a></sup>'''),# footnote + ] + + # Apply macros. + text = re.sub(r'''{([^}]+)}''', self.macros, text) + + # LaTeX style quotes. + text = text.replace('\x60\x60', '“') + text = text.replace('\xb4\xb4', '”') + + # Linkify URL and emails. + url = r'''(?=[a-zA-Z0-9./#]) # Must start correctly + ((?: # Match the leading part (proto://hostname, or just hostname) + (?:ftp|https?|telnet|nntp) # protocol + :// # :// + (?: # Optional 'username:password@' + \w+ # username + (?::\w+)? # optional :password + @ # @ + )? # + [-\w]+(?:\.\w[-\w]*)+ # hostname (sub.example.com) + ) # + (?::\d+)? # Optional port number + (?: # Rest of the URL, optional + /? # Start with '/' + [^.!,?;:"'<>()\[\]{}\s\x7F-\xFF]* # Can't start with these + (?: # + [.!,?;:]+ # One or more of these + [^.!,?;:"'<>()\[\]{}\s\x7F-\xFF]+ # Can't finish with these + #'" # # or ' or " + )* # + )?) # + ''' + + email = r'''(?:mailto:)? # Optional mailto: + ([-\+\w]+ # username + \@ # at + [-\w]+(?:\.\w[-\w]*)+) # hostname + ''' + + # If there is no html, do a simple search and replace. + if not re.search(r'''<.*>''', text): + for glyph_search, glyph_replace in glyphs: + text = preg_replace(glyph_search, glyph_replace, text) + + # Linkify. + text = re.sub(re.compile(url, re.VERBOSE), r'''<a href="\1">\1</a>''', text) + text = re.sub(re.compile(email, re.VERBOSE), r'''<a href="mailto:\1">\1</a>''', text) + + else: + lines = [] + # Else split the text into an array at <>. + for line in re.split('(<.*?>)', text): + if not re.match('<.*?>', line): + for glyph_search, glyph_replace in glyphs: + line = preg_replace(glyph_search, glyph_replace, line) + + # Linkify. + line = re.sub(re.compile(url, re.VERBOSE), r'''<a href="\1">\1</a>''', line) + line = re.sub(re.compile(email, re.VERBOSE), r'''<a href="mailto:\1">\1</a>''', line) + + lines.append(line) + + text = ''.join(lines) + + return text + + + def qtags(self, text): + """Quick tags formatting. + + This function does the inline formatting of text, like + bold, italic, strong and also itex code. + + --- + h1. Quick tags + + Quick tags allow you to format your text, making it bold, + emphasized or small, for example. The quick tags operators + include: + + dl. ==*strong*==:Translates into @<strong>strong</strong>@. + ==_emphasis_==:Translates into @<em>emphasis</em>@. + ==**bold**==:Translates into @<b>bold</b>@. + ==__italics__==:Translates into @<i>italics</i>@. + ==++bigger++==:Translates into @<big>bigger</big>@. + ==--smaller--==:Translates into: @<small>smaller</small>@. + ==-deleted text-==:Translates into @<del>deleted text</del>@. + ==+inserted text+==:Translates into @<ins>inserted text</ins>@. + ==^superscript^==:Translates into @<sup>superscript</sup>@. + ==~subscript~==:Translates into @<sub>subscript</sub>@. + ==%span%==:Translates into @<span>span</span>@. + ==@code@==:Translates into @<code>code</code>@. + + Note that within a "==@==...==@==" section, @<@ and @>@ are + translated into HTML entities automatically. + + Inline formatting operators accept the following modifiers: + + dl. {style rule}:A CSS(Cascading Style Sheets) style rule. + [ll]:A language identifier (for a "lang" attribute). + (class) or (#id) or (class#id):For CSS(Cascading Style Sheets) class and id attributes. + """ + # itex2mml. + text = re.sub('\$(.*?)\$', lambda m: self.itex(m.group()), text) + + # Add span tags to upper-case words which don't have a description. + #text = preg_replace(r'''(^|\s)([A-Z]{3,})\b(?!\()''', r'''\1<span class="caps">\2</span>''', text) + + # Quick tags. + qtags = [('**', 'b', {'qf': '(?<!\*)\*\*(?!\*)', 'cls': '\*'}), + ('__', 'i', {'qf': '(?<!_)__(?!_)', 'cls': '_'}), + ('??', 'cite', {'qf': '\?\?(?!\?)', 'cls': '\?'}), + ('-', 'del', {'qf': '(?<!\-)\-(?!\-)', 'cls': '-'}), + ('+', 'ins', {'qf': '(?<!\+)\+(?!\+)', 'cls': '\+'}), + ('*', 'strong', {'qf': '(?<!\*)\*(?!\*)', 'cls': '\*'}), + ('_', 'em', {'qf': '(?<!_)_(?!_)', 'cls': '_'}), + ('++', 'big', {'qf': '(?<!\+)\+\+(?!\+)', 'cls': '\+\+'}), + ('--', 'small', {'qf': '(?<!\-)\-\-(?!\-)', 'cls': '\-\-'}), + ('~', 'sub', {'qf': '(?<!\~)\~(?!(\\\/~))', 'cls': '\~'}), + ('@', 'code', {'qf': '(?<!@)@(?!@)', 'cls': '@'}), + ('%', 'span', {'qf': '(?<!%)%(?!%)', 'cls': '%'}), + ] + + # Superscript. + text = re.sub(r'''(?<!\^)\^(?!\^)(.+?)(?<!\^)\^(?!\^)''', r'''<sup>\1</sup>''', text) + + # This is from the perl version of Textile. + for qtag, htmltag, redict in qtags: + self.res.update(redict) + p = re.compile(r'''(?: # + ^ # Start of string + | # + (?<=[\s>'"]) # Whitespace, end of tag, quotes + | # + (?P<pre>[{[]) # Surrounded by [ or { + | # + (?<=%(punct)s) # Punctuation + ) # + %(qf)s # opening tag + %(qattr)s # attributes + (?P<text>[^%(cls)s\s].*?) # text + (?<=\S) # non-whitespace + %(qf)s # + (?: # + $ # End of string + | # + (?P<post>[\]}]) # Surrounded by ] or } + | # + (?=%(punct)s{1,2}|\s) # punctuation + ) # + ''' % self.res, re.VERBOSE) + + def _replace(m): + c = m.groupdict('') + + attributes = self.parse_params(c['parameters']) + open_tag = self.build_open_tag(htmltag, attributes) + close_tag = '</%s>' % htmltag + + # Replace < and > inside <code></code>. + if htmltag == 'code': + c['text'] = c['text'].replace('<', '<') + c['text'] = c['text'].replace('>', '>') + + return open_tag + c['text'] + close_tag + + text = p.sub(_replace, text) + + return text + + + def images(self, text): + """Process images. + + This function process images tags, with or without links. Images + can have vertical and/or horizontal alignment, and can be resized + unefficiently using width and height tags. + + --- + h1. Images + + An image is generated by enclosing the image source in @!@: + + pre. !/path/to/image! + + You may optionally specify an alternative text for the image, which + will also be used as its title: + + pre. !image.jpg (Nice picture)! + + Becomes: + + pre. <p><img src="image.jpg" alt="Nice picture" title="Nice picture" /></p> + + If you want to make the image point to a link, simply append a + comma and the URL(Universal Republic of Love) to the image: + + pre. !image.jpg!:http://diveintopython.org + + Images can also be resized. These are all equivalent: + + pre. !image.jpg 10x20! + !image.jpg 10w 20h! + !image.jpg 20h 10w! + + The image @image.jpg@ will be resized to width 10 and height 20. + + Modifiers to the @<img>@ tag go after the opening @!@: + + pre. !(class#id)^image.jpg! + + Allowed modifiers include: + + dl. <:Align the image to the left (causes the image to float if CSS options are enabled). + >:Align the image to the right (causes the image to float if CSS options are enabled). + - (dash):Aligns the image to the middle. + ^:Aligns the image to the top. + ~ (tilde):Aligns the image to the bottom. + {style rule}:Applies a CSS style rule to the image. + (class) or (#id) or (class#id):Applies a CSS class and/or id to the image. + ( (one or more):Pads 1em on the left for each '(' character. + ) (one or more):Pads 1em on the right for each ')' character. + + Images receive the class "top" when using top alignment, "bottom" + for bottom alignment and "middle" for middle alignment. + """ + # Compile the beast. + p = re.compile(r'''\! # Opening ! + %(iattr)s # Image attributes + (?P<src>%(url)s) # Image src + \s? # Optional whitesapce + ( # + \( # + (?P<alt>.*?) # Optional (alt) attribute + \) # + )? # + \s? # Optional whitespace + %(resize)s # Resize parameters + \! # Closing ! + ( # Optional link + : # starts with ':' + (?P<link> # + %(url)s # link HREF + ) # + )? # + ''' % self.res, re.VERBOSE) + + for m in p.finditer(text): + c = m.groupdict('') + + # Build the parameters for the <img /> tag. + attributes = self.parse_params(c['parameters'], align_type='image') + attributes.update(c) + if attributes['alt']: + attributes['title'] = attributes['alt'] + + # Append height and width. + attributes['width'] = m.groups()[5] or m.groups()[7] or m.groups()[10] + attributes['height'] = m.groups()[6] or m.groups()[8] or m.groups()[9] + + # Create the image tag. + tag = self.image(attributes) + + text = text.replace(m.group(), tag) + + return text + + + def image(self, attributes): + """Process each image. + + This method builds the <img> tag for each image in the text. It's + separated from the 'images' method so it can be easily overriden when + subclassing Textiler. Useful if you want to download and/or process + the images, for example. + """ + link = attributes['link'] + del attributes['link'] + del attributes['parameters'] + + # Build the tag. + tag = self.build_open_tag('img', attributes, single=1) + + if link: + href = preg_replace('&(?!(#|amp))', '&', link) + tag = '<a href="%s">%s</a>' % (href, tag) + + return tag + + + def links(self, text): + """Process links. + + This function is responsible for processing links. It has + some nice shortcuts to Google, Amazon and IMDB queries. + + --- + h1. Links + + A links is done the following way: + + pre. "This is the text link":http://example.com + + The result from this markup is: + + pre. <p><a href="http://example.com">This is the text link</a></p> + + You can add an optional @title@ attribute: + + pre. "This is the text link(This is the title)":http://example.com + + The link can be customised as well: + + pre. "(nospam)E-mail me please":mailto:someone@example.com + + You can use either single or double quotes. They must be enclosed in + whitespace, punctuation or brackets: + + pre. You["gotta":http://example.com]seethis! + + If you are going to reference the same link a couple of times, you + can define a lookup list anywhere on your document: + + pre. [python]http://www.python.org + + Links to the Python website can then be defined the following way: + + pre. "Check this":python + + There are also shortcuts for Amazon, IMDB(Internet Movie DataBase) and + Google queries: + + pre. "Has anyone seen this guy?":imdb:Stephen+Fry + "Really nice book":amazon:Goedel+Escher+Bach + "PyBlosxom":google + ["Using Textile and Blosxom with Python":google:python blosxom textile] + + Becomes: + + pre. <a href="http://www.imdb.com/Find?for=Stephen+Fry">Has anyone seen this guy?</a> + <a href="http://www.amazon.com/exec/obidos/external-search?index=blended&keyword=Goedel+Escher+Bach">Really nice book</a> + <a href="http://www.google.com/search?q=PyBlosxom">PyBlosxom</a> + <a href="http://www.google.com/search?q=python+blosxom+textile">Using Textile and Blosxom with Python</a> + """ + linkres = [r'''\[ # [ + (?P<quote>"|') # Opening quotes + %(lattr)s # Link attributes + (?P<text>[^"]+?) # Link text + \s? # Optional whitespace + (?:\((?P<title>[^\)]+?)\))? # Optional (title) + (?P=quote) # Closing quotes + : # : + (?P<href>[^\]]+) # HREF + \] # ] + ''' % self.res, + r'''(?P<quote>"|') # Opening quotes + %(lattr)s # Link attributes + (?P<text>[^"]+?) # Link text + \s? # Optional whitespace + (?:\((?P<title>[^\)]+?)\))? # Optional (title) + (?P=quote) # Closing quotes + : # : + (?P<href>%(url)s) # HREF + ''' % self.res] + + for linkre in linkres: + p = re.compile(linkre, re.VERBOSE) + for m in p.finditer(text): + c = m.groupdict('') + + attributes = self.parse_params(c['parameters']) + attributes['title'] = c['title'].replace('"', '"') + + # Search lookup list. + link = self._links.get(c['href'], None) or c['href'] + + # Hyperlinks for Amazon, IMDB and Google searches. + parts = link.split(':', 1) + proto = parts[0] + if len(parts) == 2: + query = parts[1] + else: + query = c['text'] + + query = query.replace(' ', '+') + + # Look for smart search. + if self.searches.has_key(proto): + link = self.searches[proto] % query + + # Fix URL. + attributes['href'] = preg_replace('&(?!(#|amp))', '&', link) + + open_tag = self.build_open_tag('a', attributes) + close_tag = '</a>' + + repl = open_tag + c['text'] + close_tag + + text = text.replace(m.group(), repl) + + return text + + + def format(self, text): + """Text formatting. + + This function basically defines the order on which the + formatting is applied. + """ + text = self.qtags(text) + text = self.images(text) + text = self.links(text) + text = self.acronym(text) + text = self.glyphs(text) + + return text + + + def inline(self, text): + """Inline formatting. + + This function calls the formatting on the inline text, + taking care to avoid the escaped parts. + + --- + h1. Inline + + Inline formatting is applied within a block of text. + """ + if not re.search(r'''==(.*?)==''', text): + text = self.format(text) + + else: + lines = [] + # Else split the text into an array at <>. + for line in re.split('(==.*?==)', text): + if not re.match('==.*?==', line): + line = self.format(line) + else: + line = line[2:-2] + + lines.append(line) + + text = ''.join(lines) + + return text + + +def textile(text, **args): + """This is Textile. + + Generates XHTML from a simple markup developed by Dean Allen. + + This function should be called like this: + + textile(text, head_offset=0, validate=0, sanitize=0, + encoding='latin-1', output='ASCII') + """ + return Textiler(text).process(**args) + + +if __name__ == '__main__': + print textile('tell me about textile.', head_offset=1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/textutil.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/textutil.py new file mode 100644 index 0000000000..4498413797 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/textutil.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import sys, string, re, optparse +import config, filetool, comment + + + + +def convertMac2Unix(content): + return content.replace("\r", "\n") + +def convertMac2Dos(content): + return content.replace("\r", "\r\n") + +def convertDos2Unix(content): + return content.replace("\r\n", "\n") + +def convertDos2Mac(content): + return content.replace("\r\n", "\r") + +def convertUnix2Dos(content): + return content.replace("\n", "\r\n") + +def convertUnix2Mac(content): + return content.replace("\n", "\r") + + + + +def any2Unix(content): + # DOS must be first, because it is a combination of Unix & Mac + return convertMac2Unix(convertDos2Unix(content)) + +def any2Dos(content): + # to protect old DOS breaks first, we need to convert to + # a line ending with single character first e.g. Unix + return convertUnix2Dos(any2Unix(content)) + +def any2Mac(content): + # to protect old DOS breaks first, we need to convert to + # a line ending with single character first e.g. Unix + return convertUnix2Mac(any2Unix(content)) + + + +def getLineEndingName(content): + if "\r\n" in content: + return "dos" + + if "\r" in content: + return "mac" + + # defaults to unix + return "unix" + +def getLineEndingSequence(content): + if "\r\n" in content: + return "\r\n" + + if "\r" in content: + return "\r" + + # defaults to unix + return "\n" + + + +def tab2Space(content, spaces=2): + return content.replace("\t", " " * spaces) + +def spaces2Tab(content, spaces=2): + return content.replace(" " * spaces, "\t") + + + +def removeTrailingSpaces(content): + ending = getLineEndingSequence(content) + lines = content.split(ending) + length = len(lines) + pos = 0 + + while pos < length: + lines[pos] = lines[pos].rstrip() + pos += 1 + + return ending.join(lines) + + +def toRegExp(text): + return re.compile("^(" + text.replace('.', '\\.').replace('*', '.*').replace('?', '.?') + ")$") + + + + + + + + + + + +def main(): + allowed = [ "any2Dos", "any2Mac", "any2Unix", "convertDos2Mac", "convertDos2Unix", "convertMac2Dos", "convertMac2Unix", "convertUnix2Dos", "convertUnix2Mac", "spaces2Tab", "tab2Space" ] + + parser = optparse.OptionParser() + + parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=False, help="Quiet output mode.") + parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Verbose output mode.") + parser.add_option("-c", "--command", dest="command", default="normalize", help="Normalize a file") + parser.add_option("--encoding", dest="encoding", default="utf-8", metavar="ENCODING", help="Defines the encoding expected for input files.") + + (options, args) = parser.parse_args() + + if not options.command in allowed: + print "Unallowed command: %s" % options.command + sys.exit(1) + + if len(args) == 0: + print "Needs one or more arguments (files) to modify!" + sys.exit(1) + + for fileName in args: + if options.verbose: + print " * Running %s on: %s" % (options.command, fileName) + + origFileContent = filetool.read(fileName, options.encoding) + patchedFileContent = eval(options.command + "(origFileContent)") + + if patchedFileContent != origFileContent: + filetool.save(fileName, patchedFileContent, options.encoding) + + + + + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) +
\ No newline at end of file diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/tokenizer.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/tokenizer.py new file mode 100755 index 0000000000..95376770fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/tokenizer.py @@ -0,0 +1,372 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Alessandro Sala (asala) +# +################################################################################ + +import sys, string, re, optparse +import config, filetool, comment + +R_WHITESPACE = re.compile(r"(\s+)") +R_NONWHITESPACE = re.compile("\S+") +R_NUMBER = re.compile("^[0-9]+") +R_NEWLINE = re.compile(r"(\n)") + +# Ideas from: http://www.regular-expressions.info/examplesprogrammer.html +# Multicomment RegExp inspired by: http://ostermiller.org/findcomment.html + +# builds regexp strings +S_STRING_A = "'[^'\\\n]*(\\.|\n[^'\\\n]*)*'" +S_STRING_B = '"[^"\\\n]*(\\.|\n[^"\\\n]*)*"' + +S_FLOAT = "([0-9]+\.[0-9]+)" + +S_OPERATORS_2 = r"(==)|(!=)|(\+\+)|(--)|(-=)|(\+=)|(\*=)|(/=)|(%=)|(&&)|(\|\|)|(\>=)|(\<=)|(>>)|(<<)|(\^\|)|(\|=)|(\^=)|(&=)|(::)|(\.\.)" +S_OPERATORS_3 = r"(===)|(!==)|(\<\<=)|(\>\>=)|(\>\>\>)" +S_OPERATORS_4 = r"(\>\>\>=)" +S_OPERATORS = "(" + S_OPERATORS_4 + "|" + S_OPERATORS_3 + "|" + S_OPERATORS_2 + ")" + +S_REGEXP = "(\/[^\t\n\r\f\v\/]+?\/[mgi]*)" +S_REGEXP_A = "\.(match|search|split)\s*\(\s*\(*\s*" + S_REGEXP + "\s*\)*\s*\)" +S_REGEXP_B = "\.(replace)\s*\(\s*\(*\s*" + S_REGEXP + "\s*\)*\s*?,?" +S_REGEXP_C = "\s*\(*\s*" + S_REGEXP + "\)*\.(test|exec)\s*\(\s*" +S_REGEXP_D = "(:|=|\?)\s*\(*\s*" + S_REGEXP + "\s*\)*" +S_REGEXP_ALL = S_REGEXP_A + "|" + S_REGEXP_B + "|" + S_REGEXP_C + "|" + S_REGEXP_D + +S_ALL = "(" + comment.S_BLOCK_COMMENT + "|" + comment.S_INLINE_COMMENT + "|" + S_STRING_A + "|" + S_STRING_B + "|" + S_REGEXP_ALL + "|" + S_FLOAT + "|" + S_OPERATORS + ")" + +# compile regexp strings +R_STRING_A = re.compile("^" + S_STRING_A + "$") +R_STRING_B = re.compile("^" + S_STRING_B + "$") +R_FLOAT = re.compile("^" + S_FLOAT + "$") +R_OPERATORS = re.compile(S_OPERATORS) +R_REGEXP = re.compile(S_REGEXP) +R_REGEXP_A = re.compile(S_REGEXP_A) +R_REGEXP_B = re.compile(S_REGEXP_B) +R_REGEXP_C = re.compile(S_REGEXP_C) +R_REGEXP_D = re.compile(S_REGEXP_D) +R_ALL = re.compile(S_ALL) + + + + +parseLine = 1 +parseColumn = 1 +parseUniqueId = "" + + + +def protectEscape(s): + return s.replace("\\\\", "__$ESCAPE0$__").replace("\\\"", "__$ESCAPE1$__").replace("\\\'", "__$ESCAPE2__").replace("\/", "__$ESCAPE3__").replace("\!", "__$ESCAPE4__") + + + +def recoverEscape(s): + return s.replace("__$ESCAPE0$__", "\\\\").replace("__$ESCAPE1$__", "\\\"").replace("__$ESCAPE2__", "\\'").replace("__$ESCAPE3__", "\/").replace("__$ESCAPE4__", "\!") + + + +def parseElement(element): + global parseUniqueId + global parseLine + global parseColumn + + if config.JSPROTECTED.has_key(element): + # print "PROTECTED: %s" % PROTECTED[content] + obj = { "type" : "protected", "detail" : config.JSPROTECTED[element], "source" : element, "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId } + + elif element in config.JSBUILTIN: + # print "BUILTIN: %s" % content + obj = { "type" : "builtin", "detail" : "", "source" : element, "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId } + + elif R_NUMBER.search(element): + # print "NUMBER: %s" % content + obj = { "type" : "number", "detail" : "int", "source" : element, "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId } + + elif element.startswith("_"): + # print "PRIVATE NAME: %s" % content + obj = { "type" : "name", "detail" : "private", "source" : element, "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId } + + elif len(element) > 0: + # print "PUBLIC NAME: %s" % content + obj = { "type" : "name", "detail" : "public", "source" : element, "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId } + + parseColumn += len(element) + + return obj + + +def parsePart(part): + global parseUniqueId + global parseLine + global parseColumn + + tokens = [] + element = "" + + for line in R_NEWLINE.split(part): + if line == "\n": + tokens.append({ "type" : "eol", "source" : "", "detail" : "", "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId }) + parseColumn = 1 + parseLine += 1 + + else: + for item in R_WHITESPACE.split(line): + if item == "": + continue + + if not R_NONWHITESPACE.search(item): + parseColumn += len(item) + continue + + # print "ITEM: '%s'" % item + + for char in item: + # work on single character tokens, otherwise concat to a bigger element + if config.JSTOKENS.has_key(char): + # convert existing element + if element != "": + if R_NONWHITESPACE.search(element): + tokens.append(parseElement(element)) + + element = "" + + # add character to token list + tokens.append({ "type" : "token", "detail" : config.JSTOKENS[char], "source" : char, "line" : parseLine, "column" : parseColumn, "id" : parseUniqueId }) + parseColumn += 1 + + else: + element += char + + # convert remaining stuff to tokens + if element != "": + if R_NONWHITESPACE.search(element): + tokens.append(parseElement(element)) + + element = "" + + return tokens + + + +def parseFragmentLead(content, fragment, tokens): + pos = content.find(fragment) + + if pos > 0: + tokens.extend(parsePart(recoverEscape(content[0:pos]))) + + return content[pos+len(fragment):] + + + +def hasLeadingContent(tokens): + pos = len(tokens) - 1 + while pos > 0: + if tokens[pos]["type"] == "eol": + break + + else: + return True + + return False + + + + + +def parseStream(content, uniqueId=""): + # make global variables available + global parseLine + global parseColumn + global parseUniqueId + + # reset global stuff + parseColumn = 1 + parseLine = 1 + parseUniqueId = uniqueId + + # prepare storage + tokens = [] + content = protectEscape(content) + + # print " * searching for patterns..." + all = R_ALL.findall(content) + + # print " * structuring..." + for item in all: + fragment = item[0] + + # print "Found: '%s'" % fragment + + if comment.R_BLOCK_COMMENT.match(fragment): + source = recoverEscape(fragment) + format = comment.getFormat(source) + multiline = comment.isMultiLine(source) + + # print "Type:MultiComment" + content = parseFragmentLead(content, fragment, tokens) + + atBegin = not hasLeadingContent(tokens) + if re.compile("^\s*\n").search(content): + atEnd = True + else: + atEnd = False + + # print "Begin: %s, End: %s" % (atBegin, atEnd) + + # Fixing source content + if atBegin: + source = comment.outdent(source, parseColumn - 1) + + source = comment.correct(source) + + connection = "before" + + if atEnd and not atBegin: + connection = "after" + else: + connection = "before" + + tokens.append({ "type" : "comment", "detail" : format, "multiline" : multiline, "connection" : connection, "source" : source, "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn, "begin" : atBegin, "end" : atEnd }) + parseLine += len(fragment.split("\n")) - 1 + + elif comment.R_INLINE_COMMENT.match(fragment): + # print "Type:SingleComment" + source = recoverEscape(fragment) + content = parseFragmentLead(content, fragment, tokens) + + atBegin = hasLeadingContent(tokens) + atEnd = True + + if atBegin: + connection = "after" + else: + connection = "before" + + source = comment.correct(source) + + tokens.append({ "type" : "comment", "detail" : "inline", "multiline" : False, "connection" : connection, "source" : source, "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn, "begin" : atBegin, "end" : atEnd }) + + elif R_STRING_A.match(fragment): + # print "Type:StringA: %s" % fragment + content = parseFragmentLead(content, fragment, tokens) + source = recoverEscape(fragment)[1:-1] + tokens.append({ "type" : "string", "detail" : "singlequotes", "source" : source.replace("\\\n",""), "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn }) + parseLine += source.count("\\\n"); + + elif R_STRING_B.match(fragment): + # print "Type:StringB: %s" % fragment + content = parseFragmentLead(content, fragment, tokens) + source = recoverEscape(fragment)[1:-1] + tokens.append({ "type" : "string", "detail" : "doublequotes", "source" : source.replace("\\\n",""), "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn }) + parseLine += source.count("\\\n"); + + elif R_FLOAT.match(fragment): + # print "Type:Float: %s" % fragment + content = parseFragmentLead(content, fragment, tokens) + tokens.append({ "type" : "number", "detail" : "float", "source" : fragment, "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn }) + + elif R_OPERATORS.match(fragment): + # print "Type:Operator: %s" % fragment + content = parseFragmentLead(content, fragment, tokens) + tokens.append({ "type" : "token", "detail" : config.JSTOKENS[fragment], "source" : fragment, "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn }) + + else: + fragresult = R_REGEXP.search(fragment) + + if fragresult: + # print "Type:RegExp: %s" % fragresult.group(0) + + if R_REGEXP_A.match(fragment) or R_REGEXP_B.match(fragment) or R_REGEXP_C.match(fragment) or R_REGEXP_D.match(fragment): + content = parseFragmentLead(content, fragresult.group(0), tokens) + tokens.append({ "type" : "regexp", "detail" : "", "source" : recoverEscape(fragresult.group(0)), "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn }) + + else: + print "Bad regular expression: %s" % fragresult.group(0) + + else: + print "Type:None!" + + tokens.extend(parsePart(recoverEscape(content))) + tokens.append({ "type" : "eof", "source" : "", "detail" : "", "id" : parseUniqueId, "line" : parseLine, "column" : parseColumn }) + + return tokens + + + +def parseFile(fileName, uniqueId="", encoding="utf-8"): + return parseStream(filetool.read(fileName, encoding), uniqueId) + + + + +def convertTokensToString(tokens): + tokenizedString = "" + + for token in tokens: + tokenizedString += "%s%s" % (token, "\n") + + return tokenizedString + + + + + +def main(): + parser = optparse.OptionParser() + + parser.add_option("-w", "--write", action="store_true", dest="write", default=False, help="Writes file to incoming fileName + EXTENSION.") + parser.add_option("-e", "--extension", dest="extension", metavar="EXTENSION", help="The EXTENSION to use", default=".tokenized") + parser.add_option("--encoding", dest="encoding", default="utf-8", metavar="ENCODING", help="Defines the encoding expected for input files.") + + (options, args) = parser.parse_args() + + if len(args) == 0: + print "Needs one or more arguments (files) to tokenize!" + sys.exit(1) + + for fileName in args: + if options.write: + print "Compiling %s => %s%s" % (fileName, fileName, options.extension) + else: + print "Compiling %s => stdout" % fileName + + tokenString = convertTokensToString(parseFile(fileName, "", options.encoding)) + + if options.write: + filetool.save(fileName + options.extension, tokenString, options.encoding) + + else: + try: + print tokenString + + except UnicodeEncodeError: + print " * Could not encode result to ascii. Use '-w' instead." + sys.exit(1) + + + + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/tree.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/tree.py new file mode 100755 index 0000000000..ab997738ff --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/tree.py @@ -0,0 +1,582 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Fabian Jakobs (fjakobs) +# +################################################################################ + +class NodeAccessException (Exception): + def __init__ (self, msg, node): + Exception.__init__(self, msg) + self.node = node + + +class Node: + def __init__ (self, type): + self.type = type + + + + + + def hasAttributes(self): + return hasattr(self, "attributes") + + def set(self, key, value): + """Sets an attribute""" + if not isinstance(value, (basestring, int, long, float, complex, bool)): + raise NodeAccessException("'value' is no string or number: " + str(value), self) + if not self.hasAttributes(): + self.attributes = {} + self.attributes[key] = value + return self + + def get(self, key, mandatory = True): + value = None + if hasattr(self, "attributes") and key in self.attributes: + value = self.attributes[key] + + if value != None: + return value + elif mandatory: + raise NodeAccessException("Node " + self.type + " has no attribute " + key, self) + + def remove(self, key): + del self.attributes[key] + if len(self.attributes) == 0: + del self.attributes + + + + + + + + def hasParent(self): + return hasattr(self, "parent") and self.parent != None + + def hasChildren(self, ignoreComments = False): + if not ignoreComments: + return hasattr(self, "children") and len(self.children) > 0 + else: + if not hasattr(self, "children"): + return False + + for child in self.children: + if child.type != "comment" and child.type != "commentsBefore" and child.type != "commentsAfter": + return True + + def addChild(self, childNode, index = None): + if childNode: + if not self.hasChildren(): + self.children = [] + + if childNode.hasParent(): + childNode.parent.removeChild(childNode) + + if index != None: + self.children.insert(index, childNode) + else: + self.children.append(childNode) + childNode.parent = self + return self + + def removeChild(self, childNode): + if self.hasChildren(): + self.children.remove(childNode) + childNode.parent = None + if len(self.children) == 0: + del self.children + + def replaceChild(self, oldChild, newChild): + if self.hasChildren(): + if newChild.hasParent(): + newChild.parent.removeChild(newChild) + + self.children.insert(self.children.index(oldChild), newChild) + newChild.parent = self + self.children.remove(oldChild) + + + + + + + def getChild(self, type, mandatory = True): + if self.hasChildren(): + for child in self.children: + if child.type == type: + return child + if mandatory: + raise NodeAccessException("Node " + self.type + " has no child with type " + type, self) + + def hasChildRecursive(self, type): + if isinstance(type, basestring): + if self.type == type: + return True + elif isinstance(type, list): + if self.type in type: + return True + + if self.hasChildren(): + for child in self.children: + if child.hasChildRecursive(type): + return True + + return False + + def hasChild(self, type): + if self.hasChildren(): + for child in self.children: + if isinstance(type, basestring): + if child.type == type: + return True + elif isinstance(type, list): + if child.type in type: + return True + + return False + + def getChildrenLength(self, ignoreComments=False): + if self.hasChildren(): + if ignoreComments: + counter = 0 + for child in self.children: + if not child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + counter += 1 + return counter + + else: + return len(self.children) + + return 0 + + + + def makeComplex(self): + makeComplex = self.get("makeComplex", False) + + if makeComplex != None: + return makeComplex + + else: + makeComplex = False + + + + if self.type == "comment": + makeComplex = True + + elif self.type == "block": + if self.hasChildren(): + counter = 0 + for child in self.children: + if child.type != "commentsAfter": + counter += 1 + if counter > 1: + makeComplex = True + + elif self.type == "loop": + if self.get("loopType") == "IF" and self.hasParent() and self.parent.type == "elseStatement": + pass + else: + makeComplex = True + + elif self.type == "function": + makeComplex = self.getChild("body").hasChild("block") and self.getChild("body").getChild("block").getChildrenLength() > 0 + + elif self.type in [ "loop", "switch" ]: + makeComplex = True + + elif self.hasChild("commentsBefore"): + makeComplex = True + + + + # Final test: Ask the children (slower) + if not makeComplex and not self.type in [ "comment", "commentsBefore", "commentsAfter" ]: + makeComplex = self.isComplex() + + + self.set("makeComplex", makeComplex) + + # print "makeComplex: %s = %s" % (self.type, makeComplex) + + return makeComplex + + + + def isComplex(self): + isComplex = self.get("isComplex", False) + + if isComplex != None: + return isComplex + + else: + isComplex = False + + + + if not self.hasChildren(): + isComplex = False + + elif self.type == "block": + counter = 0 + if self.hasChildren(): + for child in self.children: + if child.type != "commentsAfter": + counter += 1 + + if child.hasChild("commentsBefore"): + counter += 1 + + if counter > 1: + break + + if counter > 1: + isComplex = True + + else: + if self.getChildrenLength() == 0: + isComplex = False + + # in else, try to find the mode of the previous if first + elif self.hasParent() and self.parent.type == "elseStatement": + isComplex = self.parent.parent.getChild("statement").hasComplexBlock() + + # in if, try to find the mode of the parent if (if existent) + elif self.hasParent() and self.parent.type == "statement" and self.parent.parent.type == "loop" and self.parent.parent.get("loopType") == "IF": + if self.parent.parent.hasParent() and self.parent.parent.parent.hasParent(): + if self.parent.parent.parent.parent.type == "loop": + isComplex = self.parent.parent.parent.parent.getChild("statement").hasComplexBlock() + + # in catch/finally, try to find the mode of the try statement + elif self.hasParent() and self.parent.hasParent() and self.parent.parent.type in [ "catch", "finally" ]: + isComplex = self.parent.parent.parent.getChild("statement").hasComplexBlock() + + elif self.type == "elseStatement": + if self.hasComplexBlock(): + isComplex = True + elif self.hasChild("loop") and self.getChild("loop").getChild("statement").hasComplexBlock(): + isComplex = True + + elif self.type == "array" : + if self.getChildrenLength(True) > 5: + isComplex = True + + elif self.type == "map" : + ml = self.getChildrenLength(True) + if ml > 1: + isComplex = True + + # Final test: Ask the children (slower) + if not (self.type == "elseStatement" and self.hasChild("loop")): + if not isComplex and self.hasComplexChildren(): + isComplex = True + + # print self.type + " :: %s" % isComplex + self.set("isComplex", isComplex) + + # print "isComplex: %s = %s" % (self.type, isComplex) + + return isComplex + + + + def hasComplexChildren(self): + if self.hasChildren(): + for child in self.children: + if child.makeComplex(): + return True + + return False + + + def hasComplexBlock(self): + if self.hasChild("block"): + return self.getChild("block").isComplex() + + return False + + + def hasBlockChildren(self): + if self.hasChild("block"): + return self.getChild("block").hasChildren() + + return False + + + def getChildPosition(self, searchedChild, ignoreComments = False): + if self.hasChildren() and searchedChild in self.children: + if ignoreComments: + counter = 0 + for child in self.children: + if child == searchedChild: + return counter + + if not child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + counter += 1 + + else: + return self.children.index(searchedChild) + + return -1 + + + + def getChildByPosition(self, pos, mandatory = True, ignoreComments = False): + if self.hasChildren(): + i = 0 + for child in self.children: + if ignoreComments and child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + continue + + if i == pos: + return child + + i += 1 + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no child as position %s" % pos, self) + + + + def getChildByAttribute(self, key, value, mandatory = True): + if self.hasChildren(): + for child in self.children: + if child.get(key) == value: + return child + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no child with attribute " + key + " = " + value, self) + + def getChildByTypeAndAttribute(self, type, key, value, mandatory = True): + if self.hasChildren(): + for child in self.children: + if child.type == type and child.get(key) == value: + return child + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no child with type " + type + " and attribute " + key + " = " + value, self) + + def getFirstChild(self, mandatory = True, ignoreComments = False): + if self.hasChildren(): + for child in self.children: + if ignoreComments and child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + continue + + return child + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no children", self) + + def getLastChild(self, mandatory = True, ignoreComments = False): + if self.hasChildren(): + if not ignoreComments: + return self.children[-1] + else: + pos = len(self.children) - 1 + while pos >= 0: + child = self.children[pos] + + if ignoreComments and child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + pos -= 1 + continue + + return child + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no children", self) + + def getPreviousSibling(self, mandatory = True, ignoreComments = False): + if self.hasParent(): + prev = None + for child in self.parent.children: + + if ignoreComments and child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + continue + + if child == self: + if prev != None: + return prev + else: + break + + prev = child + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no previous sibling", self) + + def getFollowingSibling(self, mandatory = True, ignoreComments = False): + if self.hasParent(): + prev = None + + for child in self.parent.children: + if ignoreComments and child.type in [ "comment", "commentsBefore", "commentsAfter" ]: + continue + + if prev != None: + return child + + if child == self: + prev = child + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no following sibling", self) + + def isFirstChild(self, ignoreComments = False): + if not self.hasParent(): + return False + + return self.parent.getFirstChild(False, ignoreComments) == self + + def isLastChild(self, ignoreComments = False): + if not self.hasParent(): + return False + + return self.parent.getLastChild(False, ignoreComments) == self + + def addListChild(self, listName, childNode): + listNode = self.getChild(listName, False) + if not listNode: + listNode = Node(listName) + self.addChild(listNode) + listNode.addChild(childNode) + + def getListChildByAttribute(self, listName, key, value, mandatory = True): + listNode = self.getChild(listName, False) + if listNode: + return listNode.getChildByAttribute(key, value, mandatory) + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no child " + listName, self) + + def getFirstListChild(self, listName, mandatory = True): + listNode = self.getChild(listName, False) + if listNode: + return listNode.getFirstChild(mandatory) + + if mandatory: + raise NodeAccessException("Node " + self.type + " has no child " + listName, self) + + def getAllChildrenOfType(self, type): + return self._getAllChildrenOfType(type, []) + + def _getAllChildrenOfType(self, type, found=[]): + if self.hasChildren(): + for child in self.children: + if child.type == type: + found.append(child) + + child._getAllChildrenOfType(type, found) + + return found + + + + +def nodeToXmlString(node, prefix = "", childPrefix = " ", newLine="\n", encoding="utf-8"): + hasText = False + asString = prefix + "<" + node.type + if node.hasAttributes(): + for key in node.attributes: + if key == "text": + hasText = True + else: + asString += " " + key + "=\"" + escapeXmlChars(node.attributes[key], True, encoding) + "\"" + + if not node.hasChildren() and not hasText: + asString += "/>" + newLine + else: + asString += ">" + + if hasText: + if node.hasChildren(): + asString += newLine + prefix + childPrefix + else: + asString += newLine + prefix + childPrefix + + asString += "<text>" + escapeXmlChars(node.attributes["text"], False, encoding) + "</text>" + newLine + + if node.hasChildren(): + asString += newLine + for child in node.children: + asString += nodeToXmlString(child, prefix + childPrefix, childPrefix, newLine, encoding) + + asString += prefix + "</" + node.type + ">" + newLine + + return asString + + + +def nodeToJsonString(node, prefix = "", childPrefix = " ", newLine="\n"): + asString = prefix + '{type:"' + escapeJsonChars(node.type) + '"' + + if node.hasAttributes(): + asString += ',attributes:{' + firstAttribute = True + for key in node.attributes: + if not firstAttribute: + asString += ',' + asString += '"' + key + '":"' + escapeJsonChars(node.attributes[key]) + '"' + firstAttribute = False + asString += '}' + + if node.hasChildren(): + asString += ',children:[' + newLine + + firstChild = True + prefix = prefix + childPrefix + for child in node.children: + asString += nodeToJsonString(child, prefix, childPrefix, newLine) + ',' + newLine + firstChild = False + + # NOTE We remove the ',\n' of the last child + if newLine == "": + asString = asString[:-1] + prefix + ']' + else: + asString = asString[:-2] + newLine + prefix + ']' + + asString += '}' + + return asString + + + +def escapeXmlChars(text, inAttribute, encoding="utf-8"): + if isinstance(text, basestring): + text = text.replace("&", "&").replace("<", "<").replace(">", ">") + if inAttribute: + text = text.replace("\"", """) + elif isinstance(text, bool): + text = str(text).lower() + else: + text = str(text) + + return text + + + +def escapeJsonChars(text): + if isinstance(text, basestring): + text = text.replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r') + elif isinstance(text, bool): + text = str(text).lower() + else: + text = str(text) + + return text diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/treegenerator.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/treegenerator.py new file mode 100755 index 0000000000..aa6f13b7e2 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/treegenerator.py @@ -0,0 +1,1039 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# +################################################################################ + +import sys, optparse +import tokenizer, tree, filetool, variableoptimizer + + +SINGLE_LEFT_OPERATORS = [ "NOT", "BITNOT", "ADD", "SUB", "INC", "DEC" ] + +SINGLE_RIGHT_OPERATORS = [ "INC", "DEC" ] + +MULTI_TOKEN_OPERATORS = [ "HOOK", "ADD", "SUB", "MUL", "DIV", "MOD", \ + "LT", "LE", "GT", "GE", "EQ", "NE", "SHEQ", "SHNE", \ + "AND", "OR", "BITOR", "BITXOR", "BITAND", "POWEROF", \ + "LSH", "RSH", "URSH" ] + +MULTI_PROTECTED_OPERATORS = [ "INSTANCEOF", "IN" ] + +ASSIGN_OPERATORS = [ "ASSIGN", "ASSIGN_ADD", "ASSIGN_SUB", "ASSIGN_MUL", \ + "ASSIGN_DIV", "ASSIGN_MOD", "ASSIGN_BITOR", "ASSIGN_BITXOR", "ASSIGN_BITAND", \ + "ASSIGN_LSH", "ASSIGN_RSH", "ASSIGN_URSH" ] + +LOOP_KEYWORDS = [ "WHILE", "IF", "FOR", "WITH" ] + + +class TokenStream: + def __init__ (self, tokens): + self.tokens = tokens + self.commentsBefore = None + self.parsepos = -1 + self.eolBefore = False + + def curr (self): + """Returns the current token.""" + return self.tokens[self.parsepos] + + def currType (self): + return self.curr()["type"] + + def currDetail (self): + return self.curr()["detail"] + + def currSource (self): + return self.curr()["source"] + + def currLine (self): + return self.curr()["line"] + + def currColumn (self): + return self.curr()["column"] + + def currMultiline (self): + return self.curr()["multiline"] + + def currConnection (self): + return self.curr()["connection"] + + def currIsType (self, tokenType, tokenDetail = None): + if self.currType() != tokenType: + return False + else: + if tokenDetail == None: + return True + elif type(tokenDetail) == list: + return self.currDetail() in tokenDetail + else: + return self.currDetail() == tokenDetail + + def expectCurrType (self, tokenType, tokenDetail = None): + if not self.currIsType(tokenType, tokenDetail): + expectedDesc = tokenType + if type(tokenDetail) == str: + expectedDesc += "/" + tokenDetail + raiseSyntaxException(self.curr(), expectedDesc) + + def finished (self): + # NOTE: the last token is end of file + return self.parsepos >= len(self.tokens) - 1 + + def next (self, item=None, after=False): + length = len(self.tokens) + self.eolBefore = False + self.breakBefore = False + + token = None + while self.parsepos < length - 1: + self.parsepos += 1 + + token = self.tokens[self.parsepos] + + if token["type"] == "eol": + if self.eolBefore: + self.breakBefore = True + + self.eolBefore = True + # ignore end of line + pass + + elif token["type"] == "comment": + # After current item + if token["connection"] == "after": + if not token.has_key("inserted") or not token["inserted"]: + if item: + commentNode = tree.Node("comment") + commentNode.set("line", token["line"]) + commentNode.set("column", token["column"]) + commentNode.set("text", token["source"]) + commentNode.set("detail", token["detail"]) + commentNode.set("multiline", token["multiline"]) + commentNode.set("connection", token["connection"]) + commentNode.set("begin", token["begin"]) + commentNode.set("end", token["end"]) + + if after: + item.addListChild("commentsAfter", commentNode) + else: + item.addChild(commentNode) + + self.eolBefore = False + self.breakBefore = False + + else: + print "Found unresolved after comment in line %s, column %s" % (token["line"], token["column"]) + print token["source"] + pass + + # Documentation and Block comments of next item + else: + if not self.commentsBefore: + self.commentsBefore = [] + + commentNode = tree.Node("comment") + commentNode.set("line", token["line"]) + commentNode.set("column", token["column"]) + commentNode.set("text", token["source"]) + commentNode.set("detail", token["detail"]) + commentNode.set("multiline", token["multiline"]) + commentNode.set("connection", token["connection"]) + commentNode.set("begin", token["begin"]) + commentNode.set("end", token["end"]) + + self.commentsBefore.append(commentNode) + + self.eolBefore = False + self.breakBefore = False + + else: + break + + #print "next token: " + str(token) + + if token == None: + # return end of file token + return self.tokens[length - 1] + else: + return token + + # alternative to use, when we want to check if the next token + # is a comment, but are not able to use next() because if there is + # no comment we want to leave in our position + def comment (self, item, after=False): + length = len(self.tokens) + + token = None + pos = self.parsepos + + while pos < length - 1: + pos += 1 + token = self.tokens[pos] + + if token["type"] == "comment" and token["connection"] == "after" and (not token.has_key("inserted") or not token["inserted"]): + commentNode = tree.Node("comment") + commentNode.set("line", token["line"]) + commentNode.set("column", token["column"]) + commentNode.set("text", token["source"]) + commentNode.set("detail", token["detail"]) + commentNode.set("multiline", token["multiline"]) + commentNode.set("connection", token["connection"]) + commentNode.set("begin", token["begin"]) + commentNode.set("end", token["end"]) + + token["inserted"] = True + + if after: + item.addListChild("commentsAfter", commentNode) + else: + item.addChild(commentNode) + + else: + break + + def hadEolBefore(self): + return self.eolBefore + + def hadBreakBefore(self): + return self.breakBefore + + def clearCommentsBefore(self): + commentsBefore = self.commentsBefore + self.commentsBefore = None + return commentsBefore + + + +class SyntaxException (Exception): + pass + + + +def createItemNode(type, stream): + # print "CREATE %s" % type + + node = tree.Node(type) + node.set("line", stream.currLine()) + node.set("column", stream.currColumn()) + + commentsBefore = stream.clearCommentsBefore() + if commentsBefore: + for comment in commentsBefore: + node.addListChild("commentsBefore", comment) + + return node + + + +def raiseSyntaxException (token, expectedDesc = None): + if expectedDesc: + msg = "Expected " + expectedDesc + " but found " + else: + msg = "Unexpected " + + msg += token["type"] + + if token["detail"]: + msg += "/" + token["detail"] + + msg += ": '" + token["source"] + "'. file:" + \ + token["id"] + ", line:" + str(token["line"]) + \ + ", column:" + str(token["column"]) + + raise SyntaxException(msg) + + + +def createSyntaxTree (tokenArr): + """Creates a syntax tree from a token stream. + + tokens: the token stream.""" + + stream = TokenStream(tokenArr) + stream.next() + + rootBlock = tree.Node("file") + rootBlock.set("file", stream.curr()["id"]) + + while not stream.finished(): + rootBlock.addChild(readStatement(stream)) + + return rootBlock + + + +def readExpression (stream): + return readStatement(stream, True) + + + +def readStatement (stream, expressionMode = False, overrunSemicolon = True, inStatementList = False): + item = None + + eolBefore = stream.hadEolBefore() + breakBefore = stream.hadBreakBefore() + + # print "PROGRESS: %s - %s (%s) [expr=%s]" % (stream.currType(), stream.currDetail(), stream.currLine(), expressionMode) + + if currIsIdentifier(stream, True): + # statement starts with an identifier + variable = readVariable(stream, True) + variable = readObjectOperation(stream, variable) + + if stream.currIsType("token", ASSIGN_OPERATORS): + # This is an assignment + item = createItemNode("assignment", stream) + item.set("operator", stream.currDetail()) + stream.next(item) + + item.addListChild("left", variable) + item.addListChild("right", readExpression(stream)) + elif stream.currIsType("token", "COLON") and not expressionMode: + # This is a label + item = variable + item.type = "label" + stream.next(variable) + else: + # Something else comes after the variable -> It's a sole variable + item = variable + + # Any comments found for the variable belong to the extracted item + commentsChild = variable.getChild("commentsBefore", False) + if item and commentsChild != None: + variable.removeChild(commentsChild) + item.addChild(commentsChild, 0) + elif stream.currIsType("protected", "FUNCTION"): + item = createItemNode("function", stream) + stream.next(item) + + # Read optional function name + if stream.currIsType("name"): + item.set("name", stream.currSource()) + stream.next(item) + + readParamList(item, stream) + item.addListChild("body", readBlock(stream)) + + # Check for direct execution: function() {}() + if stream.currIsType("token", "LP"): + # The function is executed directly + functionItem = item + item = createItemNode("call", stream) + item.addListChild("operand", functionItem) + readParamList(item, stream) + item = readObjectOperation(stream, item) + elif stream.currIsType("protected", "VOID"): + stream.next(item) + item = createItemNode("void", stream) + stream.next(item) + item.addChild(readStatement(stream, expressionMode)) + stream.expectCurrType("token", "RP") + stream.next(item, True) + item = readObjectOperation(stream, item) + elif stream.currIsType("token", "LP"): + igroup = createItemNode("group", stream) + stream.next(igroup) + igroup.addChild(readStatement(stream, expressionMode)) + stream.expectCurrType("token", "RP") + stream.next(igroup, True) + oper = readObjectOperation(stream, igroup) + + # supports e.g. (this.editor.object || this.editor.iframe).style.marginTop = null; + if stream.currIsType("token", ASSIGN_OPERATORS): + # This is an assignment + item = createItemNode("assignment", stream) + item.set("operator", stream.currDetail()) + stream.next(item) + + item.addListChild("left", oper) + item.addListChild("right", readExpression(stream)) + else: + # Something else comes after the variable -> It's a sole variable + item = oper + + elif stream.currIsType("string"): + item = createItemNode("constant", stream) + item.set("constantType", "string") + item.set("value", stream.currSource()) + item.set("detail", stream.currDetail()) + stream.next(item, True) + # This is a member accessor (E.g. "bla.blubb") + item = readObjectOperation(stream, item) + elif stream.currIsType("number"): + item = createItemNode("constant", stream) + item.set("constantType", "number") + item.set("value", stream.currSource()) + item.set("detail", stream.currDetail()) + stream.next(item, True) + # This is a member accessor (E.g. "bla.blubb") + item = readObjectOperation(stream, item) + elif stream.currIsType("regexp"): + item = createItemNode("constant", stream) + item.set("constantType", "regexp") + item.set("value", stream.currSource()) + stream.next(item, True) + # This is a member accessor (E.g. "bla.blubb") + item = readObjectOperation(stream, item) + elif expressionMode and (stream.currIsType("protected", "TRUE") or stream.currIsType("protected", "FALSE")): + item = createItemNode("constant", stream) + item.set("constantType", "boolean") + item.set("value", stream.currSource()) + stream.next(item, True) + elif expressionMode and stream.currIsType("protected", "NULL"): + item = createItemNode("constant", stream) + item.set("constantType", "null") + item.set("value", stream.currSource()) + stream.next(item, True) + elif expressionMode and stream.currIsType("token", "LC"): + item = readMap(stream) + elif expressionMode and stream.currIsType("token", "LB"): + item = readArray(stream) + elif stream.currIsType("token", SINGLE_LEFT_OPERATORS): + item = createItemNode("operation", stream) + item.set("operator", stream.currDetail()) + item.set("left", True) + stream.next(item) + item.addListChild("first", readExpression(stream)) + elif stream.currIsType("protected", "TYPEOF"): + item = createItemNode("operation", stream) + item.set("operator", "TYPEOF") + item.set("left", True) + stream.next(item) + item.addListChild("first", readExpression(stream)) + elif stream.currIsType("protected", "NEW"): + item = readInstantiation(stream) + item = readObjectOperation(stream, item) + elif not expressionMode and stream.currIsType("protected", "VAR"): + item = createItemNode("definitionList", stream) + stream.next(item) + finished = False + while not finished: + if not currIsIdentifier(stream, False): + raiseSyntaxException(stream.curr(), "identifier") + + childitem = createItemNode("definition", stream) + childitem.set("identifier", stream.currSource()) + stream.next(childitem) + if stream.currIsType("token", "ASSIGN"): + assign = createItemNode("assignment", stream) + childitem.addChild(assign) + stream.next(assign) + assign.addChild(readExpression(stream)) + + item.addChild(childitem) + + # Check whether anothe definition follows, e.g. "var a, b=1, c=4" + if stream.currIsType("token", "COMMA"): + stream.next(item) + else: + finished = True + + stream.comment(item, True) + + elif not expressionMode and stream.currIsType("protected", LOOP_KEYWORDS): + item = readLoop(stream) + elif not expressionMode and stream.currIsType("protected", "DO"): + item = readDoWhile(stream) + elif not expressionMode and stream.currIsType("protected", "SWITCH"): + item = readSwitch(stream) + elif not expressionMode and stream.currIsType("protected", "TRY"): + item = readTryCatch(stream) + elif not expressionMode and stream.currIsType("token", "LC"): + item = readBlock(stream) + elif not expressionMode and stream.currIsType("protected", "RETURN"): + item = createItemNode("return", stream) + stream.next(item) + # NOTE: The expression after the return keyword is optional + if not stream.currIsType("token", "SEMICOLON") and not stream.currIsType("token", "RC"): + item.addListChild("expression", readExpression(stream)) + stream.comment(item, True) + elif not expressionMode and stream.currIsType("protected", "THROW"): + item = createItemNode("throw", stream) + stream.next(item) + item.addListChild("expression", readExpression(stream)) + stream.comment(item, True) + elif not expressionMode and stream.currIsType("protected", "DELETE"): + item = createItemNode("delete", stream) + stream.next(item) + item.addListChild("expression", readExpression(stream)) + stream.comment(item, True) + elif not expressionMode and stream.currIsType("protected", "BREAK"): + item = createItemNode("break", stream) + stream.next(item) + # NOTE: The label after the break keyword is optional + if not stream.hadEolBefore() and stream.currIsType("name"): + item.set("label", stream.currSource()) + # As the label is an attribute, we need to put following comments into after + # to differenciate between comments before and after the label + stream.next(item, True) + elif not expressionMode and stream.currIsType("protected", "CONTINUE"): + item = createItemNode("continue", stream) + stream.next(item) + # NOTE: The label after the continue keyword is optional + if not stream.hadEolBefore() and stream.currIsType("name"): + item.set("label", stream.currSource()) + stream.next(item, True) + + if not item: + if stream.currIsType("token", "SEMICOLON") and not expressionMode: + # This is an empty statement + item = createItemNode("emptyStatement", stream) + stream.next(item) + else: + if expressionMode: + expectedDesc = "expression" + else: + expectedDesc = "statement" + raiseSyntaxException(stream.curr(), expectedDesc) + + # check whether this is an operation + if stream.currIsType("token", MULTI_TOKEN_OPERATORS) or stream.currIsType("protected", MULTI_PROTECTED_OPERATORS) or (stream.currIsType("token", SINGLE_RIGHT_OPERATORS) and not stream.hadEolBefore()): + # its an operation -> We've already parsed the first operand (in item) + parsedItem = item + + oper = stream.currDetail() + + item = createItemNode("operation", stream) + item.addListChild("first", parsedItem) + item.set("operator", oper) + stream.next(item) + + if oper in MULTI_TOKEN_OPERATORS or oper in MULTI_PROTECTED_OPERATORS: + # It's a multi operator -> There must be a second argument + item.addListChild("second", readExpression(stream)) + if oper == "HOOK": + # It's a "? :" operation -> There must be a third argument + stream.expectCurrType("token", "COLON") + stream.next(item) + item.addListChild("third", readExpression(stream)) + + # Deep scan on single right operators e.g. if(i-- > 4) + if oper in SINGLE_RIGHT_OPERATORS and stream.currIsType("token", MULTI_TOKEN_OPERATORS) and expressionMode: + paroper = stream.currDetail() + + paritem = createItemNode("operation", stream) + paritem.addListChild("first", item) + paritem.set("operator", paroper) + stream.next(item) + + if paroper in MULTI_TOKEN_OPERATORS or paroper in MULTI_PROTECTED_OPERATORS: + # It's a multi operator -> There must be a second argument + paritem.addListChild("second", readExpression(stream)) + if paroper == "HOOK": + # It's a "? :" operation -> There must be a third argument + stream.expectCurrType("token", "COLON") + stream.next(item) + paritem.addListChild("third", readExpression(stream)) + + # return parent item + item = paritem + + + + # check whether this is a combined statement, e.g. "bla(), i++" + if not expressionMode and not inStatementList and stream.currIsType("token", "COMMA"): + statementList = createItemNode("statementList", stream) + statementList.addChild(item) + while stream.currIsType("token", "COMMA"): + stream.next(statementList) + statementList.addChild(readStatement(stream, False, False, True)) + item = statementList + + # go over the optional semicolon + if not expressionMode and overrunSemicolon and stream.currIsType("token", "SEMICOLON"): + stream.next(item, True) + + + item.set("eolBefore", eolBefore) + item.set("breakBefore", breakBefore) + + return item + + + +def currIsIdentifier (stream, allowThis): + det = stream.currDetail() + return stream.currIsType("name") or stream.currIsType("builtin") \ + or (stream.currIsType("protected") and \ + (det == "INFINITY" or det == "PROTOTYPE" or det == "CALL" or \ + det == "APPLY" or (allowThis and det == "THIS"))) + + + +def readVariable (stream, allowArrays): + # Note: keywords may be used as identifiers, too + item = createItemNode("variable", stream) + + done = False + firstIdentifier = True + while not done: + if not currIsIdentifier(stream, firstIdentifier): + raiseSyntaxException(stream.curr(), "identifier") + + identifier = createItemNode("identifier", stream) + identifier.set("name", stream.currSource()) + stream.next(identifier) + + if allowArrays: + while stream.currIsType("token", "LB"): + accessor = createItemNode("accessor", stream) + stream.next(accessor) + accessor.addListChild("identifier", identifier) + accessor.addListChild("key", readExpression(stream)) + + stream.expectCurrType("token", "RB") + stream.next(accessor, True) + + identifier = accessor + + item.addChild(identifier) + + firstIdentifier = False + + if stream.currIsType("token", "DOT"): + stream.next(item) + else: + done = True + + return item + + + +def readObjectOperation(stream, operand, onlyAllowMemberAccess = False): + if stream.currIsType("token", "DOT"): + # This is a member accessor (E.g. "bla.blubb") + item = createItemNode("accessor", stream) + stream.next(item) + item.addListChild("left", operand) + + # special mode for constants which should be assigned to an accessor first + if operand.type == "constant": + item.addListChild("right", readVariable(stream, False)) + item = readObjectOperation(stream, item) + else: + item.addListChild("right", readObjectOperation(stream, readVariable(stream, False))) + + elif stream.currIsType("token", "LP"): + # This is a function call (E.g. "bla(...)") + item = createItemNode("call", stream) + item.addListChild("operand", operand) + readParamList(item, stream) + item = readObjectOperation(stream, item) + elif stream.currIsType("token", "LB"): + # This is an array access (E.g. "bla[...]") + item = createItemNode("accessor", stream) + stream.next(item) + item.addListChild("identifier", operand) + item.addListChild("key", readExpression(stream)) + + stream.expectCurrType("token", "RB") + stream.next(item, True) + item = readObjectOperation(stream, item) + else: + item = operand + + # Any comments found for the operand belong to the item + if operand != item: + commentsChild = operand.getChild("commentsBefore", False) + if commentsChild != None: + operand.removeChild(commentsChild) + item.addChild(commentsChild, 0) + + return item + + + +def readParamList (node, stream): + stream.expectCurrType("token", "LP") + + params = createItemNode("params", stream) + node.addChild(params) + + stream.next(params) + + firstParam = True + lastExpr = None + while not stream.currIsType("token", "RP"): + if firstParam: + firstParam = False + else: + stream.expectCurrType("token", "COMMA") + stream.next(lastExpr, True) + + lastExpr = readExpression(stream) + params.addChild(lastExpr) + + # Has an end defined by the loop above + # This means that all comments following are after item + stream.next(params, True) + + +def readBlock(stream): + stream.expectCurrType("token", "LC") + item = createItemNode("block", stream) + + # Iterate through children + stream.next(item) + while not stream.currIsType("token", "RC"): + item.addChild(readStatement(stream)) + + # Has an end defined by the loop above + # This means that all comments following are after item + stream.next(item, True) + + return item + + +def readMap(stream): + stream.expectCurrType("token", "LC") + + item = createItemNode("map", stream) + stream.next(item) + + # NOTE: We use our own flag for checking whether the array already has entries + # and not item.hasChildren(), because item.hasChildren() is also true + # when there are comments before the array + hasEntries = False + + while not stream.currIsType("token", "RC"): + if hasEntries: + stream.expectCurrType("token", "COMMA") + stream.next(item) + + if not currIsIdentifier(stream, True) and not stream.currIsType("string") and not stream.currIsType("number"): + raiseSyntaxException(stream.curr(), "map key (identifier, string or number)") + + keyvalue = createItemNode("keyvalue", stream) + keyvalue.set("key", stream.currSource()) + + if stream.currIsType("string"): + keyvalue.set("quote", stream.currDetail()) + + stream.next(keyvalue) + stream.expectCurrType("token", "COLON") + stream.next(keyvalue, True) + keyvalue.addListChild("value", readExpression(stream)) + + item.addChild(keyvalue) + + hasEntries = True + + # Has an end defined by the loop above + # This means that all comments following are after item + stream.next(item, True) + + return item + + + +def readArray(stream): + stream.expectCurrType("token", "LB") + + item = createItemNode("array", stream) + stream.next(item) + + # NOTE: We use our own flag for checking whether the array already has entries + # and not item.hasChildren(), because item.hasChildren() is also true + # when there are comments before the array + hasEntries = False + while not stream.currIsType("token", "RB"): + if hasEntries: + stream.expectCurrType("token", "COMMA") + stream.next(item) + + item.addChild(readExpression(stream)) + hasEntries = True + + # Has an end defined by the loop above + # This means that all comments following are after item + stream.next(item, True) + + # Support constructs like [ "foo", "bar" ].join("") + item = readObjectOperation(stream, item) + + return item + + + +def readInstantiation(stream): + stream.expectCurrType("protected", "NEW") + + item = createItemNode("instantiation", stream) + stream.next(item) + + # Could be a simple variable or a just-in-time function declaration (closure) + # Read this as expression + stmnt = readStatement(stream, True, False) + item.addListChild("expression", stmnt) + + return item + + + +def readLoop(stream): + stream.expectCurrType("protected", LOOP_KEYWORDS) + + loopType = stream.currDetail() + + item = createItemNode("loop", stream) + item.set("loopType", loopType) + + stream.next(item) + stream.expectCurrType("token", "LP") + + if loopType == "FOR": + stream.next(item) + + if not stream.currIsType("token", "SEMICOLON"): + # Read the optional first statement + first = createItemNode("first", stream) + item.addChild(first) + first.addChild(readStatement(stream, False, False)) + stream.comment(first, True) + + if stream.currIsType("token", "SEMICOLON"): + # It's a for (;;) loop + item.set("forVariant", "iter") + + stream.next(item) + if not stream.currIsType("token", "SEMICOLON"): + # Read the optional second expression + second = createItemNode("second", stream) + item.addChild(second) + second.addChild(readExpression(stream)) + stream.comment(second, True) + + stream.expectCurrType("token", "SEMICOLON") + stream.next(item) + + if not stream.currIsType("token", "RP"): + # Read the optional third statement + third = createItemNode("third", stream) + item.addChild(third) + third.addChild(readStatement(stream, False, False)) + stream.comment(third, True) + + elif stream.currIsType("token", "RP"): + # It's a for ( in ) loop + item.set("forVariant", "in") + pass + + else: + raiseSyntaxException(stream.curr(), "semicolon or in") + + stream.expectCurrType("token", "RP") + + else: + expr = createItemNode("expression", stream) + stream.next(expr) + expr.addChild(readExpression(stream)) + item.addChild(expr) + stream.comment(expr, True) + stream.expectCurrType("token", "RP") + + # comments should be already completed from the above code + stmnt = createItemNode("statement", stream) + item.addChild(stmnt) + stream.next() + stmnt.addChild(readStatement(stream)) + + if loopType == "IF" and stream.currIsType("protected", "ELSE"): + elseStmnt = createItemNode("elseStatement", stream) + item.addChild(elseStmnt) + stream.next(elseStmnt) + elseStmnt.addChild(readStatement(stream)) + + return item + + + +def readDoWhile(stream): + stream.expectCurrType("protected", "DO") + + item = createItemNode("loop", stream) + item.set("loopType", "DO") + stream.next(item) + + stmnt = createItemNode("statement", stream) + item.addChild(stmnt) + stmnt.addChild(readStatement(stream)) + + stream.expectCurrType("protected", "WHILE") + stream.next(item) + + stream.expectCurrType("token", "LP") + + expr = createItemNode("expression", stream) + item.addChild(expr) + stream.next(expr) + + expr.addChild(readExpression(stream)) + + stream.expectCurrType("token", "RP") + stream.next(item, True) + + return item + + +def readSwitch(stream): + stream.expectCurrType("protected", "SWITCH") + + item = createItemNode("switch", stream) + item.set("switchType", "case") + + stream.next(item) + stream.expectCurrType("token", "LP") + + expr = createItemNode("expression", stream) + stream.next(expr) + item.addChild(expr) + expr.addChild(readExpression(stream)) + + stream.expectCurrType("token", "RP") + stream.next(expr, True) + + stream.expectCurrType("token", "LC") + stmnt = createItemNode("statement", stream) + item.addChild(stmnt) + stream.next(stmnt) + + while not stream.currIsType("token", "RC"): + if stream.currIsType("protected", "CASE"): + caseItem = createItemNode("case", stream) + stream.next(caseItem) + caseItem.addListChild("expression", readExpression(stream)) + stmnt.addChild(caseItem) + + stream.expectCurrType("token", "COLON") + stream.next(caseItem, True) + + elif stream.currIsType("protected", "DEFAULT"): + defaultItem = createItemNode("default", stream) + stmnt.addChild(defaultItem) + stream.next(defaultItem) + + stream.expectCurrType("token", "COLON") + stream.next(defaultItem, True) + + else: + raiseSyntaxException(stream.curr(), "case or default") + + while not stream.currIsType("token", "RC") and not stream.currIsType("protected", "CASE") and not stream.currIsType("protected", "DEFAULT"): + stmnt.addChild(readStatement(stream)) + + stream.next(stmnt, True) + + return item + + +def readTryCatch(stream): + stream.expectCurrType("protected", "TRY") + + item = createItemNode("switch", stream) + item.set("switchType", "catch") + stream.next(item) + + item.addListChild("statement", readStatement(stream)) + + while stream.currIsType("protected", "CATCH"): + catchItem = createItemNode("catch", stream) + stream.next(catchItem) + + stream.expectCurrType("token", "LP") + + exprItem = createItemNode("expression", stream) + catchItem.addChild(exprItem) + stream.next(exprItem) + exprItem.addChild(readExpression(stream)) + + stream.expectCurrType("token", "RP") + stream.next(exprItem, True) + + stmnt = createItemNode("statement", stream) + catchItem.addChild(stmnt) + stmnt.addChild(readStatement(stream)) + + item.addChild(catchItem) + + if stream.currIsType("protected", "FINALLY"): + finallyItem = createItemNode("finally", stream) + stream.next(finallyItem) + + stmnt = createItemNode("statement", stream) + finallyItem.addChild(stmnt) + stmnt.addChild(readStatement(stream)) + + item.addChild(finallyItem) + + return item + + + + + + + + + +def main(): + parser = optparse.OptionParser() + + parser.add_option("-w", "--write", action="store_true", dest="write", default=False, help="Writes file to incoming fileName + EXTENSION.") + parser.add_option("-e", "--extension", dest="extension", metavar="EXTENSION", help="The EXTENSION to use", default=".compiled") + parser.add_option("--optimize-variables", action="store_true", dest="optimizeVariables", default=False, help="Optimize variables. Reducing size.") + parser.add_option("--encoding", dest="encoding", default="utf-8", metavar="ENCODING", help="Defines the encoding expected for input files.") + + (options, args) = parser.parse_args() + + if len(args) == 0: + print "Needs one or more arguments (files) to compile!" + sys.exit(1) + + for fileName in args: + if options.write: + print "Generating tree of %s => %s%s" % (fileName, fileName, options.extension) + else: + print "Generating tree of %s => stdout" % fileName + + restree = createSyntaxTree(tokenizer.parseFile(fileName, "", options.encoding)) + + if options.optimizeVariables: + variableoptimizer.search(restree, [], 0, "$") + + compiledString = tree.nodeToXmlString(restree) + if options.write: + filetool.save(fileName + options.extension, compiledString) + + else: + try: + print compiledString + + except UnicodeEncodeError: + print " * Could not encode result to ascii. Use '-w' instead." + sys.exit(1) + + + +if __name__ == '__main__': + try: + main() + + except KeyboardInterrupt: + print + print " * Keyboard Interrupt" + sys.exit(1) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/variableoptimizer.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/variableoptimizer.py new file mode 100644 index 0000000000..eb85bd4067 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/variableoptimizer.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python +################################################################################ +# +# qooxdoo - the new era of web development +# +# http://qooxdoo.org +# +# Copyright: +# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org +# +# License: +# LGPL: http://www.gnu.org/licenses/lgpl.html +# EPL: http://www.eclipse.org/org/documents/epl-v10.php +# See the LICENSE file in the project's top-level directory for details. +# +# Authors: +# * Sebastian Werner (wpbasti) +# * Alessandro Sala (asala) +# +################################################################################ + +import tree, mapper + +def skip(name, prefix): + return len(prefix) > 0 and name[:len(prefix)] == prefix + +def search(node, found, level=0, prefix="$", skipPrefix="", register=False, debug=False): + if node.type == "function": + if register: + name = node.get("name", False) + if name != None and not name in found: + # print "Name: %s" % name + found.append(name) + + foundLen = len(found) + register = True + + if debug: + print "\n%s<scope line='%s'>" % ((" " * level), node.get("line")) + + # e.g. func(name1, name2); + elif register and node.type == "variable" and node.hasChildren() and len(node.children) == 1: + if node.parent.type == "params" and node.parent.parent.type != "call": + first = node.getFirstChild() + + if first.type == "identifier": + name = first.get("name") + + if not name in found: + # print "Name: %s" % name + found.append(name) + + # e.g. var name1, name2 = "foo"; + elif register and node.type == "definition": + name = node.get("identifier", False) + + if name != None: + if not name in found: + # print "Name: %s" % name + found.append(name) + + # Iterate over children + if node.hasChildren(): + if node.type == "function": + for child in node.children: + search(child, found, level+1, prefix, skipPrefix, register, debug) + + else: + for child in node.children: + search(child, found, level, prefix, skipPrefix, register, debug) + + # Function closed + if node.type == "function": + + # Debug + if debug: + for item in found: + print " %s<item>%s</item>" % ((" " * level), item) + print "%s</scope>" % (" " * level) + + # Iterate over content + # Replace variables in current scope + update(node, found, prefix, skipPrefix, debug) + del found[foundLen:] + + + +def update(node, found, prefix="$", skipPrefix="", debug=False): + + # Handle all identifiers + if node.type == "identifier": + + isFirstChild = False + isVariableMember = False + + if node.parent.type == "variable": + isVariableMember = True + varParent = node.parent.parent + + if not (varParent.type == "right" and varParent.parent.type == "accessor"): + isFirstChild = node.parent.getFirstChild(True, True) == node + + elif node.parent.type == "identifier" and node.parent.parent.type == "accessor": + isVariableMember = True + accessor = node.parent.parent + isFirstChild = accessor.parent.getFirstChild(True, True) == accessor + + # inside a variable parent only respect the first member + if not isVariableMember or isFirstChild: + idenName = node.get("name", False) + + if idenName != None and idenName in found and not skip(idenName, skipPrefix): + replName = "%s%s" % (prefix, mapper.convert(found.index(idenName))) + node.set("name", replName) + + if debug: + print " - Replaced '%s' with '%s'" % (idenName, replName) + + # Handle variable definition + elif node.type == "definition": + idenName = node.get("identifier", False) + + if idenName != None and idenName in found and not skip(idenName, skipPrefix): + replName = "%s%s" % (prefix, mapper.convert(found.index(idenName))) + node.set("identifier", replName) + + if debug: + print " - Replaced '%s' with '%s'" % (idenName, replName) + + # Handle function definition + elif node.type == "function": + idenName = node.get("name", False) + + if idenName != None and idenName in found and not skip(idenName, skipPrefix): + replName = "%s%s" % (prefix, mapper.convert(found.index(idenName))) + node.set("name", replName) + + if debug: + print " - Replaced '%s' with '%s'" % (idenName, replName) + + # Iterate over children + if node.hasChildren(): + for child in node.children: + update(child, found, prefix, skipPrefix, debug) diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/core.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/core.dat new file mode 100755 index 0000000000..cf7fdcc0ff --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/core.dat @@ -0,0 +1,12 @@ +###########################################################################
+#
+# Generates a compiled qooxdoo core JavaScript file
+#
+###########################################################################
+
+class-path = framework/source/class
+cache-directory = framework/.cache
+include = core
+generate-compiled-script
+compiled-script-file = core.js
+optimize-strings
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/io.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/io.dat new file mode 100644 index 0000000000..2b0f8d0142 --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/io.dat @@ -0,0 +1,12 @@ +###########################################################################
+#
+# Generates a compiled qooxdoo io JavaScript file
+#
+###########################################################################
+
+class-path = framework/source/class
+cache-directory = framework/.cache
+include = qx.io.remote.*
+generate-compiled-script
+compiled-script-file = io.js
+optimize-strings
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/packages.dat b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/packages.dat new file mode 100755 index 0000000000..d1419546ff --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/presets/packages.dat @@ -0,0 +1,25 @@ +###########################################################################
+#
+# Generates 3 JavaScript files with different include configuration
+#
+###########################################################################
+
+class-path = framework/source/class
+cache-directory = framework/.cache
+generate-compiled-script
+optimize-strings
+
+package = core
+include = core
+compiled-script-file = pkg-core.js
+
+package = ui_core
+include = ui_core
+exclude = core
+compiled-script-file = pkg-ui_core.js
+
+package = ui_basic
+include = ui_basic
+exclude = core
+exclude = ui_core
+compiled-script-file = pkg-ui_basic.js
|